From 7c8ce9b9a7d3fc1aaa4a621e86415b25ad10a34f Mon Sep 17 00:00:00 2001
From: panlili2024 <14743743+panlili2024@user.noreply.gitee.com>
Date: 星期三, 19 三月 2025 09:36:28 +0800
Subject: [PATCH] 添加source屏扫码流程
---
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java | 275 ++++++++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 230 insertions(+), 45 deletions(-)
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java
index 14f9b6e..2147f3e 100644
--- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java
@@ -1,16 +1,12 @@
package com.hdl.sdk.connect.socket;
-import static com.hdl.sdk.connect.config.HDLLinkConfig.AUTHENTICATE_IS_DEVICEINFO_KEY;
-
import android.os.Build;
import android.text.TextUtils;
-import android.util.Log;
import androidx.annotation.RequiresApi;
import com.google.gson.JsonObject;
import com.google.gson.reflect.TypeToken;
-import com.hdl.sdk.common.HDLSdk;
import com.hdl.sdk.common.config.TopicConstant;
import com.hdl.sdk.common.event.EventDispatcher;
import com.hdl.sdk.common.event.EventListener;
@@ -18,34 +14,30 @@
import com.hdl.sdk.common.exception.HDLLinkException;
import com.hdl.sdk.common.utils.IdUtils;
import com.hdl.sdk.common.utils.LogUtils;
-import com.hdl.sdk.common.utils.SPUtils;
import com.hdl.sdk.common.utils.ThreadToolUtils;
import com.hdl.sdk.common.utils.gson.GsonConvert;
import com.hdl.sdk.connect.HDLLink;
+import com.hdl.sdk.connect.bean.LinkRequest;
+import com.hdl.sdk.connect.bean.LinkResponse;
import com.hdl.sdk.connect.bean.LoginRequest;
-import com.hdl.sdk.connect.bean.request.AuthenticateRequest;
import com.hdl.sdk.connect.bean.request.BroadcastRequest;
import com.hdl.sdk.connect.bean.request.DeviceAuthRequest;
-import com.hdl.sdk.connect.bean.request.GatewayInfoRequest;
+import com.hdl.sdk.connect.bean.request.DeviceControlRequest;
+import com.hdl.sdk.connect.bean.request.FunctionAttributeRequest;
import com.hdl.sdk.connect.bean.request.ListOidRequest;
import com.hdl.sdk.connect.bean.request.ListOidRequest2;
import com.hdl.sdk.connect.bean.request.ListSidRequest;
import com.hdl.sdk.connect.bean.request.ListUploadRequest;
-import com.hdl.sdk.connect.bean.response.AuthenticateResponse;
+import com.hdl.sdk.connect.bean.request.LogicEnableRequest;
+import com.hdl.sdk.connect.bean.request.PropertyReadRequest;
import com.hdl.sdk.connect.bean.response.BaseLocalCodeResponse;
import com.hdl.sdk.connect.bean.response.BaseLocalResponse;
-import com.hdl.sdk.connect.bean.request.DeviceControlRequest;
-import com.hdl.sdk.connect.bean.request.FunctionAttributeRequest;
-import com.hdl.sdk.connect.bean.LinkRequest;
-import com.hdl.sdk.connect.bean.LinkResponse;
-import com.hdl.sdk.connect.bean.request.PropertyReadRequest;
import com.hdl.sdk.connect.bean.response.DeviceInfoResponse;
import com.hdl.sdk.connect.callback.HDLLinkCallBack;
import com.hdl.sdk.connect.callback.HDLLinkResponseCallBack;
import com.hdl.sdk.connect.config.HDLLinkConfig;
import com.hdl.sdk.connect.protocol.LinkMessageDecoder;
import com.hdl.sdk.connect.protocol.LinkMessageEncoder;
-import com.hdl.sdk.connect.utils.AesUtil;
import com.hdl.sdk.socket.SocketBoot;
import com.hdl.sdk.socket.SocketOptions;
import com.hdl.sdk.socket.client.IHeartbeat;
@@ -54,8 +46,8 @@
import com.hdl.sdk.socket.listener.ConnectStatusListener;
import com.hdl.sdk.socket.listener.SendListener;
+import java.lang.reflect.Method;
import java.util.ArrayList;
-import java.util.Base64;
import java.util.List;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
@@ -109,10 +101,13 @@
public void run() {
while (true) {
try {
- Thread.sleep(1000);
-// LogUtils.i("checkIfCertified=" + HDLLink.getInstance().checkIfCertified() + " getTcp().connected=" + getTcp().connected);
+ Thread.sleep(5000);
try {
- if (!HDLLink.getInstance().checkIfCertified() || (!TextUtils.isEmpty(getTcpIp()) && getTcp().connected)) {
+ if (!HDLLink.getInstance().checkIfCertified()) {
+ continue;
+ }
+
+ if (!TextUtils.isEmpty(getTcpIp()) && getTcp().connected) {
continue;
}
} catch (Exception e) {
@@ -473,37 +468,43 @@
}
}
- public SocketBoot getTcp() throws RuntimeException {
- if (TextUtils.isEmpty(getTcpIp())) {
+ public synchronized SocketBoot getTcp() throws RuntimeException {
+ String gatewayIpAddress = getTcpIp();
+ if (TextUtils.isEmpty(gatewayIpAddress)) {
LogUtils.e("璇锋悳绱㈢綉鍏�");
throw new RuntimeException("璇锋悳绱㈢綉鍏�");
}
//濡傛灉娌℃湁鍒濆鍖栵紝鎴栬�呯綉鍏矷P鏇存敼浜嗭紝灏遍噸鏂板垵濮嬪寲
- if (tcpBoot == null || !getTcpOptions().getIp().equals(getTcpIp())) {
- tcpBoot = TcpClient.init(getTcpIp(), getTcpPort(), getTcpOptions());
+ if (tcpBoot == null || !getTcpOptions().getIp().equals(gatewayIpAddress)) {
+ tcpBoot = TcpClient.init(gatewayIpAddress, getTcpPort(), getTcpOptions());
tcpBoot.SetHeartbeat(new IHeartbeat() {
@Override
public void heartbeat() {
-
- if (HDLLinkConfig.getInstance().getDeviceInfoBean() == null || HDLLinkConfig.getInstance().getDeviceInfoBean().getOID() == null) {
- LogUtils.i("DeviceInfoBean涓虹┖锛岄渶瑕佽缃墠鑳芥甯稿績璺�");
- return;
- }
String time = String.valueOf(System.currentTimeMillis());
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("id", IdUtils.getUUId());
jsonObject.addProperty("time_stamp", time);
+ if (HDLLinkConfig.getInstance().getDeviceInfoBean().getOID() == null) {
+ //涓嶈蛋浠庢満鍏ョ綉锛岄�氳繃gatewayId鍙戦��
+ if (HDLLinkConfig.getInstance().getGatewayId() == null) {
+ return;
+ }
+ String topic = String.format(TopicConstant.HEARTBEAT, HDLLinkConfig.getInstance().getGatewayId());
+ LinkRequest message = new LinkRequest(topic,
+ jsonObject.toString());
+ sendMsg(message.getSendBytes(), null, null, null);
- if (HDLLinkConfig.getInstance().getRequestBean() != null) {
- jsonObject.addProperty("mac", HDLLinkConfig.getInstance().getRequestBean().getMAC());
+ } else {
+ if (HDLLinkConfig.getInstance().getRequestBean() != null) {
+ jsonObject.addProperty("mac", HDLLinkConfig.getInstance().getRequestBean().getMAC());
+ }
+ //璧颁粠鏈哄叆缃戯紝閫氳繃oid鍙戦��
+ String topic = String.format(TopicConstant.HEARTBEAT, HDLLinkConfig.getInstance().getDeviceInfoBean().getOID());
+ LinkRequest message = new LinkRequest(topic,
+ jsonObject.toString());
+ sendMsg(message.getSendBytes(), null, null, null);
}
-
- String topic = String.format(TopicConstant.HEARTBEAT, HDLLinkConfig.getInstance().getDeviceInfoBean().getOID());
-
- LinkRequest message = new LinkRequest(topic,
- jsonObject.toString());
- sendMsg(message.getSendBytes(), null, null, null);
}
});
}
@@ -553,7 +554,7 @@
}
/**
- * 鑾峰彇鍦烘櫙鍒楄〃
+ * 鑾峰彇鍦烘櫙璇︽儏
*/
public void getScene(List<String> sids, HDLLinkCallBack callBack) {
if (!TextUtils.isEmpty(getGatewayId()) && !TextUtils.isEmpty(getTcpIp())) {
@@ -662,6 +663,11 @@
data.setId(IdUtils.getUUId());
data.setTime_stamp(time);
+ //2023.10.18淇敼锛屼笂鎶id鍒楄〃澧炲姞parentOid
+ if (request != null && !TextUtils.isEmpty(HDLLinkConfig.getInstance().getParentOid())) {
+ request.setParentOid(HDLLinkConfig.getInstance().getParentOid());
+ }
+
List<ListUploadRequest> list = new ArrayList<>();
list.add(request);
@@ -701,8 +707,8 @@
/**
* 涓婃姤Sid鍒楄〃
*
- * @param requestList sid鍒楄〃
- * @param callBack 鍥炶皟
+ * @param requestList sid鍒楄〃
+ * @param callBack 鍥炶皟
*/
public void UploadSidList(List<ListSidRequest> requestList, HDLLinkCallBack callBack) {
if (!TextUtils.isEmpty(getGatewayId()) && !TextUtils.isEmpty(getTcpIp())) {
@@ -949,14 +955,13 @@
// String replyTopic = topic + "_reply";
try {
- sendMsg(message.getSendBytes(), topic, callBack, new SendListener() {
+ sendMsg(message.getSendBytes(), topic, null, new SendListener() {
@Override
public void onSucceed() {
+ HDLLinkConfig.getInstance().clearConfig();
if (callBack == null) return;
try {
callBack.onSuccess("閫�缃戞垚鍔�");
- HDLLinkConfig.getInstance().clearConfig();
-
} catch (Exception e) {
callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_DATA_ERROR));
}
@@ -995,7 +1000,11 @@
public void tcpSendMsg(String topic, String bodyStr, HDLLinkCallBack callBack) {
try {
LinkRequest message = new LinkRequest(topic, bodyStr);
+ if (topic != null && topic.endsWith("_reply")) {
+ callBack = null;
+ }
String replyTopic = topic + "_reply";
+ HDLLinkCallBack finalCallBack = callBack;
sendMsg(message.getSendBytes(), replyTopic, callBack, new SendListener() {
@Override
public void onSucceed() {
@@ -1004,8 +1013,8 @@
@Override
public void onError() {
- if (callBack != null) {
- callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_SEND_ERROR));
+ if (finalCallBack != null) {
+ finalCallBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_SEND_ERROR));
}
}
});
@@ -1116,8 +1125,9 @@
/**
* 鍥炲缃戝叧閰嶇疆鍛戒护
+ *
* @param mac_Oid_GatewayId
- * @param msgId 娑堟伅Id
+ * @param msgId 娑堟伅Id
* @param callBack
*/
public void gatewayRemoteEditReply(String mac_Oid_GatewayId, String msgId, HDLLinkCallBack callBack) {
@@ -1135,7 +1145,6 @@
String topic = String.format(TopicConstant.GATEWAY_EDIT_REMOTE_REPLY, mac_Oid_GatewayId);
LinkRequest message = new LinkRequest(topic,
GsonConvert.getGson().toJson(data));
-
try {
@@ -1166,4 +1175,180 @@
}
}
+ /**
+ * 鑾峰彇鎴块棿鍒楄〃
+ */
+ public void getRoomList(HDLLinkCallBack callBack) {
+ if (!TextUtils.isEmpty(getGatewayId()) && !TextUtils.isEmpty(getTcpIp())) {
+ String time = String.valueOf(System.currentTimeMillis());
+ JsonObject jsonObject = new JsonObject();
+ jsonObject.addProperty("id", IdUtils.getUUId());
+ jsonObject.addProperty("time_stamp", time);
+
+ String topic = String.format(TopicConstant.ROOM_LIST_GET, getGatewayId());
+
+ LinkRequest message = new LinkRequest(topic,
+ jsonObject.toString());
+ String replyTopic = topic + "_reply";
+ try {
+ sendMsg(message.getSendBytes(), replyTopic, callBack, new SendListener() {
+ @Override
+ public void onSucceed() {
+
+ }
+
+ @Override
+ public void onError() {
+ if (callBack != null) {
+ callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_GET_FUNCTION_LIST_ERROR));
+ }
+ }
+ });
+ } catch (Exception e) {
+ if (callBack != null) {
+ callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_GET_FUNCTION_LIST_ERROR));
+ }
+ }
+ } else {
+ if (callBack != null) {
+ callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_UNAUTHORIZED_ERROR));
+ }
+ }
+ }
+
+ /**
+ * 鎴块棿缁戝畾鍏崇郴鍒楄〃鑾峰彇
+ */
+ public void getRoomBindList(List<String> uid, HDLLinkCallBack callBack) {
+ if (!TextUtils.isEmpty(getGatewayId()) && !TextUtils.isEmpty(getTcpIp())) {
+ String time = String.valueOf(System.currentTimeMillis());
+ final BaseLocalResponse<List<String>> data = new BaseLocalResponse<>();
+ data.setId(IdUtils.getUUId());
+ data.setTime_stamp(time);
+
+ data.setObjects(uid);
+
+ String topic = String.format(TopicConstant.ROOM_BIND_LIST_GET, getGatewayId());
+ LinkRequest message = new LinkRequest(topic,
+ GsonConvert.getGson().toJson(data));
+
+ String replyTopic = topic + "_reply";
+ try {
+ sendMsg(message.getSendBytes(), replyTopic, callBack, new SendListener() {
+ @Override
+ public void onSucceed() {
+
+ }
+
+ @Override
+ public void onError() {
+ if (callBack != null) {
+ callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_GET_FUNCTION_LIST_ERROR));
+ }
+ }
+ });
+ } catch (Exception e) {
+ if (callBack != null) {
+ callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_GET_FUNCTION_LIST_ERROR));
+ }
+ }
+ } else {
+ if (callBack != null) {
+ callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_UNAUTHORIZED_ERROR));
+ }
+ }
+ }
+
+ /**
+ * 鑾峰彇鑷姩鍖栧垪琛�
+ */
+ public void getLogicList(HDLLinkCallBack callBack) {
+ if (!TextUtils.isEmpty(getGatewayId()) && !TextUtils.isEmpty(getTcpIp())) {
+ String time = String.valueOf(System.currentTimeMillis());
+ JsonObject jsonObject = new JsonObject();
+ jsonObject.addProperty("id", IdUtils.getUUId());
+ jsonObject.addProperty("time_stamp", time);
+
+ String topic = String.format(TopicConstant.LOGIC_LIST_GET, getGatewayId());
+
+ LinkRequest message = new LinkRequest(topic,
+ jsonObject.toString());
+ String replyTopic = topic + "_reply";
+ try {
+ sendMsg(message.getSendBytes(), replyTopic, callBack, new SendListener() {
+ @Override
+ public void onSucceed() {
+
+ }
+
+ @Override
+ public void onError() {
+ if (callBack != null) {
+ callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_GET_FUNCTION_LIST_ERROR));
+ }
+ }
+ });
+ } catch (Exception e) {
+ if (callBack != null) {
+ callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_GET_FUNCTION_LIST_ERROR));
+ }
+ }
+ } else {
+ if (callBack != null) {
+ callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_UNAUTHORIZED_ERROR));
+ }
+ }
+ }
+
+ /**
+ * 饩冨姩鍖栧惎饨ょ饨�
+ *
+ * @param sid 鑷姩鍖杝id
+ * @param enable true=鍚饯 false=绂佲饯
+ * @param callBack 鍥炶皟
+ */
+ public void editEnableLogic(String sid, boolean enable, HDLLinkCallBack callBack) {
+ if (!TextUtils.isEmpty(getGatewayId()) && !TextUtils.isEmpty(getTcpIp())) {
+ String time = String.valueOf(System.currentTimeMillis());
+ final BaseLocalResponse<List<LogicEnableRequest>> data = new BaseLocalResponse<>();
+ data.setId(IdUtils.getUUId());
+ data.setTime_stamp(time);
+
+ List<LogicEnableRequest> list = new ArrayList<>();
+ LogicEnableRequest request = new LogicEnableRequest(sid, enable);
+ list.add(request);
+
+ data.setObjects(list);
+
+ String topic = String.format(TopicConstant.EDIT_LOGIC_ENABLE, getGatewayId());
+ LinkRequest message = new LinkRequest(topic,
+ GsonConvert.getGson().toJson(data));
+
+ String replyTopic = topic + "_reply";
+ try {
+ sendMsg(message.getSendBytes(), replyTopic, callBack, new SendListener() {
+ @Override
+ public void onSucceed() {
+
+ }
+
+ @Override
+ public void onError() {
+ if (callBack != null) {
+ callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_SEND_ERROR));
+ }
+ }
+ });
+ } catch (Exception e) {
+ if (callBack != null) {
+ callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_SEND_ERROR));
+ }
+ }
+ } else {
+ if (callBack != null) {
+ callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_SEND_ERROR));
+ }
+ }
+ }
+
}
--
Gitblit v1.8.0