From aba53745b27e7efe5f43f86ef4aa1e95611cd804 Mon Sep 17 00:00:00 2001
From: JLChen <551775569@qq.com>
Date: 星期一, 06 十二月 2021 17:33:59 +0800
Subject: [PATCH] 2021-12-06 1.修复有时解密失败问题。

---
 HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/TcpClient.java              |    9 +++-
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/protocol/LinkMessageDecoder.java |    1 
 HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java                             |   65 ++++++++++++++++++++++++++++----
 HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/codec/MessagePipeLine.java         |    2 
 4 files changed, 64 insertions(+), 13 deletions(-)

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 33838bc..ea90450 100644
--- a/HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java
+++ b/HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java
@@ -10,6 +10,7 @@
 
 import android.Manifest;
 import android.os.Bundle;
+import android.text.TextUtils;
 import android.util.Log;
 import android.view.View;
 import android.widget.TextView;
@@ -17,14 +18,17 @@
 
 import com.chad.library.adapter.base.BaseQuickAdapter;
 import com.chad.library.adapter.base.listener.OnItemClickListener;
+import com.google.gson.reflect.TypeToken;
 import com.hdl.sdk.common.event.EventListener;
 import com.hdl.sdk.common.exception.HDLLinkException;
 import com.hdl.sdk.common.utils.IdUtils;
 import com.hdl.sdk.common.utils.IpUtils;
+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.AuthenticateRequest;
 import com.hdl.sdk.connect.bean.request.PropertyReadRequest;
+import com.hdl.sdk.connect.bean.response.BaseLocalResponse;
 import com.hdl.sdk.connect.bean.response.GatewaySearchBean;
 import com.hdl.sdk.connect.callback.HDLLinkCallBack;
 import com.hdl.sdk.connect.callback.HDLLinkResponseCallBack;
@@ -43,15 +47,18 @@
 import java.util.List;
 import java.util.Map;
 
