From c84efd301bac95180aa3507a8a9a1c53068c8bb9 Mon Sep 17 00:00:00 2001
From: 562935844@qq.com
Date: 星期五, 15 九月 2023 09:45:03 +0800
Subject: [PATCH] Merge branch 'androidx' of ssh://172.16.1.23:29718/~cjl/HDLSDK_A_Android into androidx

---
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/GatewayInfoRequest.java              |   10 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/config/HDLLinkConfig.java                         |   19 +
 HDLSDK/.idea/gradle.xml                                                                                |    3 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/NetworkAccessBroadcastResponse.java |   13 +
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/AllTopicManagerUtils.java                    |  121 +++++++++++
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/protocol/LinkMessageDecoder.java                  |    3 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java                             |   99 +++++++++
 HDLSDK/com.hdl.sdk/.DS_Store                                                                           |    0 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/GatewayRemoteEditRequest.java        |   49 ++++
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/ListSidRequest.java                  |  107 +++++++++
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/AuthenticateResponse.java           |   14 +
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HDLLink.java                                      |   11 +
 HDLSDK/com.hdl.sdk/build.gradle                                                                        |    4 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/AttributesRequest.java               |   37 +++
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java                         |   38 ++-
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/config/TopicConstant.java                          |   17 +
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/DeviceInfoResponse.java             |    2 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/DeviceDeleteResponse.java           |    2 
 HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java                                              |   50 ++++
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/HDLSdk.java                                        |   19 +
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/BaseRequest.java                     |   30 ++
 21 files changed, 623 insertions(+), 25 deletions(-)

diff --git a/HDLSDK/.idea/gradle.xml b/HDLSDK/.idea/gradle.xml
index 92c877d..83ca1a0 100644
--- a/HDLSDK/.idea/gradle.xml
+++ b/HDLSDK/.idea/gradle.xml
@@ -7,7 +7,7 @@
         <option name="testRunner" value="GRADLE" />
         <option name="distributionType" value="DEFAULT_WRAPPED" />
         <option name="externalProjectPath" value="$PROJECT_DIR$" />
-        <option name="gradleJvm" value="JDK" />
+        <option name="gradleJvm" value="Embedded JDK" />
         <option name="modules">
           <set>
             <option value="$PROJECT_DIR$" />
@@ -15,7 +15,6 @@
             <option value="$PROJECT_DIR$/hdl-connect" />
           </set>
         </option>
-        <option name="resolveModulePerSourceSet" value="false" />
       </GradleProjectSettings>
     </option>
   </component>
diff --git a/HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java b/HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java
index d650ead..e22e886 100644
--- a/HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java
+++ b/HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java
@@ -5,7 +5,6 @@
 import android.content.Intent;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
-import android.os.Build;
 import android.os.Bundle;
 import android.text.TextUtils;
 import android.util.Log;
@@ -18,7 +17,6 @@
 import androidx.activity.result.ActivityResultLauncher;
 import androidx.activity.result.contract.ActivityResultContracts;
 import androidx.annotation.NonNull;
-import androidx.annotation.RequiresApi;
 import androidx.appcompat.app.AppCompatActivity;
 import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
@@ -31,13 +29,16 @@
 import com.hdl.sdk.common.event.DeleteNetworkListener;
 import com.hdl.sdk.common.event.EventListener;
 import com.hdl.sdk.common.exception.HDLLinkException;
+import com.hdl.sdk.common.utils.AllTopicManagerUtils;
 import com.hdl.sdk.common.utils.IdUtils;
 import com.hdl.sdk.common.utils.LogUtils;
 import com.hdl.sdk.common.utils.gson.GsonConvert;
 import com.hdl.sdk.connect.HDLLink;
 import com.hdl.sdk.connect.bean.LinkResponse;
+import com.hdl.sdk.connect.bean.request.AttributesRequest;
 import com.hdl.sdk.connect.bean.request.AuthenticateRequest;
 import com.hdl.sdk.connect.bean.request.DeviceControlRequest;
+import com.hdl.sdk.connect.bean.request.ListSidRequest;
 import com.hdl.sdk.connect.bean.request.ListUploadRequest;
 import com.hdl.sdk.connect.bean.response.BaseLocalResponse;
 import com.hdl.sdk.connect.bean.response.GatewaySearchBean;
@@ -49,13 +50,11 @@
 import com.hdl.sdk.connect.cloud.HDLException;
 import com.hdl.sdk.connect.config.HDLLinkConfig;
 import com.hdl.sdk.connect.socket.HDLAuthSocket;
-import com.hdl.sdk.connect.utils.AesUtil;
 
 import java.io.UnsupportedEncodingException;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 import java.util.ArrayList;
