From 755e2893c12b79649ee12dec2b7d832d58b9265b Mon Sep 17 00:00:00 2001
From: 562935844@qq.com
Date: 星期三, 18 十月 2023 16:19:26 +0800
Subject: [PATCH] 上报oid列表新增parentoid

---
 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                         |   28 +
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/NetworkAccessBroadcastResponse.java |   13 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/protocol/LinkMessageDecoder.java                  |  333 +++++++----
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java                             |  120 ++++
 HDLSDK_DEMO/app/src/main/java/com/hdl/hdlsdk/MainActivity.java                                         |  259 ++++++--
 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/response/AuthenticateResponse.java           |   14 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HDLLink.java                                      |   15 
 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                         |   62 +-
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/DeviceDeleteResponse.java           |    2 
 HDLSDK_DEMO/app/build.gradle                                                                           |    3 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/HDLSdk.java                                        |   19 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/client/UdpClient.java                              |   24 
 HDLSDK_DEMO/app/libs/com.hdl.sdk-v1.1.6.aar                                                            |    0 
 HDLSDK/.idea/gradle.xml                                                                                |    2 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/ListUploadRequest.java               |    9 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/AllTopicManagerUtils.java                    |  196 +++++++
 /dev/null                                                                                              |    0 
 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/socket/HdlSocketHelper.java                       |    2 
 HDLSDK/com.hdl.sdk/build.gradle                                                                        |    4 
 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/utils/ByteBufferUtils.java                        |   37 +
 HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java                                              |  207 ++++---
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/BaseRequest.java                     |   30 +
 29 files changed, 1,261 insertions(+), 340 deletions(-)

diff --git a/HDLSDK/.idea/gradle.xml b/HDLSDK/.idea/gradle.xml
index 92c877d..059ae1c 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$" />
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 9764b67..c73aa4c 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,15 +29,19 @@
 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.DeviceInfoResponse;
 import com.hdl.sdk.connect.bean.response.GatewaySearchBean;
 import com.hdl.sdk.connect.callback.HDLLinkCallBack;
 import com.hdl.sdk.connect.callback.HDLLinkResponseCallBack;
@@ -66,30 +68,6 @@
     private EventListener allTopicsListener;
     private String testLightSid = "02010131D9C03D01020300010107";
     private String secret = "";
-
-    @Override
-    protected void onDestroy() {
-        super.onDestroy();
-        removeAllTopicsListener();
-    }
-
-    void initDeviceInfo() {
-        AuthenticateRequest.AuthenticateDeviceInfoBean infoBean = new AuthenticateRequest.AuthenticateDeviceInfoBean();
-        infoBean.setDeviceMAC("f2c5d8bad48f");
-        infoBean.setIPMAC("f2c5d8bad48f");
-        infoBean.setDeviceName("闊充箰鎾斁鍣�");//璁惧鍚嶅瓧
-        infoBean.setDeviceModel("MCLog.431");//璁惧鍨嬪彿
-        infoBean.setAccessMode("WIFI");
-        infoBean.setIPGateway("192.168.1.1");
-        infoBean.setIPAddress("192.168.1.103");
-        infoBean.setGateway_type("screen.touch");//spk
-        infoBean.setHw_version("HW2.0");
-        infoBean.setFw_version("Fw1.0");
-        infoBean.setOID("010105000000FE11");//姣忎釜璁惧oid閮借涓嶄竴鏍�
-        infoBean.setSid("110105000000FE08110100000011");//姣忎釜璁惧鐨剆id閮借涓嶄竴鏍�
-        infoBean.setSupplier("JINMAOYUN");
-        HDLLinkConfig.getInstance().setDeviceInfoBean(infoBean);
-    }
 
     /*void applyDeviceSecret() {
         tv.setText("寮�濮嬬敵璇疯澶囧瘑閽�...");
@@ -159,65 +137,6 @@
 
     }*/
 
-    /**
-     * 鍏ョ綉璁よ瘉
-     */
-    void sendAuthenticateRequest() {
-        tv.setText("寮�濮嬪叆缃戣璇�...");
-        responseTv.setText("");
-        //璁よ瘉鎻愪氦鍙傛暟鍑嗗
-//
-//        //娴嬭瘯鏈嶅姟鍣�
-//        String spkStr = "music.standard";//浜у搧spk
-//        String macStr = "AA000000000000AF";//璁惧鍞竴MAC鍦板潃
-//        String secret = "44b360eb74b7ba64";//閫氳繃spk鍜宮ac鎻愪氦浜戠璁よ瘉鍚庡垎閰嶇殑secret
-
-//        姝e紡鏈嶅姟鍣�
-        String spkStr = "screen.touch";//浜у搧spk
-//        String macStr = "AA00000000000100";//璁惧鍞竴MAC鍦板潃
-        String macStr = editText.getText().toString();//璁惧鍞竴MAC鍦板潃
-//        String secret = "e186beeb7974998e";//閫氳繃spk鍜宮ac鎻愪氦浜戠璁よ瘉鍚庡垎閰嶇殑secret
-
-        String mac_key = stringToMD5(stringToMD5(macStr + secret));
-        String versionString = "HDL_V1.0.1";//
-        String time = String.valueOf(System.currentTimeMillis());
-        HDLLinkConfig.getInstance().getDeviceInfoBean().setDeviceMAC(macStr);
-//        HDLLinkConfig.getInstance().setCurrentGateway(infoBean);
-
-        //1.璁剧疆璁よ瘉淇℃伅
-        AuthenticateRequest.RequestBean requestBean = new AuthenticateRequest.RequestBean();
-        requestBean.setMAC(macStr);
-        requestBean.setSupplier("JINMAOYUN");
-        requestBean.setFirmwareVersion(versionString);
-        requestBean.setHardwareModel("1956F");
-//        HDLLinkConfig.getInstance().setRequestBean(requestBean);
-
-        AuthenticateRequest.AuthBean authbean = new AuthenticateRequest.AuthBean();
-        authbean.setSpk(spkStr);
-        authbean.setMACKey(mac_key);
-        authbean.setRequest(requestBean);
-        HDLLinkConfig.getInstance().setAuthBean(authbean);
-
-        //HDLLinkConfig.getInstance().getDeviceInfoBean()杩欎釜鍒濆鍖栫殑鏃跺�欒鍏堣缃ソ
-        AuthenticateRequest request = new AuthenticateRequest(IdUtils.getUUId(), time, HDLLinkConfig.getInstance().getDeviceInfoBean(), authbean);
-        HDLLink.getInstance().startAuthenticateRequest(request, new HDLLinkCallBack() {
-            @Override
-            public void onError(HDLLinkException e) {
-                tv.setText("璁よ瘉澶辫触" + e.getCode());
-                responseTv.setText(e.getMsg());
-                Log.e(TAG, "onError: 璁よ瘉澶辫触 " + e.getCode());
-            }
-
-            @RequiresApi(api = Build.VERSION_CODES.O)
-            @Override
-            public void onSuccess(String msg) {
-                tv.setText("璁よ瘉鎴愬姛");
-                responseTv.setText(msg.toString());
-                localSecret.setText("瀵嗛挜锛�" + HDLLinkConfig.getInstance().getLocalSecret());
-            }
-        });
-    }
-
     public void UploadDeviceAuth(String mac, String result, String message, String auth_code) {
         //灏嗚璇佺粨鏋滀笂鎶ョ粰缃戝叧
         HDLLink.getInstance().UploadDeviceAuth(mac, result, message, auth_code, new HDLLinkCallBack() {
@@ -263,6 +182,8 @@
                 LogUtils.i("setDeleteNetworkListener onFailure");
             }
         });
+
+        UploadSidList();
 
         ActivityResultLauncher<String[]> launcher = registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), new ActivityResultCallback<Map<String, Boolean>>() {
             @Override
@@ -456,6 +377,75 @@
         HDLLink.getInstance().removeAllTopicsListener(allTopicsListener);
     }
 
