JLChen
2021-11-15 501b06cda2eeda60456f317da3074b6c19cc9495
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
package com.hdl.hdlsdk;
 
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
 
import android.Manifest;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
 
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.listener.OnItemClickListener;
import com.hdl.sdk.connect.config.HDLLinkConfig;
import com.hdl.sdk.connect.socket.HDLAuthSocket;
import com.hdl.sdk.connect.socket.HDLSocket;
import com.hdl.sdk.connect.bean.DeviceControlRequest;
import com.hdl.sdk.connect.protocol.LinkMessageDecoder;
import com.hdl.sdk.connect.protocol.LinkMessageEncoder;
import com.hdl.sdk.socket.SocketOptions;
import com.hdl.sdk.socket.codec.MessagePipeLine;
 
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
 
public class MainActivity extends AppCompatActivity {
 
    private DemoAdapter demoAdapter;
    private RecyclerView rv;
    private TextView tv;
    private TextView responseTv;
    boolean isOn;
 
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        responseTv = findViewById(R.id.response_tv);
        tv = findViewById(R.id.state_tv);
        rv = findViewById(R.id.rv);
        rv.setLayoutManager(new LinearLayoutManager(this));
        HDLLinkConfig.getInstance().setLocalEncrypt(true);
        HDLLinkConfig.getInstance().setLocalSecret("5648d9b9cafd30dd");
 
        ActivityResultLauncher<String[]> launcher = registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), new ActivityResultCallback<Map<String, Boolean>>() {
            @Override
            public void onActivityResult(Map<String, Boolean> result) {
 
            }
        });
 
        launcher.launch(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE});
 
        final List<DemoBean> beans = new ArrayList<>();
        beans.add(new DemoBean("搜索网关"));
        beans.add(new DemoBean("获取功能列表"));
        beans.add(new DemoBean("功能属性读取"));
        beans.add(new DemoBean("设备控制"));
        beans.add(new DemoBean("状态上报"));
        beans.add(new DemoBean("读取状态"));
        beans.add(new DemoBean("入网认证"));
        demoAdapter = new DemoAdapter(beans);
        rv.setAdapter(demoAdapter);
 
 
        final SocketOptions options = new SocketOptions();
 
        MessagePipeLine pipeLine = new MessagePipeLine();
        pipeLine.add(new LinkMessageDecoder());
        pipeLine.add(new LinkMessageEncoder());
        options.setHandleMessage(pipeLine);
        options.setEnabledHeartbeat(false);
 
        demoAdapter.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
                switch (position) {
                    case 0:
                        tv.setText("搜索网关中");
                        responseTv.setText("");
 
                        HDLSocket.getInstance().searchGateway(new HDLSocket.CallBack() {
                            @Override
                            public void onError(String error) {
                                tv.setText("网关获取失败");
                            }
 
                            @Override
                            public void onResponse(String data) {
                                tv.setText("获取网关成功");
                                responseTv.setText(data);
                            }
                        });
 
                        break;
                    case 1:
 
                        tv.setText("获取功能列表中");
                        responseTv.setText("");
                        HDLSocket.getInstance().getFunctionList(new HDLSocket.CallBack() {
                            @Override
                            public void onError(String error) {
                                tv.setText(error);
                            }
 
                            @Override
                            public void onResponse(String data) {
                                tv.setText("获取功能列表成功");
                                responseTv.setText(data);
                            }
                        });
                        break;
                    case 2:
                        //功能属性读取
                      //  HDLSocket.getInstance().getFunctionAttribute();
 
                        break;
                    case 3:
                        //设备控制
                        isOn = !isOn;
                        List<DeviceControlRequest> requestList = new ArrayList<>();
                        DeviceControlRequest request = new DeviceControlRequest();
                        request.setSid("000101B847C71B02020100010101");
                        List<DeviceControlRequest.StatusBean>  statusBeanList= new ArrayList<>();
                        DeviceControlRequest.StatusBean bean =  new DeviceControlRequest.StatusBean();
                        bean.setKey("on_off");
                        bean.setValue(isOn ? "on" : "off");
                        statusBeanList.add(bean);
                        request.setStatus(statusBeanList);
                        requestList.add(request);
                        HDLAuthSocket.getInstance().propertyDown(requestList,null);
 
 
                        break;
                    case 4:
                        //状态上报
                        //HDLSocket.getInstance().propertyUp();
                        break;
                    case 5:
                        //读取状态
                        // HDLSocket.getInstance().propertyRead();
                        break;
                    case 6:
                        //入网认证
                        HDLAuthSocket.getInstance().sendAuthenticateRequest(new HDLAuthSocket.CallBack() {
                            @Override
                            public void onError(String error) {
                                Log.i("TAG", "onError: 认证失败");
//                                tv.setText("认证失败");
//                                responseTv.setText(error);
                            }
 
                            @Override
                            public void onSuccess(String data) {
                                tv.setText("认证成功");
                                responseTv.setText(data);
                            }
                        });
 
//                        HDLAuthSocket.getInstance().searchGateway("1406844230123372545", new HDLAuthSocket.SearchGatewayCallBack() {
//                            @Override
//                            public void onEnd(String error) {
//
//                            }
//
//                            @Override
//                            public void onSuccess(GatewaySearchBean gatewaySearchBean) {
//                                Log.i("TAG", "onSuccess: 搜索成功:"+gatewaySearchBean.getGatewayId());
//                            }
//                        });
 
 
                        break;
                }
            }
        });
    }
 
}