-import java.util.Base64;
 import java.util.List;
 import java.util.Map;
 
@@ -186,6 +185,8 @@
                 LogUtils.i("setDeleteNetworkListener onFailure");
             }
         });
+
+        UploadSidList();
 
         ActivityResultLauncher<String[]> launcher = registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), new ActivityResultCallback<Map<String, Boolean>>() {
             @Override
@@ -808,6 +809,47 @@
         });
     }
 
+    private void UploadSidList() {
+        tv.setText("涓婃姤Sid鍒楄〃...");
+        responseTv.setText("");
+
+        //1.璁剧疆璁惧淇℃伅
+        AuthenticateRequest.AuthenticateDeviceInfoBean authenticateDeviceInfoBean = HDLLinkConfig.getInstance().getDeviceInfoBean();
+
+        ListSidRequest request = new ListSidRequest();
+        request.setOid(authenticateDeviceInfoBean.getOID());
+        request.setName("sid鍚嶇О");
+        request.setOmodel(authenticateDeviceInfoBean.getDeviceModel());
+        request.setSid("12345678");//褰撳墠sid鐨�
+        request.setSpk("light.switch");//褰撳墠spk鍚嶇О锛屾牴鎹疄闄呰澶囨潵瀹氫箟
+        request.setFrom(authenticateDeviceInfoBean.getOID());//鏉ヨ嚜鍝釜缃戝叧锛屽鏋滄椂Link缃戠粶璁惧锛屽垯濉嚜韬玱id锛涘鏋滄槸椹卞姩鍒欎笉闇�瑕佹瀛楁
+
+        AttributesRequest attributes = new AttributesRequest();
+        attributes.setKey("on_off");
+        attributes.setData_type("string");
+        List<Object> valueList=new ArrayList<>();
+        valueList.add("on");
+        valueList.add("off");
+        attributes.setValue(valueList);
+        //娣诲姞鏀寔鐨勫睘鎬у垪琛�
+        List<AttributesRequest> attributesList = new ArrayList<>();
+        request.setAttributes(attributesList);
+        List<ListSidRequest> sidRequestList = new ArrayList<>();
+        sidRequestList.add(request);
+        HDLLink.getInstance().UploadSidList(sidRequestList, new HDLLinkCallBack() {
+            @Override
+            public void onError(HDLLinkException error) {
+                tv.setText(error.getMsg());
+            }
+
+            @Override
+            public void onSuccess(String data) {
+                tv.setText("涓婃姤sid鍒楄〃鎴愬姛");
+                responseTv.setText(data);
+            }
+        });
+    }
+
     /**
      * 鑾峰彇APP鐗堟湰
      *
diff --git a/HDLSDK/com.hdl.sdk/.DS_Store b/HDLSDK/com.hdl.sdk/.DS_Store
new file mode 100644
index 0000000..47c4fb9
--- /dev/null
+++ b/HDLSDK/com.hdl.sdk/.DS_Store
Binary files differ
diff --git a/HDLSDK/com.hdl.sdk/build.gradle b/HDLSDK/com.hdl.sdk/build.gradle
index 00a22db..ec71b05 100644
--- a/HDLSDK/com.hdl.sdk/build.gradle
+++ b/HDLSDK/com.hdl.sdk/build.gradle
@@ -8,8 +8,8 @@
     defaultConfig {
         minSdkVersion rootProject.minSdkVersion
         targetSdkVersion rootProject.targetSdkVersion
-        versionCode 6
-        versionName "1.1.4"
+        versionCode 115
+        versionName "1.1.5"
     }
     buildTypes {
         debug {
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/HDLSdk.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/HDLSdk.java
index 1db547c..a60b0d7 100644
--- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/HDLSdk.java
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/HDLSdk.java
@@ -1,10 +1,13 @@
 package com.hdl.sdk.common;
 
 import android.content.Context;
+import android.text.TextUtils;
 import android.util.Log;
 
 import com.hdl.sdk.common.config.TopicConstant;
+import com.hdl.sdk.common.event.EventListener;
 import com.hdl.sdk.common.exception.HDLLinkException;
+import com.hdl.sdk.common.utils.AllTopicManagerUtils;
 import com.hdl.sdk.common.utils.IdUtils;
 import com.hdl.sdk.common.utils.LogUtils;
 import com.hdl.sdk.common.utils.gson.GsonConvert;
@@ -32,7 +35,7 @@
         return version;
     }
 
-    private String version = "1.1.0";
+    private String version = "1.1.5";
 
     private HDLSdk() {
     }
@@ -46,10 +49,24 @@
     }
 
     public void init(Context context) {
+        if (this.context != null) {
+            return;
+        }
         this.context = context.getApplicationContext();
         HDLAuthSocket.getInstance().init();
         HDLSocket.getInstance().broadcastRequest();
         LogUtils.i("HDLSdk Version:" + version);
+
+        //璁㈤槄鎵�鏈夌殑涓婚
+        HDLLink.getInstance().registerAllTopicsListener(new EventListener() {
+            @Override
+            public void onMessage(Object msg) {
+                if (msg == null || !(msg instanceof LinkResponse)) {
+                    return;
+                }
+                AllTopicManagerUtils.manager((LinkResponse) msg);
+            }
+        });
     }
 
 
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/config/TopicConstant.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/config/TopicConstant.java
index 4ad39ac..dd52c06 100644
--- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/config/TopicConstant.java
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/config/TopicConstant.java
@@ -121,5 +121,22 @@
     //椹卞姩涓婃姤oid鍒楄〃鍥炲
     public static final String LIST_UPLOAD_REPLY = "/user/%s/custom/device/list/upload_reply";
 
+    /**
+     * sid鍒楄〃涓婃姤
+     */
+    public static final String LIST_SID_UPLOAD="/base/%s/thing/topo/list/upload";
 