+    void initDeviceInfo()
+    {
+        AuthenticateRequest.AuthenticateDeviceInfoBean infoBean = new AuthenticateRequest.AuthenticateDeviceInfoBean();
+        infoBean.setDeviceMAC("f2c5d8bad48f");
+        infoBean.setIPMAC("f2c5d8bad48f");
+        infoBean.setDeviceName("榄旈暅");//璁惧鍚嶅瓧
+        infoBean.setDeviceModel("HDLSDK");//璁惧鍨嬪彿
+        infoBean.setAccessMode("WIFI");
+        infoBean.setIPGateway("192.168.1.1");
+        infoBean.setIPAddress("192.168.1.116");
+        infoBean.setGateway_type("screen.touch");
+        infoBean.setHw_version("HW2.0");
+        infoBean.setFw_version("Fw1.0");
+        infoBean.setOID("010105000000FE11");//姣忎釜璁惧oid閮借涓嶄竴鏍�
+        infoBean.setSid("110105000000FE08110100000011");//姣忎釜璁惧鐨剆id閮借涓嶄竴鏍�
+        infoBean.setSupplier("JINMAOYUN");
+        HDLLinkConfig.getInstance().setDeviceInfoBean(infoBean);
+
+    }
+
+    /**
+     * 鍏ョ綉璁よ瘉
+     */
+    void sendAuthenticateRequest() {
+        tv.setText("寮�濮嬪叆缃戣璇�...");
+        //璁よ瘉鎻愪氦鍙傛暟鍑嗗
+
+//        娴嬭瘯鏈嶅姟
+//        String spkStr = "ir.module";//浜у搧spk
+//        String macStr = "AA000000000000AF";//璁惧鍞竴MAC鍦板潃
+//        String secret = "44b360eb74b7ba64";//閫氳繃spk鍜宮ac鎻愪氦浜戠璁よ瘉鍚庡垎閰嶇殑secret
+
+//        姝e紡鏈嶅姟鍣�
+        String spkStr = "screen.mirror";//浜у搧spk
+        String macStr = "f2c5d8bad48f";//璁惧鍞竴MAC鍦板潃
+//        String secret = "e186beeb7974998e";//閫氳繃spk鍜宮ac鎻愪氦浜戠璁よ瘉鍚庡垎閰嶇殑secret
+
+        String mac_key = stringToMD5(stringToMD5(macStr + secret));
+        String versionString = "HDL_V1.0.1";//
+        String time = String.valueOf(System.currentTimeMillis());
+        HDLLinkConfig.getInstance().getDeviceInfoBean().setDeviceMAC(macStr);
+
+        //1.璁剧疆璁よ瘉淇℃伅
+        AuthenticateRequest.RequestBean requestBean = new AuthenticateRequest.RequestBean();
+        requestBean.setMAC(macStr);
+        requestBean.setSupplier("JINMAOYUN");
+        requestBean.setFirmwareVersion(versionString);
+        requestBean.setHardwareModel("1956F");
+        AuthenticateRequest.AuthBean authbean = new AuthenticateRequest.AuthBean();
+        authbean.setSpk(spkStr);
+        authbean.setMACKey(mac_key);
+        authbean.setRequest(requestBean);
+        //HDLLinkConfig.getInstance().getDeviceInfoBean()杩欎釜鍒濆鍖栫殑鏃跺�欒鍏堣缃ソ
+        AuthenticateRequest request = new AuthenticateRequest(IdUtils.getUUId(), time, HDLLinkConfig.getInstance().getDeviceInfoBean(), authbean);
+        HDLLink.getInstance().startAuthenticateRequest(request, new HDLLinkCallBack() {
+            @Override
+            public void onError(HDLLinkException e) {
+                tv.setText("璁よ瘉澶辫触");
+                responseTv.setText(e.getMsg());
+                Log.i("TAG", "onError: 璁よ瘉澶辫触");
+            }
+
+            @Override
+            public void onSuccess(String msg) {
+                tv.setText("璁よ瘉鎴愬姛");
+                responseTv.setText(msg.toString());
+            }
+        });
+    }
 
     String stringToMD5(String text) {
         byte[] hash;
@@ -818,6 +808,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鐗堟湰
      *
@@ -839,4 +870,10 @@
         return versionName;
     }
 
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        removeAllTopicsListener();
+    }
+
 }
\ No newline at end of file
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 e85618c..ac57b55 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 117
+        versionName "1.1.7"
     }
     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..05fc32a 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.7";
 
     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..1908d0a
--- /dev/null
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/AllTopicManagerUtils.java
@@ -0,0 +1,196 @@
+package com.hdl.sdk.common.utils;
+
+import android.text.TextUtils;
+import android.util.Base64;
+import android.util.Log;
+
+import com.google.gson.reflect.TypeToken;
+import com.hdl.sdk.common.config.TopicConstant;
+import com.hdl.sdk.common.exception.HDLLinkException;
+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.GatewayRemoteEditRequest;
+import com.hdl.sdk.connect.bean.response.DeviceDeleteResponse;
+import com.hdl.sdk.connect.bean.response.DeviceInfoResponse;
+import com.hdl.sdk.connect.callback.HDLLinkCallBack;
+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.utils.AesUtil;
+
+/**
+ * Created by hxb on 2023/9/14.
+ */
+public class AllTopicManagerUtils {
+
+    /**
+     * 鍏ㄥ眬涓婚澶勭悊鏂规硶锛屽彲浠ュ鐞嗘墍鏈夋帴鏀跺埌鐨勬暟鎹�
+     *
+     * @param linkResponse
+     */
+    public static void manager(LinkResponse linkResponse) {
+        try {
+            if (linkResponse == null) {
+                return;
+            }
+            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());
+            } else if (isSameTopic(TopicConstant.GATEWAY_SEARCH, topic)) {
+                HDLAuthSocket.getInstance().UploadGatewayInfo(null);
+            } else if (isSameTopic(TopicConstant.LINK_BROADCAST, topic)) {
+                managerLinkBroadcast(linkResponse.getData());
+            } else if (isSameTopic(TopicConstant.DELETE_NOTIFY, topic)) {
+                managerDeleteNofity(linkResponse.getData());
+            }
+
+        } 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 = HDLLinkConfig.getInstance().getDeviceInfoBean().getOID();
+        String gatewayId = HDLLinkConfig.getInstance().getGatewayId();
+        String all = "all";
+
+        return mac_Oid_GatewayId.equals(mac) || mac_Oid_GatewayId.equals(oid) || mac_Oid_GatewayId.equals(gatewayId) || mac_Oid_GatewayId.toLowerCase().equals(all);
+    }
+
+    /**
+     * 鏄惁鐩稿悓涓婚
+     *
+     * @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);
+    }
+
+    /**
+     * 鏇存柊瀵嗛挜
+     *
+     * @param body
+     */
+    private static void managerLinkBroadcast(String body) {
+        try {
+            DeviceInfoResponse deviceInfoResponse = GsonConvert.getGson().fromJson(body, new TypeToken<DeviceInfoResponse>() {
+            }.getType());
+
+            if (deviceInfoResponse == null || deviceInfoResponse.getObjects() == null) {
+                return;
+            }
+            if (!TextUtils.isEmpty(deviceInfoResponse.getObjects().getLocalSecret())) {
+                byte[] baseBytes = Base64.decode(deviceInfoResponse.getObjects().getLocalSecret(), Base64.NO_WRAP);
+                String mackey = "";
+                if (!TextUtils.isEmpty(SPUtils.getString("auth_mackey_key", ""))) {
+                    mackey = SPUtils.getString("auth_mackey_key", "");
+                    byte[] bodyBytes = AesUtil.aesDecrypt(baseBytes, mackey.substring(mackey.length() - 16));
+                    String localSecret = new String(bodyBytes, "utf-8");
+                    Log.d("panlili", "鏇存柊瀵嗛挜----->localSecret= " + localSecret);
+                    HDLLinkConfig.getInstance().setLocalSecret(localSecret);
+                }
+            }
+        } catch (Exception e) {
+            LogUtils.i("LinkMessageDecoder.java:getLocalSecret----->e= " + e.getMessage());
+        }
+    }
+
+    /**
+     * 閫�缃�
+     *
+     * @param body
+     */
+    private static void managerDeleteNofity(String body) {
+        try {
+            DeviceDeleteResponse deviceDeleteResponse = GsonConvert.getGson().fromJson(body, new TypeToken<DeviceDeleteResponse>() {
+            }.getType());
+
+            if (deviceDeleteResponse == null || deviceDeleteResponse.getObjects() == null) {
+                return;
+            }
+            HDLSocket.getInstance().deleteNetwork(deviceDeleteResponse.getObjects().get(0).getOID(), new HDLLinkCallBack() {
+                @Override
+                public void onSuccess(String msg) {
+
+                }
+
+                @Override
+                public void onError(HDLLinkException e) {
+
+                }
+            });
+        } catch (Exception e) {
+            LogUtils.i("LinkMessageDecoder.java:deleteNetwork----->e= " + e.getMessage());
+        }
+    }
+}
\ No newline at end of file
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 c39638c..e7a0790 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
@@ -6,6 +6,7 @@
 import com.hdl.sdk.common.utils.LogUtils;
 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.callback.HDLLinkCallBack;
 import com.hdl.sdk.connect.callback.HDLLinkResponseCallBack;
