From 134209ad70f82051da3ce63471df0cc8f778e57d Mon Sep 17 00:00:00 2001
From: panlili2024 <14743743+panlili2024@user.noreply.gitee.com>
Date: 星期三, 05 三月 2025 14:30:19 +0800
Subject: [PATCH] 增加source屏扫码绑定住宅接口

---
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java |  244 ++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 210 insertions(+), 34 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 56a047d..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;
@@ -110,9 +102,12 @@
                 while (true) {
                     try {
                         Thread.sleep(5000);
-//                        LogUtils.i("checkIfCertified=" + HDLLink.getInstance().checkIfCertified() + " getTcp().connected=" + getTcp().connected);
                         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,8 +468,8 @@
         }
     }
 
-    public synchronized SocketBoot  getTcp() throws RuntimeException {
-        String gatewayIpAddress=getTcpIp();
+    public synchronized SocketBoot getTcp() throws RuntimeException {
+        String gatewayIpAddress = getTcpIp();
         if (TextUtils.isEmpty(gatewayIpAddress)) {
             LogUtils.e("璇锋悳绱㈢綉鍏�");
             throw new RuntimeException("璇锋悳绱㈢綉鍏�");
@@ -486,25 +481,30 @@
                 @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);
                 }
             });
         }
@@ -554,7 +554,7 @@
     }
 
     /**
-     * 鑾峰彇鍦烘櫙鍒楄〃
+     * 鑾峰彇鍦烘櫙璇︽儏
      */
     public void getScene(List<String> sids, HDLLinkCallBack callBack) {
         if (!TextUtils.isEmpty(getGatewayId()) && !TextUtils.isEmpty(getTcpIp())) {
@@ -664,7 +664,7 @@
             data.setTime_stamp(time);
 
             //2023.10.18淇敼锛屼笂鎶id鍒楄〃澧炲姞parentOid
-            if (request!=null && !TextUtils.isEmpty(HDLLinkConfig.getInstance().getParentOid())) {
+            if (request != null && !TextUtils.isEmpty(HDLLinkConfig.getInstance().getParentOid())) {
                 request.setParentOid(HDLLinkConfig.getInstance().getParentOid());
             }
 
@@ -1175,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