+    /**
+     * sid鍒楄〃涓婃姤鍥炲
+     */
+    public static final String LIST_SID_UPLOAD_REPLY="/base/%s/thing/topo/list/upload_reply";
+
+    /*
+     * 缃戝叧缂栬緫鍛戒护
+     * 鍐欒繙绋嬩俊鎭殑锛屼緥濡傛湇鍔″櫒鍦板潃銆丠omeId銆佸瘑閽ヤ箣绫�
+     * 涓庢湇鍔″櫒鐩稿叧鐨�
+     * */
+    public static final String GATEWAY_EDIT_REMOTE = "/user/%s/custom/gateway/remote/edit";
+
+    public static final String GATEWAY_EDIT_REMOTE_REPLY = "/user/%s/custom/gateway/remote/edit_reply";
 }
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/AllTopicManagerUtils.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/AllTopicManagerUtils.java
new file mode 100644
index 0000000..398429a
--- /dev/null
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/AllTopicManagerUtils.java
@@ -0,0 +1,121 @@
+package com.hdl.sdk.common.utils;
+
+import android.text.TextUtils;
+
+import com.google.gson.reflect.TypeToken;
+import com.hdl.sdk.common.config.TopicConstant;
+import com.hdl.sdk.common.utils.gson.GsonConvert;
+import com.hdl.sdk.connect.bean.LinkResponse;
+import com.hdl.sdk.connect.bean.request.GatewayRemoteEditRequest;
+import com.hdl.sdk.connect.bean.response.DeviceInfoResponse;
+import com.hdl.sdk.connect.config.HDLLinkConfig;
+import com.hdl.sdk.connect.socket.HDLSocket;
+
+import java.time.chrono.IsoChronology;
+
+/**
+ * Created by hxb on 2023/9/14.
+ */
+public  class AllTopicManagerUtils {
+
+    /**
+     * 鍏ㄥ眬涓婚澶勭悊鏂规硶锛屽彲浠ュ鐞嗘墍鏈夋帴鏀跺埌鐨勬暟鎹�
+     *
+     * @param linkResponse
+     */
+    public static void manager(LinkResponse linkResponse) {
+        try {
+            String topic = linkResponse.getTopic();
+            if (TextUtils.isEmpty(topic)) {
+                return;
+            }
+            String[] topics = topic.split("/");
+            //闈炲綋鍓嶄綇瀹呯綉鍏崇殑鏁版嵁杩斿洖
+            if (topics.length < 3) {
+                return;
+            }
+
+            String mac_Oid_GatewayId = topics[2];
+
+            if(!isLocalDevice(mac_Oid_GatewayId)){
+                LogUtils.i("涓嶆槸褰撳墠璁惧鐨勭綉鍏矷d锛孖d鏄�"+mac_Oid_GatewayId);
+                //闈炲綋鍓嶈澶囩殑鏁版嵁
+                return;
+            }
+
+            if(isSameTopic(TopicConstant.GATEWAY_EDIT_REMOTE,topic)){
+                gatewayRemoteEditRequest(mac_Oid_GatewayId, linkResponse.getData());
+            }
+
+            //TODO 閫氳繃澧炲姞if else 澧炲姞鍏跺畠涓婚绫讳技杩欐牱浣跨敤
+
+        } catch (Exception e) {
+            LogUtils.e("鍏ㄥ眬澶勭悊妯″潡寮傚父锛�" + e.getMessage());
+        }
+    }
+
+    /**
+     * 鏄惁褰撳墠鐨勮澶�
+     * @param mac_Oid_GatewayId
+     * @return
+     */
+    private static boolean isLocalDevice(String mac_Oid_GatewayId) {
+        if (TextUtils.isEmpty(mac_Oid_GatewayId)) {
+            return false;
+        }
+        String mac = HDLLinkConfig.getInstance().getDeviceInfoBean().getDeviceMAC();
+        String oid = "123";//HDLLinkConfig.getInstance().getDeviceInfoBean().getOID();
+        String gatewayId = HDLLinkConfig.getInstance().getGatewayId();
+
+        return mac_Oid_GatewayId.equals(mac) || mac_Oid_GatewayId.equals(oid) || mac_Oid_GatewayId.equals(gatewayId);
+    }
+
+    /**
+     * 鏄惁鐩稿悓涓婚
+     * @param targetTopic 鐩爣鐨勪富棰�
+     * @param sourceTopic 鎺ユ敹鐨勪富棰�
+     * @return
+     */
+    private static boolean isSameTopic(String targetTopic,String sourceTopic) {
+        if (TextUtils.isEmpty(targetTopic) || TextUtils.isEmpty(sourceTopic)) {
+            return false;
+        }
+        String[] targetTopics = targetTopic.split("/");
+        String[] sourceTopics = sourceTopic.split("/");
+
+        if (targetTopics.length != sourceTopics.length) {
+            return false;
+        }
+        for (int i = 0; i < targetTopics.length; i++) {
+            if(i==2){
+                //杩欎釜浣嶇疆涓嶅尮閰嶏紝鏄綉鍏砳d
+                continue;
+            }
+            if (!targetTopics[i] .equals( sourceTopics[i])) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * 缃戝叧淇℃伅閰嶇疆
+     * @param body
+     */
+    private static void gatewayRemoteEditRequest(String mac_Oid_GatewayId,String body) {
+        if (TextUtils.isEmpty(body)) {
+            return;
+        }
+        GatewayRemoteEditRequest gatewayRemoteEditRequest = GsonConvert.getGson().fromJson(body, new TypeToken<GatewayRemoteEditRequest>() {
+        }.getType());
+
+        if (gatewayRemoteEditRequest == null || gatewayRemoteEditRequest.getObjects() == null) {
+            return;
+        }
+
+        String homeId = gatewayRemoteEditRequest.getObjects().getHomeId();
+        HDLLinkConfig.getInstance().setHomeId(homeId);
+
+        HDLSocket.getInstance().gatewayRemoteEditReply(mac_Oid_GatewayId, gatewayRemoteEditRequest.getId(), null);
+    }
+}
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HDLLink.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HDLLink.java
index 9ee990e..83f0ec7 100644
--- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HDLLink.java
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HDLLink.java
@@ -8,6 +8,7 @@
 import com.hdl.sdk.common.utils.ThreadToolUtils;
 import com.hdl.sdk.connect.bean.request.DeviceAuthRequest;
 import com.hdl.sdk.connect.bean.request.DeviceControlRequest;
+import com.hdl.sdk.connect.bean.request.ListSidRequest;
 import com.hdl.sdk.connect.bean.request.ListUploadRequest;
 import com.hdl.sdk.connect.callback.HDLLinkCallBack;
 import com.hdl.sdk.connect.callback.HDLLinkResponseCallBack;
@@ -321,6 +322,16 @@
     }
 
     /**
+     * 涓婃姤sid鍒楄〃
+     *
+     * @param requestList  sid鍒楄〃
+     * @param callBack 鍥炶皟
+     */
+    public void UploadSidList(List<ListSidRequest> requestList, HDLLinkCallBack callBack) {
+        HDLSocket.getInstance().UploadSidList(requestList, callBack);
+    }
+
+    /**
      * 閫氱敤UDP鍙戦�佹寚浠�
      * 1绉掓病鍝嶅簲灏辫浠栭噸鏂板彂閫�,閲嶈瘯3娆�
      *
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/AttributesRequest.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/AttributesRequest.java
new file mode 100644
index 0000000..9dbf607
--- /dev/null
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/AttributesRequest.java
@@ -0,0 +1,37 @@
+package com.hdl.sdk.connect.bean.request;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * Created by hxb on 2023/9/14.
+ */
+public class AttributesRequest implements Serializable {
+    private String key;//key鍚嶇О
+    private String data_type;//鏁版嵁绫诲瀷
+    private List<Object> value;//鍊�
+
+    public String getKey() {
+        return key;
+    }
+
+    public void setKey(String key) {
+        this.key = key;
+    }
+
+    public String getData_type() {
+        return data_type;
+    }
+
+    public void setData_type(String data_type) {
+        this.data_type = data_type;
+    }
+
+    public List<Object> getValue() {
+        return value;
+    }
+
+    public void setValue(List<Object> value) {
+        this.value = value;
+    }
+}
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/BaseRequest.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/BaseRequest.java
new file mode 100644
index 0000000..5bebfcc
--- /dev/null
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/BaseRequest.java
@@ -0,0 +1,30 @@
+package com.hdl.sdk.connect.bean.request;
+
+import java.io.Serializable;
+
+/**
+ * Created by jlchen on 11/15/21.
+ *
+ * @Description : BaseResponse
+ */
+public class BaseRequest implements Serializable {
+
+    private String id;
+    private String time_stamp;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getTime_stamp() {
+        return time_stamp;
+    }
+
+    public void setTime_stamp(String time_stamp) {
+        this.time_stamp = time_stamp;
+    }
+}
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/GatewayInfoRequest.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/GatewayInfoRequest.java
index c750cc2..aa64270 100644
--- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/GatewayInfoRequest.java
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/GatewayInfoRequest.java
@@ -23,6 +23,8 @@
     private String master;
     private boolean isLocalEncrypt;
 
+    private String homeId;
+
     public String getOid() {
         return oid;
     }
@@ -126,4 +128,12 @@
     public void setLocalEncrypt(boolean localEncrypt) {
         isLocalEncrypt = localEncrypt;
     }
+
+    public String getHomeId() {
+        return homeId;
+    }
+
+    public void setHomeId(String homeId) {
+        this.homeId = homeId;
+    }
 }
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/GatewayRemoteEditRequest.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/GatewayRemoteEditRequest.java
new file mode 100644
index 0000000..54681ba
--- /dev/null
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/GatewayRemoteEditRequest.java
@@ -0,0 +1,49 @@
+package com.hdl.sdk.connect.bean.request;
+
+
+import java.io.Serializable;
+
+/**
+ * Created by hxb on 2023/9/14.
+ */
+public class GatewayRemoteEditRequest extends BaseRequest {
+    private GatewayObjects objects;
+
+    public GatewayObjects getObjects() {
+        return objects;
+    }
+
+    public void setObjects(GatewayObjects value) {
+        this.objects = value;
+    }
+
+    public static class GatewayObjects implements Serializable {
+
+        /**
+         * 浣忓畢Id
+         */
+        private String homeId;
+        /**
+         * 鏈嶅姟鍣ㄥ湴鍧�
+         */
+        private String server_addr;
+
+        public String getHomeId() {
+            return homeId;
+        }
+
+        public void setHomeId(String homeId) {
+            this.homeId = homeId;
+        }
+
+        public String getServer_addr() {
+            return server_addr;
+        }
+
+        public void setServer_addr(String server_addr) {
+            this.server_addr = server_addr;
+        }
+    }
+
+
+}
\ No newline at end of file
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/ListSidRequest.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/ListSidRequest.java
new file mode 100644
index 0000000..dad2ac4
--- /dev/null
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/ListSidRequest.java
@@ -0,0 +1,107 @@
+package com.hdl.sdk.connect.bean.request;
+
+import java.util.List;
+
+/**
+ * Created by panlili on 2023/1/31
+ * description:鑾峰彇sid鍒楄〃
+ */
+public class ListSidRequest {
+
+    /**
+     * 鏄惁鍦ㄧ嚎
+     */
+    private String online;
+    /**
+     * 鐖秓id
+     */
+    private String from;
+    /**
+     * 鏀寔鐨勫睘鎬у垪琛�
+     */
+    private List<AttributesRequest> attributes;
+    /**
+     * sid
+     */
+    private String sid;
+    /**
+     * spk
+     */
+    private String spk;
+    /**
+     * 褰撳墠oid
+     */
+    private String oid;//璁惧鐨凮id
+    /**
+     * 鍥炶矾澶囨敞
+     */
+    private String name;
+    /**
+     * 妯″潡淇℃伅
+     */
+    private String omodel;
+
+    public String getOid() {
+        return oid;
+    }
+
+    public void setOid(String oid) {
+        this.oid = oid;
+    }
+
+    public String getOnline() {
+        return online;
+    }
+
+    public void setOnline(String online) {
+        this.online = online;
+    }
+
+    public String getFrom() {
+        return from;
+    }
+
+    public void setFrom(String from) {
+        this.from = from;
+    }
+
+    public List<AttributesRequest> getAttributes() {
+        return attributes;
+    }
+
+    public void setAttributes(List<AttributesRequest> attributes) {
+        this.attributes = attributes;
+    }
+
+    public String getSid() {
+        return sid;
+    }
+
+    public void setSid(String sid) {
+        this.sid = sid;
+    }
+
+    public String getSpk() {
+        return spk;
+    }
+
+    public void setSpk(String spk) {
+        this.spk = spk;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getOmodel() {
+        return omodel;
+    }
+
+    public void setOmodel(String omodel) {
+        this.omodel = omodel;
+    }
+}
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/AuthenticateResponse.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/AuthenticateResponse.java
index 1efcb5d..3c8e3f3 100644
--- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/AuthenticateResponse.java
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/AuthenticateResponse.java
@@ -32,7 +32,7 @@
         this.ip_address = ip_address;
     }
 