@@ -102,6 +103,10 @@
 
     public void selectNetwork(String networkName) {
         HDLLinkConfig.getInstance().setNetworkName(networkName);
+    }
+
+    public void setParentOid(String parentOid) {
+        HDLLinkConfig.getInstance().setParentOid(parentOid);
     }
 
     /**
@@ -306,6 +311,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/request/ListUploadRequest.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/ListUploadRequest.java
index 03e78a2..cf83e88 100644
--- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/ListUploadRequest.java
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/ListUploadRequest.java
@@ -18,6 +18,7 @@
     private String src;//鏉ヨ嚜鍝釜椹卞姩锛屽Link璁惧娌℃湁鍒欏~"LINK"
     private String from;//鏉ヨ嚜鍝釜缃戝叧锛屽鏋滄椂Link缃戠粶璁惧锛屽垯濉嚜韬玱id锛涘鏋滄槸椹卞姩鍒欎笉闇�瑕佹瀛楁
     private List<ImageInfo> image_info;
+    private String parentOid;//浠庢満闇�瑕佷笂鎶arentoid锛屽唴瀹逛负涓绘満鐨刼id
 
     public String getOid() {
         return oid;
@@ -83,6 +84,14 @@
         this.from = from;
     }
 
+    public String getParentOid() {
+        return parentOid;
+    }
+
+    public void setParentOid(String parentOid) {
+        this.parentOid = parentOid;
+    }
+
     public List<ImageInfo> getImage_info() {
         return image_info;
     }
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..e1701a7 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,15 @@
     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 String parentOid;
 
     private AuthenticateRequest.AuthenticateDeviceInfoBean deviceInfoBean;//褰撳墠璁惧鍩烘湰淇℃伅
     private AuthenticateRequest.RequestBean requestBean;//褰撳墠璁惧鍩烘湰淇℃伅
@@ -64,10 +68,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 +83,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 +100,7 @@
         SPUtils.put(AUTHENTICATE_LS_KEY, localSecret);
         SPUtils.put(AUTHENTICATE_GATEWAYID_KEY, gatewayId);
         SPUtils.put(AUTHENTICATE_IPADDRESS_KEY, ipAddress);
+
     }
 
     /**
@@ -136,6 +144,14 @@
     }
     public void setIpAddress(String ipAddress){
         this.ipAddress = ipAddress;
+    }
+
+    public String getParentOid() {
+        return parentOid;
+    }
+
+    public void setParentOid(String parentOid) {
+        this.parentOid = parentOid;
     }
 
     public String getNetworkName() {
@@ -189,6 +205,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 +231,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 debec18..792c128 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
@@ -24,8 +24,11 @@
 import com.hdl.sdk.connect.socket.HDLAuthSocket;
 import com.hdl.sdk.connect.socket.HDLSocket;
 import com.hdl.sdk.connect.utils.AesUtil;
+import com.hdl.sdk.connect.utils.ByteBufferUtils;
 import com.hdl.sdk.socket.codec.ByteToMessageDecoder;
 
+import java.nio.ByteBuffer;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -38,13 +41,31 @@
  */
 public class LinkMessageDecoder extends ByteToMessageDecoder<LinkResponse> {
 
-    private final List<Byte> bytes;
+    private static final String TAG = LinkMessageDecoder.class.getName();
+    //instance
+    private volatile static LinkMessageDecoder instance;
+
+    //getInstance
+    public static synchronized LinkMessageDecoder getInstance() {
+        if (instance == null) {
+            synchronized (LinkMessageDecoder.class) {
+                if (instance == null) {
+                    instance = new LinkMessageDecoder();
+                }
+            }
+        }
+        return instance;
+    }
+
+    /**
+     * 鎺ユ敹鏁版嵁缂撳啿鍖�
+     */
+    private final ByteBuffer byteBuffer;
 
     private final byte[] head = "Topic:".getBytes();
-//    private final byte[] body = "\r\n\r\n".getBytes();
 
     public LinkMessageDecoder() {
-        this.bytes = new ArrayList<>();
+        byteBuffer = ByteBuffer.allocate(1024 * 200);//100K
     }
 
     /// <summary>
@@ -53,11 +74,16 @@
     /// <param name="topMsgs"></param>
     /// <returns></returns>
     int getLenght(String[] topMsgs) {
-        for (int i = 0; i < topMsgs.length; i++) {
-            String topMsg = topMsgs[i].trim();
-            if (topMsg.startsWith("Length:")) {
-                return Integer.parseInt(topMsg.replace("Length:", ""));
+        try {
+            for (int i = 0; i < topMsgs.length; i++) {
+                String topMsg = topMsgs[i].trim();
+                if (topMsg.startsWith("Length:")) {
+                    return Integer.parseInt(topMsg.replace("Length:", "").trim());
+                }
             }
+        } catch (Exception e) {
+            LogUtils.e("寮傚父鏁版嵁锛�" + topMsgs[0] + "\r\n" + topMsgs[1]);
+            return -1;
         }
         //鎵句笉鍒伴暱搴�
         return -1;
@@ -82,15 +108,14 @@
     /**
      * 鑾峰彇鏁版嵁鐨勫紑濮嬩綅缃�
      *
-     * @param arrayList 鎺ユ敹鍒扮殑鎵�鏈夋暟鎹�
      * @return 鏁版嵁浣嶇殑寮�濮嬬储寮�
      */
-    int getDataIndex(List<Byte> arrayList) {
+    int getBodyIndex() {
         byte r = (byte) '\r';
         byte n = (byte) '\n';
-        for (int i = 0; i < arrayList.size(); i++) {
+        for (int i = 0; i < byteBuffer.position(); i++) {
             //鎵惧嚭鏁版嵁鍐呭鍓嶉潰鐨勪袱涓崲琛�
-            if (3 <= i && arrayList.get(i - 3) == r && arrayList.get(i - 2) == n && arrayList.get(i - 1) == r && arrayList.get(i) == n) {
+            if (3 <= i && byteBuffer.get(i - 3) == r && byteBuffer.get(i - 2) == n && byteBuffer.get(i - 1) == r && byteBuffer.get(i) == n) {
                 //鍓╀綑鐨勬暟鎹�
                 return i + 1;
             }
@@ -98,14 +123,73 @@
         return -1;
     }
 
-    void initReceiveData(List<Byte> list) {
+    /**
+     * 鑾峰彇澶撮儴鏁版嵁
+     *
+     * @return
+     */
+    String getHeader() {
+        int bodyIndex = getBodyIndex();
+        if (bodyIndex < 0) {
+            //娌℃湁鎵惧埌澶撮儴鏁版嵁
+            return null;
+        } else {
+            byte bodyBytes[] = ByteBufferUtils.copyBytes(byteBuffer, bodyIndex);
+            return new String(bodyBytes);
+        }
+    }
 
+    /**
+     * 鑾峰彇鏁版嵁鍐呭
+     *
+     * @param lenght
+     * @return
+     */
+    byte[] getBody(int index, int lenght) {
+        //鏄惁宸茬粡鑾峰彇瀹屾暣鎵�鏈夌殑鏁版嵁
+        byte[] bodyBytes = new byte[lenght];
+        if (index < 0 || byteBuffer.position() < index + lenght) {
+            //褰撳墠鏁版嵁杩樻病鏈夋帴鏀跺畬鎴�
+            return null;
+        }
+
+        for (int i = 0; i < bodyBytes.length; i++) {
+            bodyBytes[i] = byteBuffer.get(index + i);
+        }
+        return bodyBytes;
+    }
+
+
+    /**
+     * 杩欒竟澶勭悊浜嗙紦瀛樻暟鎹矘鍖呯殑鎯呭喌锛屾瘡娆¤姹傞兘闇�瑕佸惂褰撳墠瀹屾暣鐨勬枃浠堕櫎鍘�   浠ヤ究浜庝笅娆$殑杩斿洖
+     * tempList鐢ㄤ簬瀛樺偍澶氫綑鐨勬暟鎹�
+     * contentList鐢ㄤ簬鏈鏁版嵁鐨勫瓨鍌紙鍙戦�佺粰璁㈤槄鐨勬暟鎹級
+     */
+    byte[] geBody() {
+        int len = 3 + 4 + 4 + ((byteBuffer.get(7) & 0xFF) * 256 * 256 * 256) + ((byteBuffer.get(8) & 0xFF) * 256 * 256) + ((byteBuffer.get(9) * 256) & 0xFF) + (byteBuffer.get(10) & 0xFf);
+        byte[] bodyBytes = new byte[len];
+        for (int i = 0; i < len; i++) {
+            bodyBytes[i] = byteBuffer.get(i);
+        }
+
+        int endIndex = byteBuffer.position();
+        byteBuffer.clear();
+        for (int i = len; i < endIndex; i++) {
+            byteBuffer.put(byteBuffer.get(i));
+        }
+        return bodyBytes;
+    }
+
+    /**
+     * 绉婚櫎鍙兘瀛樺湪鐨勬棤鏁堟暟鎹�
+     */
+    void removeInVoidBytes() {
         int index = 0;
         boolean isMatch = false;
-        for (; index < list.size() - head.length; index++) {
+        for (; index < byteBuffer.position() - head.length; index++) {
             isMatch = true;
             for (int j = 0, k = 0; j < head.length; j++, k++) {
-                if (head[j] != list.get(index + k)) {
+                if (head[j] != byteBuffer.get(index + k)) {
                     isMatch = false;
                     break;
                 }
@@ -116,159 +200,148 @@
         }
 
         if (0 < index && isMatch) {
-            List<Byte> tempList = new ArrayList<Byte>();
-            for (int i = index; i < list.size(); i++) {
-                tempList.add(list.get(i));
-            }
-
-            list.clear();
-            for (int i = 0; i < tempList.size(); i++) {
-                list.add(tempList.get(i));
+            int endIndex = byteBuffer.position();
+            byteBuffer.clear();
+            for (int i = index; i < endIndex; i++) {
+                byteBuffer.put(byteBuffer.get(i));
             }
         }
+    }
+
+    /**
+     * 绉婚櫎鍒版寚瀹氫綅缃墠闈㈢殑鏁版嵁
+     *
+     * @param position 鎸囧畾浣嶇疆
+     */
+    void remove(int position) {
+        int endIndex = byteBuffer.position();
+        byteBuffer.clear();
+        for (int i = position; i < endIndex; i++) {
+            byteBuffer.put(byteBuffer.get(i));
+        }
+    }
+
+
+    int bytes2int(byte[] bytes) {
+        int result = 0;
+        if (bytes.length == 2) {
+            int c = (bytes[0] & 0xff) << 8;
+            int d = (bytes[1] & 0xff);
+            result = c | d;
+        } else if (bytes.length == 4) {
+            return bytes[3] & 0xFF | //
+                    (bytes[2] & 0xFF) << 8 | //
+                    (bytes[1] & 0xFF) << 16 | //
+                    (bytes[0] & 0xFF) << 24; //
+        }
+        return result;
+    }
+
+    public String byte2hex(byte[] bytes) {
+        StringBuilder sb = new StringBuilder();
+        String tmp = null;
+        for (byte b : bytes) {
+            //灏嗘瘡涓瓧鑺備笌0xFF杩涜涓庤繍绠楋紝鐒跺悗杞寲涓�10杩涘埗锛岀劧鍚庡�熷姪浜嶪nteger鍐嶈浆鍖栦负16杩涘埗
+            tmp = Integer.toHexString(0xFF & b);
+            if (tmp.length() == 1) {
+                tmp = "0" + tmp;
+            }
+            sb.append(tmp + " ");
+        }
+        return sb.toString();
     }
 
 
 //    @RequiresApi(api = Build.VERSION_CODES.O)
     @Override
     protected synchronized LinkResponse decoder(Object msg, String ipaddress) throws Exception {
-        if (msg instanceof byte[]) {
-            bytes.addAll(ByteUtils.toByteList((byte[]) msg));
+        if (msg == null || !(msg instanceof byte[])) {
+            return null;
+        }
+
+        byte[] bytes = (byte[]) msg;
+        try {
+            byteBuffer.put(bytes);
+        } catch (Exception e) {
+            LogUtils.e("鎺ユ敹鍒版暟鎹紓甯�:\r\n" + e.getMessage());
+            byteBuffer.flip();
+            byteBuffer.clear();
+        }
+
+        try {
             //濡傛灉澶氭潯鍛戒护鎵撳寘鍦ㄤ竴鏉℃暟鎹腑锛岄兘闇�瑕佸鐞嗗畬
             while (true) {
-                initReceiveData(bytes);
-                byte[] recevieBytes = ByteUtils.toByteArray(bytes);
-                String data = new String(recevieBytes);
+                removeInVoidBytes();//绉婚櫎鍙兘瀛樺湪鐨勬棤鏁堟暟鎹�
 
-                String[] topMsgs = data.split("\r\n");
+                //澶撮儴鏁版嵁
+                String header = getHeader();
+
+                if (header == null) {
+                    break;
+                }
+                String[] topMsgs = header.split("\r\n");
 
                 String topic = getTopic(topMsgs);
-                if (topic == null) {
-                    break;
-                }
-
                 int lenght = getLenght(topMsgs);
-
-                if (lenght <= 0) {
-                    //澶撮儴鏁版嵁杩樻病鏈夋帴鏀跺畬鎴�
+                if (topic == null || lenght <= 0) {
+                    //鑾峰彇涓嶅埌涓婚鎴栬�呭ご閮ㄦ暟鎹繕娌℃湁鎺ユ敹瀹屾垚
                     break;
                 }
+
+                int bodyIndex = getBodyIndex();
                 //鏄惁宸茬粡鑾峰彇瀹屾暣鎵�鏈夌殑鏁版嵁
-                byte[] body = new byte[lenght];
-                int index = getDataIndex(bytes);
-                if (bytes.size() < index + lenght) {
+                byte[] body = getBody(bodyIndex, lenght);
+
+                if (body == null) {
                     //褰撳墠鏁版嵁杩樻病鏈夋帴鏀跺畬鎴�
                     break;
                 }
-                //澶嶅埗鍑篵ody鏁版嵁
-                System.arraycopy(recevieBytes, index, body, 0, body.length);
 
-                //淇濈暀鍓╀綑鐨勬暟鎹紝浠ユ鐢�
-                bytes.clear();
-                for (int i = index + lenght; i < recevieBytes.length; i++) {
-                    bytes.add(recevieBytes[i]);
+                remove(bodyIndex + lenght);
+
+                if (topic.contains("heartbeat_reply")) {
+//                    if (packet.getSocket() != null) {
+//                        packet.getSocket().setSoTimeout(10 * 1000);
+//                    }
+                    continue;
                 }
+
                 LinkResponse response = new LinkResponse();
                 response.setSource_ipAddress(ipaddress);
                 response.setTopic(topic);
-                if (HDLLinkConfig.getInstance().ifNeedEncrypt(response.getTopic())) {
+
+                if (encrypt(body)) {
                     //闇�瑕佽В瀵�
                     byte[] bodyBytes = AesUtil.aesDecrypt(body, HDLLinkConfig.getInstance().getLocalSecret());
                     if (bodyBytes != null) {
-                        body = bodyBytes;
+                        response.setData(new String(bodyBytes, StandardCharsets.UTF_8));
                     } else {
-                        try {
-                            //涔嬪墠鐨勭増鏈繖鍧楁槸鏄庢枃鐨�
-                            if (!topic.contains("heartbeat_reply")) {
-                                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
-                                    LogUtils.e("瑙e瘑澶辫触锛屾暟鎹唴瀹规槸锛歕r\n" + Base64.encodeToString(body, Base64.NO_WRAP));
-                                else {
-                                    LogUtils.e("瑙e瘑澶辫触锛屾暟鎹唴瀹规槸锛歕r\n" + new String(body, "utf-8"));
-                                }
-                            }
-                        } catch (Exception e) {
-                        }
+                        LogUtils.e("瑙e瘑澶辫触\r\n" + topic);
+                        response.setData(new String(body, "utf-8"));
+                        continue;
                     }
+                } else {
+                    response.setData(new String(body, "utf-8"));
                 }
 
-                String bodyString = new String(body, "utf-8");
-                response.setData(bodyString);
-                LogUtils.i("鎺ユ敹鍒版暟鎹�:" + response.getTopic() + "\r\n" + response.getData());
+                LogUtils.i("鏈湴鎺ユ敹鍒版暟鎹�:\r\n" + response.getTopic() + "\r\n" + response.getData() + "\r\n" + response.getData().length());
 
-                String updateLocalSecret = String.format(TopicConstant.LINK_BROADCAST, HDLLinkConfig.getInstance().getGatewayId());
-                String deleteNetwork = "";
-                if (HDLLinkConfig.getInstance().getDeviceInfoBean() != null) {
-                    deleteNetwork = String.format(TopicConstant.DELETE_NOTIFY, HDLLinkConfig.getInstance().getDeviceInfoBean().getOID());
-                }
-
-                if (response.getTopic().equals("/user/all/custom/gateway/search")) {
-                    HDLAuthSocket.getInstance().UploadGatewayInfo(new HDLLinkCallBack() {
-                        @Override
-                        public void onSuccess(String msg) {
-                            LogUtils.i("UploadGatewayInfo onSucceed");
-                        }
-
-                        @Override
-                        public void onError(HDLLinkException e) {
-                            LogUtils.i("UploadGatewayInfo onError");
-                        }
-                    });
-                } else if (response.getTopic().equals(updateLocalSecret) || response.getTopic().equals(TopicConstant.LINK_BROADCAST)) {
-                    try {
-                        DeviceInfoResponse deviceInfoResponse = GsonConvert.getGson().fromJson(response.getData(), new TypeToken<DeviceInfoResponse>() {
-                        }.getType());
-
-                        if (!TextUtils.isEmpty(deviceInfoResponse.getObjects().getLocalSecret())) {
-                            byte[] baseBytes = Base64.decode(deviceInfoResponse.getObjects().getLocalSecret(), Base64.NO_WRAP);
-                            String mackey = "";
-                            if (!TextUtils.isEmpty(SPUtils.getString("auth_mackey_key", ""))) {
-                                mackey = SPUtils.getString("auth_mackey_key", "");
-                                byte[] bodyBytes = AesUtil.aesDecrypt(baseBytes, mackey.substring(mackey.length() - 16));
-                                String localSecret = new String(bodyBytes, "utf-8");
-                                Log.d("panlili", "鏇存柊瀵嗛挜----->localSecret= " + localSecret);
-                                HDLLinkConfig.getInstance().setLocalSecret(localSecret);
-                            }
-                        }
-                    } catch (Exception e) {
-                        LogUtils.i("LinkMessageDecoder.java:getLocalSecret----->e= " + e.getMessage());
-                    }
-                } else if (response.getTopic().equals(deleteNetwork)) {
-                    try {
-                        DeviceDeleteResponse deviceDeleteResponse = GsonConvert.getGson().fromJson(response.getData(), new TypeToken<DeviceDeleteResponse>() {
-                        }.getType());
-                        HDLSocket.getInstance().deleteNetwork(deviceDeleteResponse.getObjects().get(0).getOID(), new HDLLinkCallBack() {
-                            @Override
-                            public void onSuccess(String msg) {
-                                LogUtils.i("deleteNetwork onSucceed");
-                                if (HDLLink.getInstance().listener != null) {
-                                    HDLLink.getInstance().listener.onSuccess(msg);
-                                }
-                            }
-
-                            @Override
-                            public void onError(HDLLinkException e) {
-                                LogUtils.i("deleteNetwork onError");
-                                if (HDLLink.getInstance().listener != null) {
-                                    HDLLink.getInstance().listener.onFailure();
-                                }
-                            }
-                        });
-                    } catch (Exception e) {
-                        LogUtils.i("LinkMessageDecoder.java:deleteNetwork----->e= " + e.getMessage());
-                    }
-                }
-
-                //闈炴甯告暟鎹紝杩斿洖
-                if (!((bodyString.startsWith("{") && bodyString.endsWith("}"))
-                        || (bodyString.startsWith("[") && bodyString.endsWith("]")))) {
-                    continue;
-                }
                 //瑙f瀽瀹屾垚,topic鍙戦�佷竴娆�
                 EventDispatcher.getInstance().post(response.getTopic(), response);
             }
-            return null;
-
+        } catch (Exception ee) {
+            LogUtils.e("澶勭悊鎺ユ敹鐨勬暟鎹紓甯�:\r\n" + ee.getMessage());
         }
         return null;
     }
+
+    //鏄惁鍔犲瘑
+    private boolean encrypt(byte[] bytes) {
+        if (bytes[0] == '{' && bytes[bytes.length - 1] == '}' || (bytes[0] == '[' && bytes[bytes.length - 1] == ']')) {
+            return false;
+        }
+        return true;
+    }
 }
+
+
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..a14bc66 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,32 @@
         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());
+                        if (!TextUtils.isEmpty(bean.getOID())) {
+                            HDLLinkConfig.getInstance().setParentOid(bean.getOID());
+                        }
+                        String ipStr = bean.getIPAddress();
+                        if (!TextUtils.isEmpty(ipStr)) {
+                            sendAuthenticateRequest(ipStr, request, callBack);
+                        }
                     }
-                }
 
+                } catch (Exception e) {
+                    LogUtils.e("鍏ョ綉楠岃瘉寮傚父", e.getMessage());
+                }
             }
         });
     }
@@ -186,6 +199,7 @@
 
         final GatewayInfoRequest request = new GatewayInfoRequest();
         AuthenticateRequest.AuthenticateDeviceInfoBean authenticateDeviceInfoBean = HDLLinkConfig.getInstance().getDeviceInfoBean();
+        if (authenticateDeviceInfoBean == null) return;
         request.setDevice_model(authenticateDeviceInfoBean.getDeviceModel());
         request.setDevice_mac(authenticateDeviceInfoBean.getDeviceMAC());
         request.setDevice_name(authenticateDeviceInfoBean.getDeviceName());
@@ -197,7 +211,9 @@
 
         if (authenticateDeviceInfoBean.getSupplier() == null) {
             AuthenticateRequest.RequestBean requestBean = HDLLinkConfig.getInstance().getRequestBean();
-            request.setSupplier(requestBean.getSupplier());
+            if (requestBean != null) {
+                request.setSupplier(requestBean.getSupplier());
+            }
         }
 
         request.setHw_version(authenticateDeviceInfoBean.getHw_version());
@@ -205,6 +221,7 @@
         request.setIp_address(authenticateDeviceInfoBean.getIPAddress());
         request.setMaster("false");
         request.setLocalEncrypt(false);
+        request.setHomeId(HDLLinkConfig.getInstance().getHomeId());
 
         data.setObjects(request);
 
@@ -213,21 +230,7 @@
                 GsonConvert.getGson().toJson(data));
 
         String ip = IpUtils.getBroadcastAddress();
-        HdlSocketHelper.sendUdp(getUdpBoot(), ip, UDP_PORT, message, new HdlSocketHelper.HdlSocketListener() {
-            @Override
-            public void onSucceed(Object msg) {
-                if (callBack == null) return;
-                callBack.onSuccess("涓婃姤鎴愬姛");
-                LogUtils.i("UploadGatewayInfo onSucceed = " + msg);
-            }
-
-            @Override
-            public void onFailure() {
-                if (callBack == null) return;
-                callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_UPLOAD_GATEWAYINFO_FAILURE_ERROR));
-                LogUtils.i("UploadGatewayInfo onFailure");
-            }
-        });
+        HdlSocketHelper.sendUdp(getUdpBoot(), ip, UDP_PORT, message, null);
 
     }
 
@@ -258,16 +261,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 d5ab577..5b9e0ec 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
@@ -24,6 +24,7 @@
 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.request.PropertyReadRequest;
 import com.hdl.sdk.connect.bean.response.BaseLocalCodeResponse;
@@ -113,7 +114,7 @@
                         }
                         BroadcastRequest request = new BroadcastRequest(IdUtils.getUUId(), time, HDLLinkConfig.getInstance().getDeviceInfoBean(), "200");
                         HDLAuthSocket.getInstance().udpSendMsg(TopicConstant.BROADCAST, GsonConvert.getGson().toJson(request), true, new HDLLinkResponseCallBack() {
-//                            @RequiresApi(api = Build.VERSION_CODES.O)
+                            //                            @RequiresApi(api = Build.VERSION_CODES.O)
                             @Override
                             public void onSuccess(LinkResponse msg) {
                                 String data = msg.getData();
@@ -649,12 +650,62 @@
             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);
 
             data.setObjects(list);
 
             String topic = String.format(TopicConstant.LIST_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));
+            }
+        }
+    }
+
+    /**
+     * 涓婃姤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));
 
@@ -890,14 +941,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));
                     }
@@ -936,7 +986,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() {
@@ -945,8 +999,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));
                     }
                 }
             });
@@ -1005,7 +1059,7 @@
                 threadPool.scheduleWithFixedDelay(new Runnable() {
                     @Override
                     public void run() {
-                        if (sendCount.get() < 3) {
+                        if (sendCount.get() < 0) {
                             sendCount.set(sendCount.get() + 1);
                             getTcp().sendMsg(data);
                         } else {
@@ -1055,4 +1109,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));
+            }
+        }
+    }
+
 }
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HdlSocketHelper.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HdlSocketHelper.java
index abac95d..58fd289 100644
--- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HdlSocketHelper.java
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HdlSocketHelper.java
@@ -91,7 +91,7 @@
      * 娉ㄥ唽鐩戝惉
      */
     void registerListener() {
-        if (!TextUtils.isEmpty(observeTopic)) {
+        if (listener != null && !TextUtils.isEmpty(observeTopic)) {
             EventDispatcher.getInstance().register(observeTopic, eventListener);
 //            LogUtils.i("HdlSocketHelper", "register event");
         }
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/utils/ByteBufferUtils.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/utils/ByteBufferUtils.java
new file mode 100644
index 0000000..032c9d3
--- /dev/null
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/utils/ByteBufferUtils.java
@@ -0,0 +1,37 @@
+package com.hdl.sdk.connect.utils;
+
+import java.nio.ByteBuffer;
+
+/**
+ * Created by hxb on 2022/8/3.
+ *
+ */
+public class ByteBufferUtils {
+
+    /**
+     * 鑾峰彇ByteBuffer鎸囧畾浣嶇疆鏁版嵁
+     *
+     * @param byteBuffer 婧愬璞�
+     * @param length 鎸囧畾闀垮害
+     * @return 鏍规嵁闀垮害鐢熸垚鐨勬暟缁�
+     */
+    public static byte[] copyBytes(ByteBuffer byteBuffer, int length) {
+        return copyBytes(byteBuffer,0,length);
+    }
+
+    /**
+     * 澶嶅埗鎸囧畾浣嶇疆鐨勬暟鎹�
+     * @param byteBuffer
+     * @param index
+     * @param length
+     * @return
+     */
+    public static byte[] copyBytes(ByteBuffer byteBuffer, int index,int length) {
+        byte[] bytes = new byte[length];
+        for (int i = 0; i < bytes.length; i++) {
+            bytes[i] = byteBuffer.get(index + i);
+        }
+        return bytes;
+    }
+
+}
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/client/UdpClient.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/client/UdpClient.java
index c6a3aff..3980879 100644
--- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/client/UdpClient.java
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/socket/client/UdpClient.java
@@ -29,7 +29,7 @@
     /**
      * 褰撳墠socket
      */
-    private  DatagramSocket mSocket;
+    private DatagramSocket mSocket;
 
     /**
      * 鎺ユ敹鏁版嵁鍖�
@@ -57,11 +57,12 @@
 
     /**
      * 鍒濆鍖栧弬鏁�
-     * @param ipAddress 鏈湴鐩戝惉绔彛
-     * @param port 鏈湴鐩戝惉绔彛
+     *
+     * @param ipAddress     鏈湴鐩戝惉绔彛
+     * @param port          鏈湴鐩戝惉绔彛
      * @param socketOptions
      */
-    private UdpClient(String ipAddress,int port, UdpSocketOptions socketOptions) {
+    private UdpClient(String ipAddress, int port, UdpSocketOptions socketOptions) {
         this.ipAddress = ipAddress;
         this.port = port;
         this.socketOptions = socketOptions;
@@ -71,8 +72,9 @@
 
     /**
      * 鍒濆鍖栧弬鏁�
+     *
      * @param ipAddress 鏈湴鐩戝惉IP鍦板潃
-     * @param port 鏈湴鐩戝惉绔彛
+     * @param port      鏈湴鐩戝惉绔彛
      * @param options
      * @return
      */
@@ -82,7 +84,8 @@
 
     /**
      * 鍒濆鍖栧弬鏁�
-     * @param port 鏈湴鐩戝惉绔彛
+     *
+     * @param port    鏈湴鐩戝惉绔彛
      * @param options
      * @return
      */
@@ -100,8 +103,8 @@
             }
             if (TextUtils.isEmpty(ipAddress)) {
                 mSocket = SocketPool.getInstance().getUdpSocket(new InetSocketAddress(port));
-            }else {
-                mSocket = SocketPool.getInstance().getUdpSocket(new InetSocketAddress(ipAddress,port));
+            } else {
+                mSocket = SocketPool.getInstance().getUdpSocket(new InetSocketAddress(ipAddress, port));
             }
             mSocket.setBroadcast(true);
 //            mSocket.setReuseAddress(true);
@@ -156,7 +159,7 @@
             if (handleMessage != null) {
                 byte[] data = new byte[receivePacket.getLength()];
                 System.arraycopy(receivePacket.getData(), 0, data, 0, data.length);
-                handleMessage.read(data,receivePacket.getAddress().getHostAddress());
+                handleMessage.read(data, receivePacket.getAddress().getHostAddress());
             }
 
         } catch (Exception e) {
@@ -166,11 +169,12 @@
 
 
     @Override
-    public void sendMsg(String ipAddress,int port, byte[] msg) throws Exception {
+    public void sendMsg(String ipAddress, int port, byte[] msg) throws Exception {
         if (msg == null) {
             return;
         }
         final DatagramPacket sendPacket = new DatagramPacket(msg, msg.length, InetAddress.getByName(ipAddress), port);
+        if (sendPacket == null) return;
         mSocket.send(sendPacket);
     }
 }
diff --git a/HDLSDK_DEMO/app/build.gradle b/HDLSDK_DEMO/app/build.gradle
index 1116a77..1f6a2a1 100644
--- a/HDLSDK_DEMO/app/build.gradle
+++ b/HDLSDK_DEMO/app/build.gradle
@@ -38,7 +38,8 @@
     androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
 
     implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.6'
+
 //    implementation 'com.google.code.gson:gson:2.8.8'
 //    implementation project(path: ':hdl-connect')
-    implementation files('libs\\com.hdl.sdk-v1.1.4.aar')
+    implementation files('libs\\com.hdl.sdk-v1.1.6.aar')
 }
\ No newline at end of file
diff --git a/HDLSDK_DEMO/app/libs/com.hdl.sdk-v1.1.4.aar b/HDLSDK_DEMO/app/libs/com.hdl.sdk-v1.1.4.aar
deleted file mode 100644
index 83c01e8..0000000
--- a/HDLSDK_DEMO/app/libs/com.hdl.sdk-v1.1.4.aar
+++ /dev/null
Binary files differ
diff --git a/HDLSDK_DEMO/app/libs/com.hdl.sdk-v1.1.6.aar b/HDLSDK_DEMO/app/libs/com.hdl.sdk-v1.1.6.aar
new file mode 100644
index 0000000..f9edf02
--- /dev/null
+++ b/HDLSDK_DEMO/app/libs/com.hdl.sdk-v1.1.6.aar
Binary files differ
diff --git a/HDLSDK_DEMO/app/src/main/java/com/hdl/hdlsdk/MainActivity.java b/HDLSDK_DEMO/app/src/main/java/com/hdl/hdlsdk/MainActivity.java
index 31f1ab6..c22310e 100644
--- a/HDLSDK_DEMO/app/src/main/java/com/hdl/hdlsdk/MainActivity.java
+++ b/HDLSDK_DEMO/app/src/main/java/com/hdl/hdlsdk/MainActivity.java
@@ -1,8 +1,10 @@
 package com.hdl.hdlsdk;
 
 import android.Manifest;
+import android.content.Context;
 import android.content.Intent;
-import android.os.Build;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
 import android.os.Bundle;
 import android.text.TextUtils;
 import android.util.Log;
@@ -15,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;
@@ -28,15 +29,19 @@
 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.DeviceInfoResponse;
 import com.hdl.sdk.connect.bean.response.GatewaySearchBean;
 import com.hdl.sdk.connect.callback.HDLLinkCallBack;
 import com.hdl.sdk.connect.callback.HDLLinkResponseCallBack;
@@ -68,24 +73,6 @@
     protected void onDestroy() {
         super.onDestroy();
         removeAllTopicsListener();
-    }
-
-    void initDeviceInfo() {
-        AuthenticateRequest.AuthenticateDeviceInfoBean infoBean = new AuthenticateRequest.AuthenticateDeviceInfoBean();
-        infoBean.setDeviceMAC("f2c5d8bad48f");
-        infoBean.setIPMAC("f2c5d8bad48f");
-        infoBean.setDeviceName("闊充箰鎾斁鍣�");//璁惧鍚嶅瓧
-        infoBean.setDeviceModel("MCLog.431");//璁惧鍨嬪彿
-        infoBean.setAccessMode("WIFI");
-        infoBean.setIPGateway("192.168.1.1");
-        infoBean.setIPAddress("192.168.1.103");
-        infoBean.setGateway_type("screen.touch");
-        infoBean.setHw_version("HW2.0");
-        infoBean.setFw_version("Fw1.0");
-        infoBean.setOID("010105000000FE11");//姣忎釜璁惧oid閮借涓嶄竴鏍�
-        infoBean.setSid("110105000000FE08110100000011");//姣忎釜璁惧鐨剆id閮借涓嶄竴鏍�
-        infoBean.setSupplier("JINMAOYUN");
-        HDLLinkConfig.getInstance().setDeviceInfoBean(infoBean);
     }
 
     /*void applyDeviceSecret() {
@@ -128,66 +115,33 @@
             }
         });
 
-    }*/
+    }
 
-    /**
-     * 鍏ョ綉璁よ瘉
-     */
-    void sendAuthenticateRequest() {
-        tv.setText("寮�濮嬪叆缃戣璇�...");
+    void checkAppVersion() {
+        tv.setText("寮�濮嬫娴嬫洿鏂�...");
         responseTv.setText("");
-        //璁よ瘉鎻愪氦鍙傛暟鍑嗗
-//
-//        //娴嬭瘯鏈嶅姟鍣�
-//        String spkStr = "music.standard";//浜у搧spk
-//        String macStr = "AA000000000000AF";//璁惧鍞竴MAC鍦板潃
-//        String secret = "44b360eb74b7ba64";//閫氳繃spk鍜宮ac鎻愪氦浜戠璁よ瘉鍚庡垎閰嶇殑secret
 
-//        姝e紡鏈嶅姟鍣�
-        String spkStr = "screen.touch";//浜у搧spk
-//        String macStr = "AA00000000000100";//璁惧鍞竴MAC鍦板潃
-        String macStr = editText.getText().toString();//璁惧鍞竴MAC鍦板潃
-//        String secret = "e186beeb7974998e";//閫氳繃spk鍜宮ac鎻愪氦浜戠璁よ瘉鍚庡垎閰嶇殑secret
+//        //姝e紡鏈嶅姟鍣�
+        String appKey = "i8hR07jzrIS";//appkey
+        String appSecret = "BmnJ8RWTtaVEBk24zPPF4UMwfYu0lAWU";//appsecret
 
-        String mac_key = stringToMD5(stringToMD5(macStr + secret));
-        String versionString = "HDL_V1.0.1";//
-        String time = String.valueOf(System.currentTimeMillis());
-        HDLLinkConfig.getInstance().getDeviceInfoBean().setDeviceMAC(macStr);
-//        HDLLinkConfig.getInstance().setCurrentGateway(infoBean);
+        String appCode = "1697150870315999233";//appCode
 
-        //1.璁剧疆璁よ瘉淇℃伅
-        AuthenticateRequest.RequestBean requestBean = new AuthenticateRequest.RequestBean();
-        requestBean.setMAC(macStr);
-        requestBean.setSupplier("JINMAOYUN");
-        requestBean.setFirmwareVersion(versionString);
-        requestBean.setHardwareModel("1956F");
-//        HDLLinkConfig.getInstance().setRequestBean(requestBean);
-
-        AuthenticateRequest.AuthBean authbean = new AuthenticateRequest.AuthBean();
-        authbean.setSpk(spkStr);
-        authbean.setMACKey(mac_key);
-        authbean.setRequest(requestBean);
-        HDLLinkConfig.getInstance().setAuthBean(authbean);
-
-        //HDLLinkConfig.getInstance().getDeviceInfoBean()杩欎釜鍒濆鍖栫殑鏃跺�欒鍏堣缃ソ
-        AuthenticateRequest request = new AuthenticateRequest(IdUtils.getUUId(), time, HDLLinkConfig.getInstance().getDeviceInfoBean(), authbean);
-        HDLLink.getInstance().startAuthenticateRequest(request, new HDLLinkCallBack() {
+        HDLLink.getInstance().checkAppVersion(this, appKey, appSecret, getAppVersionName(this), appCode, new CheckAppVersionListener() {
             @Override
-            public void onError(HDLLinkException e) {
-                tv.setText("璁よ瘉澶辫触" + e.getCode());
-                responseTv.setText(e.getMsg());
-                Log.e(TAG, "onError: 璁よ瘉澶辫触 " + e.getCode());
+            public void onSuccess(UpdateInfo info) {
+                tv.setText("鏈夋柊鏇存柊");
+                responseTv.setText(info.toString());
             }
 
-            @RequiresApi(api = Build.VERSION_CODES.O)
             @Override
-            public void onSuccess(String msg) {
-                tv.setText("璁よ瘉鎴愬姛");
-                responseTv.setText(msg.toString());
-                localSecret.setText("瀵嗛挜锛�" + HDLLinkConfig.getInstance().getLocalSecret());
+            public void onError(HDLException e) {
+                tv.setText("妫�娴嬫洿鏂板け璐�");
+                responseTv.setText(e.getMsg());
             }
         });
-    }
+
+    }*/
 
     public void UploadDeviceAuth(String mac, String result, String message, String auth_code) {
         //灏嗚璇佺粨鏋滀笂鎶ョ粰缃戝叧
@@ -235,6 +189,8 @@
             }
         });
 
+        UploadSidList();
+
         ActivityResultLauncher<String[]> launcher = registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), new ActivityResultCallback<Map<String, Boolean>>() {
             @Override
             public void onActivityResult(Map<String, Boolean> result) {
@@ -261,6 +217,7 @@
         beans.add(new DemoBean("UDP鍙戦�侊紝鐩戝惉涓婚鍥炲锛屽甫閲嶅彂甯﹀洖璋�"));
         beans.add(new DemoBean("TCP鍙戦�侊紝鐩戝惉涓婚鍥炲锛屽甫閲嶅彂甯﹀洖璋�"));
         beans.add(new DemoBean("閫�缃�"));
+        beans.add(new DemoBean("妫�娴嬫洿鏂�"));
         demoAdapter = new DemoAdapter(beans);
         rv.setAdapter(demoAdapter);
 
@@ -313,7 +270,7 @@
                         break;
                     case 9:
                         //鍦烘櫙鎺у埗
-                        controlScene();
+                        getScene();
                         break;
                     case 10:
                         //鍔熻兘鍒楄〃
@@ -338,6 +295,10 @@
                     case 15:
                         //閫�缃�
                         deleteNetwork();
+                        break;
+                    case 16:
+                        //妫�娴嬫洿鏂�
+//                        checkAppVersion();
                         break;
                 }
             }
@@ -371,7 +332,7 @@
             @Override
             public void onMessage(Object msg) {
                 LinkResponse response = (LinkResponse) msg;
-                if ("/user/all/custom/gateway/broadcast_reply".equals(response.getTopic())){
+                if ("/user/all/custom/gateway/broadcast_reply".equals(response.getTopic())) {
                     localSecret.setText("瀵嗛挜锛�" + HDLLinkConfig.getInstance().getLocalSecret());
                 }
             }
@@ -422,6 +383,75 @@
         HDLLink.getInstance().removeAllTopicsListener(allTopicsListener);
     }
 
+    void initDeviceInfo()
+    {
+        AuthenticateRequest.AuthenticateDeviceInfoBean infoBean = new AuthenticateRequest.AuthenticateDeviceInfoBean();
+        infoBean.setDeviceMAC("f2c5d8bad48f");
+        infoBean.setIPMAC("f2c5d8bad48f");
+        infoBean.setDeviceName("榄旈暅");//璁惧鍚嶅瓧
+        infoBean.setDeviceModel("HDLSDK");//璁惧鍨嬪彿
+        infoBean.setAccessMode("WIFI");
+        infoBean.setIPGateway("192.168.1.1");
+        infoBean.setIPAddress("192.168.1.116");
+        infoBean.setGateway_type("screen.touch");
+        infoBean.setHw_version("HW2.0");
+        infoBean.setFw_version("Fw1.0");
+        infoBean.setOID("010105000000FE11");//姣忎釜璁惧oid閮借涓嶄竴鏍�
+        infoBean.setSid("110105000000FE08110100000011");//姣忎釜璁惧鐨剆id閮借涓嶄竴鏍�
+        infoBean.setSupplier("JINMAOYUN");
+        HDLLinkConfig.getInstance().setDeviceInfoBean(infoBean);
+
+    }
+
+    /**
+     * 鍏ョ綉璁よ瘉
+     */
+    void sendAuthenticateRequest() {
+        tv.setText("寮�濮嬪叆缃戣璇�...");
+        //璁よ瘉鎻愪氦鍙傛暟鍑嗗
+
+//        娴嬭瘯鏈嶅姟
+//        String spkStr = "ir.module";//浜у搧spk
+//        String macStr = "AA000000000000AF";//璁惧鍞竴MAC鍦板潃
+//        String secret = "44b360eb74b7ba64";//閫氳繃spk鍜宮ac鎻愪氦浜戠璁よ瘉鍚庡垎閰嶇殑secret
+
+//        姝e紡鏈嶅姟鍣�
+        String spkStr = "screen.touch";//浜у搧spk
+        String macStr = "f2c5d8bad48f";//璁惧鍞竴MAC鍦板潃
+        String secret = "7728691efecc3853";//閫氳繃spk鍜宮ac鎻愪氦浜戠璁よ瘉鍚庡垎閰嶇殑secret
+
+        String mac_key = stringToMD5(stringToMD5(macStr + secret));
+        String versionString = "HDL_V1.0.1";//
+        String time = String.valueOf(System.currentTimeMillis());
+        HDLLinkConfig.getInstance().getDeviceInfoBean().setDeviceMAC(macStr);
+
+        //1.璁剧疆璁よ瘉淇℃伅
+        AuthenticateRequest.RequestBean requestBean = new AuthenticateRequest.RequestBean();
+        requestBean.setMAC(macStr);
+        requestBean.setSupplier("JINMAOYUN");
+        requestBean.setFirmwareVersion(versionString);
+        requestBean.setHardwareModel("1956F");
+        AuthenticateRequest.AuthBean authbean = new AuthenticateRequest.AuthBean();
+        authbean.setSpk(spkStr);
+        authbean.setMACKey(mac_key);
+        authbean.setRequest(requestBean);
+        //HDLLinkConfig.getInstance().getDeviceInfoBean()杩欎釜鍒濆鍖栫殑鏃跺�欒鍏堣缃ソ
+        AuthenticateRequest request = new AuthenticateRequest(IdUtils.getUUId(), time, HDLLinkConfig.getInstance().getDeviceInfoBean(), authbean);
+        HDLLink.getInstance().startAuthenticateRequest(request, new HDLLinkCallBack() {
+            @Override
+            public void onError(HDLLinkException e) {
+                tv.setText("璁よ瘉澶辫触");
+                responseTv.setText(e.getMsg());
+                Log.i("TAG", "onError: 璁よ瘉澶辫触");
+            }
+
+            @Override
+            public void onSuccess(String msg) {
+                tv.setText("璁よ瘉鎴愬姛");
+                responseTv.setText(msg.toString());
+            }
+        });
+    }
 
     String stringToMD5(String text) {
         byte[] hash;
@@ -575,6 +605,7 @@
             @Override
             public void onSuccess(String msg) {
                 responseTv.setText(msg);
+                Log.d("panlili", "MainActivity.java:getSceneList-----> " + msg);
             }
 
             @Override
@@ -586,6 +617,30 @@
 
     //鍦烘櫙鍒楄〃
     // {"id":"8a5eaa143ce943b987b577df5a66759b","time_stamp":"1637040217235","objects":[{"sid":"04010560D2C7170A0A0100000000","name":"鍥炲妯″紡","status":"off","group":"255","delay":"0","modify_time":"1634871490"},{"sid":"04010560D2C76E0A0A0100010000","name":"绂诲妯″紡","status":"off","group":"255","delay":"0","modify_time":"1634785823"}]}
+
+    /**
+     * 鑾峰彇鍦烘櫙璇︽儏
+     * 鎵ц鎴愬姛鐨勮瘽 鍝嶅簲code涓�200
+     */
+    void getScene() {
+        tv.setText("鍦烘櫙璇诲彇");
+        responseTv.setText("");
+        //鍦烘櫙sid鍒楄〃锛屾敮鎸佹壒閲忚鍙�
+        List<String> sids = new ArrayList<>();
+        sids.add("0201034C50B53F0A0A0100011100");
+        sids.add("0201037F50B53F0A0A0100021100");
+        HDLLink.getInstance().getScene(sids, new HDLLinkCallBack() {
+            @Override
+            public void onSuccess(String msg) {
+                responseTv.setText(msg);
+            }
+
+            @Override
+            public void onError(HDLLinkException e) {
+                responseTv.setText(e.getMsg());
+            }
+        });
+    }
 
     /**
      * 鎺у埗鍦烘櫙
@@ -758,4 +813,66 @@
             }
         });
     }
+
+    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鐗堟湰
+     *
+     * @param context
+     * @return
+     */
+    public static String getAppVersionName(Context context) {
+        String versionName = "0";
+        try {
+            PackageManager packageManager = context.getPackageManager();
+            PackageInfo packageInfo = packageManager.getPackageInfo(context.getPackageName(), 0);
+            versionName = packageInfo.versionName;
+            if (TextUtils.isEmpty(versionName)) {
+                versionName = "0";
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return versionName;
+    }
 }
\ No newline at end of file

--
Gitblit v1.8.0