+import static com.hdl.sdk.common.config.TopicConstant.GATEWAY_SEARCH_REPLY;
+
 public class MainActivity extends AppCompatActivity {
 
+    private static final String TAG = "MainActivity";
     private DemoAdapter demoAdapter;
     private RecyclerView rv;
     private TextView tv;
     private TextView responseTv;
     boolean isOn;
     private EventListener allTopicsListener;
-    private String testLightSid = "000101B847C71B02020100010101";
+    private String testLightSid = "0001010D48C71B02020100010101";
 
     @Override
     protected void onDestroy() {
@@ -94,13 +101,11 @@
         rv.setAdapter(demoAdapter);
 
 
-        final SocketOptions options = new SocketOptions();
-
+//        final SocketOptions options = new SocketOptions();
+//
         MessagePipeLine pipeLine = new MessagePipeLine();
-        pipeLine.add(new LinkMessageDecoder());
-        pipeLine.add(new LinkMessageEncoder());
-        options.setHandleMessage(pipeLine);
-        options.setEnabledHeartbeat(false);
+//        options.setHandleMessage(pipeLine);
+//        options.setEnabledHeartbeat(false);
 
         demoAdapter.setOnItemClickListener(new OnItemClickListener() {
             @Override
@@ -164,10 +169,52 @@
             @Override
             public void onMessage(Object msg) {
                 LinkResponse response = (LinkResponse)msg;
-                Log.i("TAG", "AllTopicsListener onMessage: "+msg.toString());
+                if(response != null){
+                    Log.i(TAG, "AllTopicsListener"
+                            + "\nTopic: " + response.getTopic()
+                            +"\n Data: " + response.getData());
+                    handleLinkResponse(response);
+                }
+
             }
         };
         HDLLink.getInstance().registerAllTopicsListener(allTopicsListener);
+    }
+
+    /**
+     * 澶勭悊鏀跺埌鐨勪富棰�
+     * @param response
+     */
+    private void handleLinkResponse(LinkResponse response){
+        //缃戝叧鎼滅储鍥炲
+        if(response.getTopic().contains("/user/all/custom/gateway/search_reply")){
+            String data = response.getData();
+            if (!TextUtils.isEmpty(data)) {
+                Log.i("handleLinkResponse", "data:"+data);
+                final BaseLocalResponse<GatewaySearchBean> bean = GsonConvert.getGson().fromJson(data, new TypeToken<BaseLocalResponse<GatewaySearchBean>>() {
+                }.getType());
+                GatewaySearchBean searchBean = bean.getObjects();
+                Log.i("handleLinkResponse", "GatewaySearchBean: "+searchBean.getGatewayId());
+            }
+        }else{
+            //鍏跺畠涓婚
+
+        }
+    }
+
+    private GatewaySearchBean getGatewaySearchBean(Object msg) {
+        GatewaySearchBean searchBean = null;
+        if (msg instanceof LinkResponse) {
+            LinkResponse linkResponse = (LinkResponse) msg;
+            String data = linkResponse.getData();
+            if (!TextUtils.isEmpty(data)) {
+                final BaseLocalResponse<GatewaySearchBean> response = GsonConvert.getGson().fromJson(data, new TypeToken<BaseLocalResponse<GatewaySearchBean>>() {
+                }.getType());
+                searchBean = response.getObjects();
+            }
+
+        }
+        return searchBean;
     }
 
     /**
@@ -209,7 +256,7 @@
         infoBean.setDeviceName("绾㈠瀹�");//璁惧鍚嶅瓧
         infoBean.setDeviceModel("HDL");//
         infoBean.setAccessMode("WIFI");
-        infoBean.setIPGateway("192.168.10.1");
+        infoBean.setIPGateway("192.168.12.1");
         infoBean.setIPAddress(IpUtils.getIP(this));
 
         infoBean.setOID("010105000000FE08");
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 2ce8c8d..4cc8a8f 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
@@ -70,6 +70,7 @@
                         } else {
                             //瑙e瘑澶辫触锛岃繑鍥炲師鏁版嵁
                             response.setData(new String(body, "utf-8"));
+                            LogUtils.e( "瑙e瘑澶辫触");
                         }
 
                     } else {
diff --git a/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/TcpClient.java b/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/TcpClient.java
index 51a03d8..3cd750c 100644
--- a/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/TcpClient.java
+++ b/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/TcpClient.java
@@ -14,6 +14,7 @@
 import java.io.OutputStream;
 import java.net.InetSocketAddress;
 import java.net.Socket;
+import java.util.Arrays;
 import java.util.List;
 
 
@@ -89,10 +90,12 @@
 
         if (stream != null && getOptions() != null) {
             readBuffer = new byte[1024];
-            while ((getInputStream().read(readBuffer)) != -1) {
+            int len;
+            while ((len = getInputStream().read(readBuffer)) != -1) {
                 IHandleMessage handleMessage = getOptions().getHandleMessage();
-                if (handleMessage != null) {
-                    handleMessage.read(readBuffer);
+                if (handleMessage != null && len > 0) {
+                    handleMessage.read(Arrays.copyOfRange(readBuffer, 0, len));
+//                    handleMessage.read(readBuffer);
                 }
             }
         }
diff --git a/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/codec/MessagePipeLine.java b/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/codec/MessagePipeLine.java
index b5e8195..3517fad 100644
--- a/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/codec/MessagePipeLine.java
+++ b/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/codec/MessagePipeLine.java
@@ -9,7 +9,7 @@
  */
 public class MessagePipeLine implements IMessagePipeLine, IHandleMessage {
 
-    public final static List<IHandleFlow> queue = new ArrayList<>();
+    public final List<IHandleFlow> queue = new ArrayList<>();
 
     @Override
     public void add(IHandleFlow flow) {

--
Gitblit v1.8.0