-    public class Auth implements Serializable {
+    public static class Auth implements Serializable {
         private String localSecret;
 
         public String getLocalSecret() { return localSecret; }
@@ -42,10 +42,12 @@
 
     }
 
-    public class GatewayObjects implements Serializable  {
+    public static class GatewayObjects implements Serializable  {
         private String ip_address;
         private String gatewayId;
         private String oid;
+
+        private String homeId;
 
         public String getIPAddress() { return ip_address; }
         public void setIPAddress(String value) {
@@ -59,6 +61,14 @@
 
         public String getOID() { return oid; }
         public void setOID(String value) { this.oid = value; }
+
+        public String getHomeId() {
+            return homeId;
+        }
+
+        public void setHomeId(String homeId) {
+            this.homeId = homeId;
+        }
     }
 
 
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/DeviceDeleteResponse.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/DeviceDeleteResponse.java
index 1e9d43c..53f5385 100644
--- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/DeviceDeleteResponse.java
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/DeviceDeleteResponse.java
@@ -19,7 +19,7 @@
         this.objects = objects;
     }
 
-    public class GatewayObjects implements Serializable {
+    public static class GatewayObjects implements Serializable {
         private String device_name;
         private String oid;
         private boolean isSaveOidInfo;
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/DeviceInfoResponse.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/DeviceInfoResponse.java
index a819363..00349bd 100644
--- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/DeviceInfoResponse.java
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/DeviceInfoResponse.java
@@ -18,7 +18,7 @@
         this.objects = value;
     }
 
-    public class GatewayObjects implements Serializable {
+    public static class GatewayObjects implements Serializable {
         private String ip_address;
         private String gatewayId;
         private String oid;
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/NetworkAccessBroadcastResponse.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/NetworkAccessBroadcastResponse.java
index 8478008..d2faf10 100644
--- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/NetworkAccessBroadcastResponse.java
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/NetworkAccessBroadcastResponse.java
@@ -10,6 +10,11 @@
     private String oid;
     private String homeId;
 
+    /**
+     * 闇�瑕佸叆缃戜粠鏈簃ac
+     */
+    private String slave_mac;
+
     public String getIPAddress() { return ip_address; }
     public void setIPAddress(String value) { this.ip_address = value; }
 
@@ -18,4 +23,12 @@
 
     public String getHomeID() { return homeId; }
     public void setHomeID(String value) { this.homeId = value; }
+
+    public String getSlave_mac() {
+        return slave_mac;
+    }
+
+    public void setSlave_mac(String slave_mac) {
+        this.slave_mac = slave_mac;
+    }
 }
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/config/HDLLinkConfig.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/config/HDLLinkConfig.java
index 5ccf25d..1b882f7 100644
--- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/config/HDLLinkConfig.java
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/config/HDLLinkConfig.java
@@ -21,11 +21,14 @@
     private static final String AUTHENTICATE_IS_LS_KEY = "auth_isls_key";
     public static final String AUTHENTICATE_IS_DEVICEINFO_KEY = "auth_deviceinfo_key";
 
+    public static final String GATEWAY_REMOTEINFO_KEY="gateway_remoteinfo_key";
+
     private String localSecret;//鏈湴鍔犲瘑瀵嗛挜
     private String gatewayId;
     private String ipAddress;
     private GatewaySearchBean currentGateway;//褰撳墠缃戝叧
     private String networkName;
+    private String homeId;
 
     private AuthenticateRequest.AuthenticateDeviceInfoBean deviceInfoBean;//褰撳墠璁惧鍩烘湰淇℃伅
     private AuthenticateRequest.RequestBean requestBean;//褰撳墠璁惧鍩烘湰淇℃伅
@@ -64,10 +67,12 @@
         this.gatewayId = "";
         this.ipAddress = "";
         this.localSecret = "";
+        this.homeId="";
         SPUtils.remove(AUTHENTICATE_LS_KEY);
         SPUtils.remove(AUTHENTICATE_GATEWAYID_KEY);
         SPUtils.remove(AUTHENTICATE_IPADDRESS_KEY);
         SPUtils.remove(AUTHENTICATE_IS_LS_KEY);
+        SPUtils.remove(GATEWAY_REMOTEINFO_KEY);
     }
 
     /**
@@ -77,6 +82,7 @@
         localSecret = SPUtils.getString(AUTHENTICATE_LS_KEY, "");
         gatewayId = SPUtils.getString(AUTHENTICATE_GATEWAYID_KEY, "");
         ipAddress = SPUtils.getString(AUTHENTICATE_IPADDRESS_KEY, "");
+        homeId = SPUtils.getString(GATEWAY_REMOTEINFO_KEY, "");
     }
 
     /**
@@ -93,6 +99,7 @@
         SPUtils.put(AUTHENTICATE_LS_KEY, localSecret);
         SPUtils.put(AUTHENTICATE_GATEWAYID_KEY, gatewayId);
         SPUtils.put(AUTHENTICATE_IPADDRESS_KEY, ipAddress);
+
     }
 
     /**
@@ -189,6 +196,9 @@
 
     public AuthenticateRequest.AuthenticateDeviceInfoBean getDeviceInfoBean() {
         AuthenticateRequest.AuthenticateDeviceInfoBean infoBean = (AuthenticateRequest.AuthenticateDeviceInfoBean) SPUtils.getSerializableEntity(AUTHENTICATE_IS_DEVICEINFO_KEY);
+        if(infoBean==null){
+            infoBean= new AuthenticateRequest.AuthenticateDeviceInfoBean();
+        }
         return infoBean;
     }
 
@@ -212,4 +222,13 @@
     public void setAuthBean(AuthenticateRequest.AuthBean authBean) {
         this.authBean = authBean;
     }
+
+    public String getHomeId() {
+        return homeId;
+    }
+
+    public void setHomeId(String homeId) {
+        this.homeId = homeId;
+        SPUtils.put(GATEWAY_REMOTEINFO_KEY, homeId);
+    }
 }
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/protocol/LinkMessageDecoder.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/protocol/LinkMessageDecoder.java
index 4e2cbb0..71438aa 100644
--- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/protocol/LinkMessageDecoder.java
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/protocol/LinkMessageDecoder.java
@@ -215,7 +215,8 @@
                             LogUtils.i("UploadGatewayInfo onError");
                         }
                     });
-                } else if (response.getTopic().equals(updateLocalSecret) || response.getTopic().equals(TopicConstant.LINK_BROADCAST)) {
+                }
+                else if (response.getTopic().equals(updateLocalSecret) || response.getTopic().equals(TopicConstant.LINK_BROADCAST)) {
                     try {
                         DeviceInfoResponse deviceInfoResponse = GsonConvert.getGson().fromJson(response.getData(), new TypeToken<DeviceInfoResponse>() {
                         }.getType());
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java
index 595c20b..bd4045c 100644
--- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java
@@ -148,19 +148,29 @@
         EventDispatcher.getInstance().register(TopicConstant.GATEWAY_AUTH_BROADCAST, new EventListener() {
             @Override
             public void onMessage(Object msg) {
-                LogUtils.i("鏀跺埌缃戝叧璁よ瘉淇℃伅: ");
-                NetworkAccessBroadcastResponse bean = getNetworkAccessBroadcastResponse(msg);
-                if (bean != null) {
-                    //绉婚櫎鐩戝惉
-                    EventDispatcher.getInstance().remove(TopicConstant.GATEWAY_AUTH_BROADCAST);
-                    LogUtils.i("缃戝叧鍏ョ綉骞挎挱IP: " + bean.getIPAddress());
-                    HDLLinkConfig.getInstance().setIpAddress(bean.getIPAddress());
-                    String ipStr = bean.getIPAddress();
-                    if (!TextUtils.isEmpty(ipStr)) {
-                        sendAuthenticateRequest(ipStr, request, callBack);
+                try {
+                    LogUtils.i("鏀跺埌缃戝叧璁よ瘉淇℃伅: ");
+                    NetworkAccessBroadcastResponse bean = getNetworkAccessBroadcastResponse(msg);
+                    if (bean != null) {
+                        LogUtils.i("缃戝叧鍏ョ綉骞挎挱IP: " + bean.getIPAddress());
+                        if (!TextUtils.isEmpty(bean.getSlave_mac())) {
+                            if (!bean.getSlave_mac().equals(request.getObjects().getDeviceMAC())) {
+                                LogUtils.i("鍏ョ綉楠岃瘉鐨刴ac鍜屾湰鏈轰笉涓�鏍凤紝璇锋眰鐨凪AC鏄�"+bean.getSlave_mac()+" 鏈満鐨勬槸"+request.getObjects().getDeviceMAC());
+                                return;
+                            }
+                        }
+                        //绉婚櫎鐩戝惉
+                        EventDispatcher.getInstance().remove(TopicConstant.GATEWAY_AUTH_BROADCAST);
+                        HDLLinkConfig.getInstance().setIpAddress(bean.getIPAddress());
+                        String ipStr = bean.getIPAddress();
+                        if (!TextUtils.isEmpty(ipStr)) {
+                            sendAuthenticateRequest(ipStr, request, callBack);
+                        }
                     }
-                }
 
+                }catch (Exception e){
+                    LogUtils.e("鍏ョ綉楠岃瘉寮傚父",e.getMessage());
+                }
             }
         });
     }
@@ -205,6 +215,7 @@
         request.setIp_address(authenticateDeviceInfoBean.getIPAddress());
         request.setMaster("false");
         request.setLocalEncrypt(false);
+        request.setHomeId(HDLLinkConfig.getInstance().getHomeId());
 
         data.setObjects(request);
 
@@ -258,16 +269,21 @@
                             String localSecret = "";
                             String gatewayId = "";
                             String ipAddress = "";
+                            String homeId="";
                             if (bean.getAuth() != null) {
                                 localSecret = bean.getAuth().getLocalSecret();
                             }
                             if (bean.getObjects() != null) {
                                 gatewayId = bean.getObjects().getGatewayID();
                                 ipAddress = bean.getObjects().getIPAddress();
+                                homeId=bean.getObjects().getHomeId();
                             }
                             if (ipAddress == null) {
                                 ipAddress = bean.getIp_address();
                             }
+                            if(!TextUtils.isEmpty(homeId)){
+                                HDLLinkConfig.getInstance().setHomeId(homeId);
+                            }
                             HDLLinkConfig.getInstance().setAuthBean(request.getAuth());
 
                             //鍒ゆ柇缃戝叧鏄惁宸茬粡娉ㄥ唽鍒颁簯绔�
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 977fa55..14f9b6e 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
@@ -29,6 +29,7 @@
 import com.hdl.sdk.connect.bean.request.GatewayInfoRequest;
 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.response.BaseLocalCodeResponse;
@@ -698,6 +699,52 @@
     }
 
     /**
+     * 涓婃姤Sid鍒楄〃
+     *
+     * @param requestList  sid鍒楄〃
+     * @param callBack 鍥炶皟
+     */
+    public void UploadSidList(List<ListSidRequest> requestList, HDLLinkCallBack callBack) {
+        if (!TextUtils.isEmpty(getGatewayId()) && !TextUtils.isEmpty(getTcpIp())) {
+            String time = String.valueOf(System.currentTimeMillis());
+            final BaseLocalResponse<List<ListSidRequest>> data = new BaseLocalResponse<>();
+            data.setId(IdUtils.getUUId());
+            data.setTime_stamp(time);
+
+            data.setObjects(requestList);
+
+            String topic = String.format(TopicConstant.LIST_SID_UPLOAD, 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));
+            }
+        }
+    }
+
+    /**
      * 涓婃姤鍏ョ綉璁よ瘉缁撴灉
      *
      * @param mac       mac
@@ -1067,4 +1114,56 @@
 
     }
 
+    /**
+     * 鍥炲缃戝叧閰嶇疆鍛戒护
+     * @param mac_Oid_GatewayId
+     * @param msgId 娑堟伅Id
+     * @param callBack
+     */
+    public void gatewayRemoteEditReply(String mac_Oid_GatewayId, String msgId, HDLLinkCallBack callBack) {
+        if (TextUtils.isEmpty(mac_Oid_GatewayId)) {
+            callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_DATA_NULL_ERROR));
+        }
+
+        String time = String.valueOf(System.currentTimeMillis());
+        final BaseLocalCodeResponse<List<String>> data = new BaseLocalCodeResponse<>();
+        data.setId(msgId);
+        data.setTime_stamp(time);
+        data.setCode("0");
+
+
+        String topic = String.format(TopicConstant.GATEWAY_EDIT_REMOTE_REPLY, mac_Oid_GatewayId);
+        LinkRequest message = new LinkRequest(topic,
+                GsonConvert.getGson().toJson(data));
+
+
+
+        try {
+            sendMsg(message.getSendBytes(), topic, callBack, new SendListener() {
+                @Override
+                public void onSucceed() {
+                    if (callBack == null) return;
+                    try {
+                        callBack.onSuccess("閫�缃戞垚鍔�");
+                        HDLLinkConfig.getInstance().clearConfig();
+
+                    } catch (Exception e) {
+                        callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_DATA_ERROR));
+                    }
+                }
+
+                @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));
+            }
+        }
+    }
+
 }

--
Gitblit v1.8.0