From af2cbc2a24b3724e7fc3e6b42e134b21a3144c75 Mon Sep 17 00:00:00 2001
From: hxb <hxb@hdlchina.com.cn>
Date: 星期四, 17 二月 2022 15:33:19 +0800
Subject: [PATCH] 过滤掉非json数据不传给三方使用

---
 HDLSDK/hdl-common/build.gradle                                                        |    2 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/config/HDLLinkConfig.java        |    2 
 HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/config/TopicConstant.java          |    8 +
 HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/IpUtils.java                 |   30 ++--
 HDLSDK/hdl-socket/build.gradle                                                        |    2 
 HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/IHeartbeat.java             |    8 +
 HDLSDK/app/build.gradle                                                               |    2 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/protocol/LinkMessageDecoder.java |   14 +
 HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/SocketBoot.java                    |   51 ++++++++
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java            |   92 +++++++++-----
 HDLSDK_DEMO/app/src/main/java/com/hdl/hdlsdk/MainActivity.java                        |   43 ++++---
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/LinkRequest.java            |    6 
 HDLSDK/hdl-connect/build.gradle                                                       |    2 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HdlSocketHelper.java      |    2 
 HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/HDLSdk.java                        |   11 +
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java        |    8 
 HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/TcpClient.java              |    4 
 HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java                             |   54 ++++-----
 18 files changed, 224 insertions(+), 117 deletions(-)

diff --git a/HDLSDK/app/build.gradle b/HDLSDK/app/build.gradle
index 22b041f..399b7ea 100644
--- a/HDLSDK/app/build.gradle
+++ b/HDLSDK/app/build.gradle
@@ -6,7 +6,7 @@
     compileSdk 31
 
     defaultConfig {
-        applicationId "com.hdl.hdlsdk"
+        applicationId "com.hdl.hdlsdk1"
         minSdk 21
         targetSdk 31
         versionCode 1
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 aed7414..571b025 100644
--- a/HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java
+++ b/HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java
@@ -4,12 +4,14 @@
 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;
 
 import android.Manifest;
 import android.content.Intent;
+import android.os.Build;
 import android.os.Bundle;
 import android.text.TextUtils;
 import android.util.Log;
@@ -27,6 +29,7 @@
 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.LogUtils;
 import com.hdl.sdk.common.utils.gson.GsonConvert;
 import com.hdl.sdk.connect.HDLLink;
 import com.hdl.sdk.connect.bean.LinkRequest;
@@ -45,15 +48,18 @@
 import com.hdl.sdk.connect.protocol.LinkMessageEncoder;
 import com.hdl.sdk.socket.SocketOptions;
 import com.hdl.sdk.socket.codec.MessagePipeLine;
+import java.util.Base64;
 
 import java.io.UnsupportedEncodingException;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 import java.util.ArrayList;
+import java.util.Base64;
 import java.util.List;
 import java.util.Map;
 
 import static com.hdl.sdk.common.config.TopicConstant.GATEWAY_SEARCH_REPLY;
+import static java.util.Base64.*;
 
 public class MainActivity extends AppCompatActivity {
 
@@ -71,10 +77,12 @@
         super.onDestroy();
         removeAllTopicsListener();
     }
-void init(){
-    HDLLinkConfig.getInstance().setLocalSecret("7d04c4e3c2b7d600");
-    HDLLinkConfig.getInstance().setGatewayId("1473119283609321473");
+void init() {
+//    HDLLinkConfig.getInstance().setLocalSecret("7d04c4e3c2b7d600");
+//    HDLLinkConfig.getInstance().setGatewayId("1473119283609321473");
+//    HDLLinkConfig.getInstance().setLocalEncrypt(true);
 }
+    @RequiresApi(api = Build.VERSION_CODES.O)
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -83,6 +91,7 @@
         tv = findViewById(R.id.state_tv);
         rv = findViewById(R.id.rv);
         rv.setLayoutManager(new LinearLayoutManager(this));
+
          init();
         checkIfCertified();
         initDeviceInfo();
@@ -257,18 +266,18 @@
     void initDeviceInfo()
     {
         AuthenticateRequest.AuthenticateDeviceInfoBean infoBean = new AuthenticateRequest.AuthenticateDeviceInfoBean();
-        infoBean.setDeviceMAC("123456789");
-        infoBean.setIPMAC("12345678900");
+        infoBean.setDeviceMAC("AA000000000000AF");
+        infoBean.setIPMAC("AA000000000000AF");
         infoBean.setDeviceName("闊充箰鎾斁鍣�");//璁惧鍚嶅瓧
         infoBean.setDeviceModel("MCLog.431");//璁惧鍨嬪彿
         infoBean.setAccessMode("WIFI");
-        infoBean.setIPGateway("192.168.88.1");
-        infoBean.setIPAddress("192.168.88.100");
+        infoBean.setIPGateway("192.168.1.1");
+        infoBean.setIPAddress("192.168.1.101");
         infoBean.setGateway_type("music.standard");
         infoBean.setHw_version("HW2.0");
         infoBean.setFw_version("Fw1.0");
-        infoBean.setOID("010105000000FE08");
-        infoBean.setSid("010105000000FE08110100000000");
+        infoBean.setOID("010105000000FE10");//姣忎釜璁惧oid閮借涓嶄竴鏍�
+        infoBean.setSid("110105000000FE08110100000000");//姣忎釜璁惧鐨剆id閮借涓嶄竴鏍�
         HDLLinkConfig.getInstance().setDeviceInfoBean(infoBean);
     }
 
@@ -281,8 +290,8 @@
 
         //娴嬭瘯鏈嶅姟
         String spkStr = "ir.module";//浜у搧spk
-        String macStr = "AA000000000000BB";//璁惧鍞竴MAC鍦板潃
-        String secret = "87ae414b7a853f65";//閫氳繃spk鍜宮ac鎻愪氦浜戠璁よ瘉鍚庡垎閰嶇殑secret
+        String macStr = "AA000000000000AF";//璁惧鍞竴MAC鍦板潃
+        String secret = "44b360eb74b7ba64";//閫氳繃spk鍜宮ac鎻愪氦浜戠璁よ瘉鍚庡垎閰嶇殑secret
 
 //        //姝e紡鏈嶅姟鍣�
 //        String spkStr = "screen.mirror";//浜у搧spk
@@ -292,35 +301,20 @@
         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("raysgem");
+        requestBean.setSupplier("WISE");
         requestBean.setFirmwareVersion(versionString);
         requestBean.setHardwareModel("1956F");
         AuthenticateRequest.AuthBean authbean = new AuthenticateRequest.AuthBean();
         authbean.setSpk(spkStr);
         authbean.setMACKey(mac_key);
         authbean.setRequest(requestBean);
-
-        //2.璁剧疆璁惧淇℃伅
-        AuthenticateRequest.AuthenticateDeviceInfoBean infoBean = new AuthenticateRequest.AuthenticateDeviceInfoBean();
-        infoBean.setDeviceMAC(macStr);
-        infoBean.setIPMAC(macStr);
-        infoBean.setDeviceName("绾㈠瀹�");//璁惧鍚嶅瓧
-        infoBean.setDeviceModel("HDL");//
-        infoBean.setAccessMode("WIFI");
-        infoBean.setIPGateway("192.168.88.1");
-        infoBean.setIPAddress(IpUtils.getIP(this));//鏍规嵁鐪熷疄鐨処P鍦板潃濉啓
-
-        infoBean.setOID("010105000000FE08");
-        infoBean.setSid("010105000000FE08110100000000");
-        infoBean.setHw_version("1.0");
-        infoBean.setFw_version("1.0");
-//        infoBean.set
-
-        AuthenticateRequest request = new AuthenticateRequest(IdUtils.getUUId(), time, infoBean, 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) {
diff --git a/HDLSDK/hdl-common/build.gradle b/HDLSDK/hdl-common/build.gradle
index 3a82524..ae48686 100644
--- a/HDLSDK/hdl-common/build.gradle
+++ b/HDLSDK/hdl-common/build.gradle
@@ -9,7 +9,7 @@
         minSdkVersion rootProject.minSdkVersion
         targetSdkVersion rootProject.targetSdkVersion
         versionCode 2
-        versionName "1.0.5"
+        versionName "1.0.6"
 
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
         consumerProguardFiles "consumer-rules.pro"
diff --git a/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/HDLSdk.java b/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/HDLSdk.java
index 30fe78c..3c11a89 100644
--- a/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/HDLSdk.java
+++ b/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/HDLSdk.java
@@ -11,6 +11,16 @@
 
     private Context context;
 
+    /**
+     * 鑾峰彇褰撳墠鐗堟湰
+     * @return
+     */
+    public String getVersion() {
+        return version;
+    }
+
+    private String version="1.0.6";
+
     private HDLSdk() {
     }
 
@@ -24,6 +34,7 @@
 
     public void init(Context context) {
         this.context = context.getApplicationContext();
+        LogUtils.i("Version:" + version);
     }
 
     public Context getContext() {
diff --git a/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/config/TopicConstant.java b/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/config/TopicConstant.java
index 9f4a148..4046a29 100644
--- a/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/config/TopicConstant.java
+++ b/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/config/TopicConstant.java
@@ -87,4 +87,12 @@
      */
     public static final String BROADCAST_REPLY="/user/all/custom/gateway/broadcast_reply";
 
+    /**
+     * 蹇冭烦妫�娴�
+     */
+    public static final String HEARTBEAT="/user/%s/custom/gateway/heartbeat";
+    /**
+     * 蹇冭烦妫�娴嬪洖澶�
+     */
+    public static final String HEARTBEAT_REPLY="/user/%s/custom/gateway/heartbeat_reply";
 }
diff --git a/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/IpUtils.java b/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/IpUtils.java
index 2f2f010..97620f2 100644
--- a/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/IpUtils.java
+++ b/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/utils/IpUtils.java
@@ -19,21 +19,21 @@
      * @return 骞挎挱鍦板潃
      */
     public static String getBroadcastAddress() {
-        try {
-            for (Enumeration<NetworkInterface> niEnum = NetworkInterface.getNetworkInterfaces();
-                 niEnum.hasMoreElements(); ) {
-                NetworkInterface ni = niEnum.nextElement();
-                if (!ni.isLoopback()) {
-                    for (InterfaceAddress interfaceAddress : ni.getInterfaceAddresses()) {
-                        if (interfaceAddress.getBroadcast() != null) {
-                            return interfaceAddress.getBroadcast().toString().substring(1);
-                        }
-                    }
-                }
-            }
-        } catch (SocketException e) {
-            e.printStackTrace();
-        }
+//        try {
+//            for (Enumeration<NetworkInterface> niEnum = NetworkInterface.getNetworkInterfaces();
+//                 niEnum.hasMoreElements(); ) {
+//                NetworkInterface ni = niEnum.nextElement();
+//                if (!ni.isLoopback()) {
+//                    for (InterfaceAddress interfaceAddress : ni.getInterfaceAddresses()) {
+//                        if (interfaceAddress.getBroadcast() != null) {
+//                            return interfaceAddress.getBroadcast().toString().substring(1);
+//                        }
+//                    }
+//                }
+//            }
+//        } catch (SocketException e) {
+//            e.printStackTrace();
+//        }
         return "255.255.255.255";
     }
 
diff --git a/HDLSDK/hdl-connect/build.gradle b/HDLSDK/hdl-connect/build.gradle
index ce517bb..e9f6bea 100644
--- a/HDLSDK/hdl-connect/build.gradle
+++ b/HDLSDK/hdl-connect/build.gradle
@@ -9,7 +9,7 @@
         minSdkVersion rootProject.minSdkVersion
         targetSdkVersion rootProject.targetSdkVersion
         versionCode 2
-        versionName "1.0.5"
+        versionName "1.0.6"
 
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
         consumerProguardFiles "consumer-rules.pro"
diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/LinkRequest.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/LinkRequest.java
index f3b663b..9a9b5ae 100644
--- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/LinkRequest.java
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/LinkRequest.java
@@ -88,11 +88,13 @@
                 String headString = "Topic:" + getTopic() + "\r\n" + "Length:" + dataBytes.length + "\r\n" + "\r\n";
                 byte[] headBytes = headString.getBytes("utf-8");
                 byte[] sendBytes = ByteUtils.concatBytes(headBytes, dataBytes);
-                LogUtils.i(headString + "\r\n" + data);
+                LogUtils.i("鍙戦�佹暟鎹細\r\n" + headString + "\r\n" + data);
                 return sendBytes;
 
             } else {
-                return this.toString().getBytes("utf-8");
+                String sendString = this.toString();
+                LogUtils.i("鍙戦�佹暟鎹細\r\n" + sendString);
+                return sendString.getBytes("utf-8");
             }
 
         } catch (Exception e) {
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 949b7e9..7988290 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
@@ -168,7 +168,7 @@
         return (!topicStr.contains(TopicConstant.GATEWAY_AUTH_BROADCAST) //缃戝叧骞挎挱鍏ョ綉鎸囦护
                 && !topicStr.contains(TopicConstant.DEIVCE_AUTH_REQUEST) //鍏ョ綉璁よ瘉
                 && !topicStr.contains(TopicConstant.GATEWAY_SEARCH) //鎼滅储缃戝叧涓婚
-                && !topicStr.equals(TopicConstant.BROADCAST)
+                && !topicStr.contains(TopicConstant.BROADCAST)
                 && isLocalEncrypt//鍚敤鍔犲瘑鏍囧織
         );
     }
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 0d20188..31e03b1 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
@@ -1,6 +1,7 @@
 package com.hdl.sdk.connect.protocol;
 
 
+import android.annotation.TargetApi;
 import android.os.Build;
 import android.util.Log;
 
@@ -116,7 +117,7 @@
         }
     }
 
-    @RequiresApi(api = Build.VERSION_CODES.O)
+
     @Override
     protected synchronized LinkResponse decoder(Object msg) throws Exception {
         if (msg instanceof byte[]) {
@@ -164,19 +165,24 @@
                         body = bodyBytes;
                     } else {
                         try {
-                            LogUtils.e("瑙e瘑澶辫触锛屾暟鎹唴瀹规槸锛歕r\n" + Base64.getEncoder().encodeToString(body));
+                            LogUtils.e("瑙e瘑澶辫触锛屾暟鎹唴瀹规槸锛歕r\n");
+                            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
+                                LogUtils.e(Base64.getEncoder().encodeToString(body));
+                            else {
+                                LogUtils.e(new String(body, "utf-8"));
+                            }
                         } catch (Exception e) {
                         }
                     }
                 }
 
                 String bodyString = new String(body, "utf-8");
+                response.setData(bodyString);
+                LogUtils.i( "鎺ユ敹鍒版暟鎹�:" + response.getTopic() + "\r\n" + response.getData());
                 //闈炴甯告暟鎹紝杩斿洖
                 if (!(bodyString.startsWith("{") || bodyString.startsWith("["))) {
                     continue;
                 }
-                response.setData(bodyString);
-                LogUtils.i( "LinkMessageDecoder->decoder:" + response.getTopic() + "\r\n" + response.getData());
                 //瑙f瀽瀹屾垚,topic鍙戦�佷竴娆�
                 EventDispatcher.getInstance().post(response.getTopic(), response);
             }
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 3c8363f..908ed83 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
@@ -141,15 +141,15 @@
             public void onMessage(Object msg) {
                 NetworkAccessBroadcastResponse bean = getNetworkAccessBroadcastResponse(msg);
                 if (bean != null) {
-                    LogUtils.i(TAG, "缃戝叧鍏ョ綉骞挎挱IP: " + bean.getIPAddress());
+                    //绉婚櫎鐩戝惉
+                    EventDispatcher.getInstance().remove(TopicConstant.GATEWAY_AUTH_BROADCAST);
+                    LogUtils.i("缃戝叧鍏ョ綉骞挎挱IP: " + bean.getIPAddress());
                     String ipStr = bean.getIPAddress();
                     if (!TextUtils.isEmpty(ipStr)) {
                         sendAuthenticateRequest(ipStr, request, callBack);
                     }
                 }
-                //绉婚櫎鐩戝惉
-                EventDispatcher.getInstance().remove(TopicConstant.GATEWAY_AUTH_BROADCAST);
-                LogUtils.i(TAG, "绉婚櫎鐩戝惉 authEvent");
+
             }
         });
     }
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 dedba8a..57a322f 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
@@ -27,6 +27,7 @@
 import com.hdl.sdk.connect.protocol.LinkMessageEncoder;
 import com.hdl.sdk.socket.SocketBoot;
 import com.hdl.sdk.socket.SocketOptions;
+import com.hdl.sdk.socket.client.IHeartbeat;
 import com.hdl.sdk.socket.client.TcpClient;
 import com.hdl.sdk.socket.codec.MessagePipeLine;
 import com.hdl.sdk.socket.listener.ConnectStatusListener;
@@ -413,6 +414,27 @@
         //濡傛灉娌℃湁鍒濆鍖栵紝鎴栬�呯綉鍏矷P鏇存敼浜嗭紝灏遍噸鏂板垵濮嬪寲
         if (tcpBoot == null||!getTcpOptions().getIp().equals(getTcpIp())) {
             tcpBoot = TcpClient.init(getTcpIp(), getTcpPort(), getTcpOptions());
+            tcpBoot.SetHeartbeat(new IHeartbeat() {
+                @Override
+                public void heartbeat() {
+
+                    if(HDLLinkConfig.getInstance().getDeviceInfoBean()==null||HDLLinkConfig.getInstance().getDeviceInfoBean().getOID()==null) {
+                        LogUtils.i("DeviceInfoBean涓虹┖锛岄渶瑕佽缃墠鑳芥甯稿績璺�");
+                        return;
+                    }
+
+                    String time = String.valueOf(System.currentTimeMillis());
+                    JsonObject jsonObject = new JsonObject();
+                    jsonObject.addProperty("id", IdUtils.getUUId());
+                    jsonObject.addProperty("time_stamp", time);
+
+                    String topic = String.format(TopicConstant.HEARTBEAT, HDLLinkConfig.getInstance().getDeviceInfoBean().getOID());
+
+                    LinkRequest message = new LinkRequest(topic,
+                            jsonObject.toString());
+                    sendMsg(message.getSendBytes(), null, null, null);
+                }
+            });
         }
 
         return tcpBoot;
@@ -574,46 +596,48 @@
     public void sendMsg(byte[] data, String eventTag, HDLLinkCallBack callBack, SendListener sendListener) {
 
         try {
-            final AtomicInteger sendCount = new AtomicInteger(0);
+            if(eventTag!=null) {
+                final AtomicInteger sendCount = new AtomicInteger(0);
 
-            final ScheduledExecutorService threadPool = ThreadToolUtils.getInstance().newScheduledThreadPool(1);
-            final EventListener eventListener = new EventListener() {
-                @Override
-                public void onMessage(Object msg) {
-                    if (msg instanceof LinkResponse) {
-                        LogUtils.i("sendMsg onSuccess");
-                        threadPool.shutdownNow();
-                        LogUtils.i("sendMsg eventListener remove");
-                        EventDispatcher.getInstance().remove(eventTag, this);
-                        if (callBack != null) {
-                            callBack.onSuccess(msg.toString());
+                final ScheduledExecutorService threadPool = ThreadToolUtils.getInstance().newScheduledThreadPool(1);
+                final EventListener eventListener = new EventListener() {
+                    @Override
+                    public void onMessage(Object msg) {
+                        if (msg instanceof LinkResponse) {
+                            LogUtils.i("sendMsg onSuccess");
+                            threadPool.shutdownNow();
+                            LogUtils.i("sendMsg eventListener remove");
+                            EventDispatcher.getInstance().remove(eventTag, this);
+                            if (callBack != null) {
+                                callBack.onSuccess(msg.toString());
+                            }
                         }
                     }
-                }
-            };
+                };
 
-            threadPool.scheduleWithFixedDelay(new Runnable() {
-                @Override
-                public void run() {
-                    if (sendCount.get() < 3) {
-                        sendCount.set(sendCount.get() + 1);
-                        getTcp().sendMsg(data);
-                    } else {
-                        threadPool.shutdownNow();
-                        LogUtils.e("sendMsg eventListener remove");
-                        EventDispatcher.getInstance().remove(eventTag, eventListener);
-                        ThreadToolUtils.getInstance().runOnUiThread(new Runnable() {
-                            @Override
-                            public void run() {
-                                if (callBack != null) {
-                                    callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_SEND_ERROR));
+                threadPool.scheduleWithFixedDelay(new Runnable() {
+                    @Override
+                    public void run() {
+                        if (sendCount.get() < 3) {
+                            sendCount.set(sendCount.get() + 1);
+                            getTcp().sendMsg(data);
+                        } else {
+                            threadPool.shutdownNow();
+                            LogUtils.e("sendMsg eventListener remove");
+                            EventDispatcher.getInstance().remove(eventTag, eventListener);
+                            ThreadToolUtils.getInstance().runOnUiThread(new Runnable() {
+                                @Override
+                                public void run() {
+                                    if (callBack != null) {
+                                        callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_SEND_ERROR));
+                                    }
                                 }
-                            }
-                        });
+                            });
+                        }
                     }
-                }
-            }, 1000, 500, TimeUnit.MILLISECONDS);
-            EventDispatcher.getInstance().register(eventTag, eventListener);
+                }, 1000, 500, TimeUnit.MILLISECONDS);
+                EventDispatcher.getInstance().register(eventTag, eventListener);
+            }
             //鍏堝彂閫佷竴娆�
             getTcp().sendMsg(data, new SendListener() {
                 @Override
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 4bcc51e..7776163 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
@@ -21,7 +21,7 @@
  */
 public class HdlSocketHelper {
 
-    private static final Long DEF_SEND_TIMEOUT = 500L;
+    private static final Long DEF_SEND_TIMEOUT = 1000L;
     private static final int DEF_MAX_RETRY = 4;
     private static final int DEF_SEND_ONE = 1;
 
diff --git a/HDLSDK/hdl-socket/build.gradle b/HDLSDK/hdl-socket/build.gradle
index e4bdbc4..60ad903 100644
--- a/HDLSDK/hdl-socket/build.gradle
+++ b/HDLSDK/hdl-socket/build.gradle
@@ -9,7 +9,7 @@
         minSdkVersion rootProject.minSdkVersion
         targetSdkVersion rootProject.targetSdkVersion
         versionCode 2
-        versionName "1.0.5"
+        versionName "1.0.6"
 
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
         consumerProguardFiles "consumer-rules.pro"
diff --git a/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/SocketBoot.java b/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/SocketBoot.java
index 74e0940..5da2b6b 100644
--- a/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/SocketBoot.java
+++ b/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/SocketBoot.java
@@ -5,13 +5,18 @@
 
 import androidx.collection.ArrayMap;
 
+import com.google.gson.JsonObject;
+import com.hdl.sdk.common.config.TopicConstant;
+import com.hdl.sdk.common.utils.IdUtils;
 import com.hdl.sdk.common.utils.LogUtils;
 import com.hdl.sdk.common.utils.ThreadToolUtils;
 import com.hdl.sdk.socket.annotation.ConnectStatus;
 import com.hdl.sdk.socket.client.IClient;
+import com.hdl.sdk.socket.client.IHeartbeat;
 import com.hdl.sdk.socket.listener.SendListener;
 
 import java.net.ConnectException;
+import java.util.Date;
 import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.LinkedBlockingDeque;
@@ -29,8 +34,17 @@
     private ExecutorService connectThread;
     private ExecutorService sendThread;
     private ExecutorService receiveThread;
+    private ExecutorService heartbeatThread;
 
     private final IClient client;
+    private IHeartbeat iHeartbeat;
+    public void SetHeartbeat(IHeartbeat iHeartbeat){
+        this.iHeartbeat=iHeartbeat;
+    }
+    /**
+     * 褰撳墠鎺ユ敹鍒版暟鎹殑鏃堕棿
+     */
+    private static long time=System.currentTimeMillis();
 
     /**
      * tcp鏄惁宸茬粡杩炴帴
@@ -50,6 +64,7 @@
         initConnectThread();
         initReceiveThread();
         initSendThread();
+        initHeartbeat();
     }
 
     /**
@@ -125,6 +140,7 @@
                             if (connected) {
                                 //璇诲彇鏁版嵁
                                 client.onHandleResponse();
+                                time= System.currentTimeMillis();
                             } else {
                                 try {
                                     Thread.sleep(1000);
@@ -157,7 +173,7 @@
                             if (!connected) {
                                 reconect();
                             }
-                            Thread.sleep(10*1000);
+                            Thread.sleep(3*1000);
                         } catch (Exception e) {
 
                         }
@@ -166,6 +182,39 @@
             });
         }
     }
+
+    /**
+     * 鍒濆鍖栭噸鏂板績璺崇嚎绋�
+     */
+    private void initHeartbeat() {
+        if (heartbeatThread == null) {
+            heartbeatThread = ThreadToolUtils.getInstance().newFixedThreadPool(1);
+            heartbeatThread.execute(new Runnable() {
+                @Override
+                public void run() {
+                    while (true) {
+                        try {
+                            //10绉�
+                            if (connected && 10 * 1000 < (System.currentTimeMillis() - time)) {
+                                time = System.currentTimeMillis();
+                                //蹇冭烦妫�娴�
+                                try {
+                                    if (iHeartbeat != null)
+                                        iHeartbeat.heartbeat();
+                                } catch (Exception e) {
+                                }
+                            }
+                            Thread.sleep(1000);
+                        } catch (Exception e) {
+
+                        }
+                    }
+                }
+            });
+        }
+    }
+
+
     /**
      * 閲嶆柊杩炴帴
      */
diff --git a/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/IHeartbeat.java b/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/IHeartbeat.java
new file mode 100644
index 0000000..a86a092
--- /dev/null
+++ b/HDLSDK/hdl-socket/src/main/java/com/hdl/sdk/socket/client/IHeartbeat.java
@@ -0,0 +1,8 @@
+package com.hdl.sdk.socket.client;
+
+/**
+ * Created by hxb on 2022/2/16.
+ */
+public interface IHeartbeat {
+    void heartbeat();
+}
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 db3bbcc..9bc8781 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
@@ -17,6 +17,7 @@
 import java.net.InetSocketAddress;
 import java.net.Socket;
 import java.net.SocketAddress;
+import java.net.StandardSocketOptions;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -75,7 +76,7 @@
         mSocket.connect(new InetSocketAddress(ip, port), 3 * 1000);
         mSocket.setTcpNoDelay(true);
         mSocket.setReuseAddress(true);
-        mSocket.setKeepAlive(true);
+//        mSocket.setKeepAlive(true);
         mSocket.setSoTimeout(20 * 1000);
 
         tcpClientList.add(this);
@@ -117,7 +118,6 @@
                 if (handleMessage != null) {
                     byte []bytes = new byte[len];
                     System.arraycopy(readBuffer,0,bytes,0,len);
-                    LogUtils.i("鏀跺埌TCP鏁版嵁",new String(bytes));
                     //瀹屾暣鐨勬暟鎹墠鍥炶皟
                     handleMessage.read(bytes);
                 }
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 2033551..c5c8f1e 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
@@ -72,6 +72,25 @@
         removeAllTopicsListener();
     }
 
+    void initDeviceInfo()
+    {
+        AuthenticateRequest.AuthenticateDeviceInfoBean infoBean = new AuthenticateRequest.AuthenticateDeviceInfoBean();
+        infoBean.setDeviceMAC("123456789");
+        infoBean.setIPMAC("12345678900");
+        infoBean.setDeviceName("闊充箰鎾斁鍣�");//璁惧鍚嶅瓧
+        infoBean.setDeviceModel("MCLog.431");//璁惧鍨嬪彿
+        infoBean.setAccessMode("WIFI");
+        infoBean.setIPGateway("192.168.88.1");
+        infoBean.setIPAddress("192.168.88.100");
+        infoBean.setGateway_type("music.standard");
+        infoBean.setHw_version("HW2.0");
+        infoBean.setFw_version("Fw1.0");
+        infoBean.setOID("010105000000FE08");
+        infoBean.setSid("010105000000FE08110100000000");
+        HDLLinkConfig.getInstance().setDeviceInfoBean(infoBean);
+    }
+
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -82,7 +101,7 @@
         rv.setLayoutManager(new LinearLayoutManager(this));
 
         checkIfCertified();
-
+        initDeviceInfo();
         registerAllTopicsListener();
 
         ActivityResultLauncher<String[]> launcher = registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), new ActivityResultCallback<Map<String, Boolean>>() {
@@ -262,7 +281,7 @@
         String macStr = "AA000000000000BB";//璁惧鍞竴MAC鍦板潃
         String secret = "87ae414b7a853f65";//閫氳繃spk鍜宮ac鎻愪氦浜戠璁よ瘉鍚庡垎閰嶇殑secret
 
-        //姝e紡鏈嶅姟鍣�
+//        //姝e紡鏈嶅姟鍣�
 //        String spkStr = "screen.mirror";//浜у搧spk
 //        String macStr = "AA000000000000AC";//璁惧鍞竴MAC鍦板潃
 //        String secret = "ee62124c151b737c";//閫氳繃spk鍜宮ac鎻愪氦浜戠璁よ瘉鍚庡垎閰嶇殑secret
@@ -270,6 +289,7 @@
         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();
@@ -281,23 +301,8 @@
         authbean.setSpk(spkStr);
         authbean.setMACKey(mac_key);
         authbean.setRequest(requestBean);
-
-        //2.璁剧疆璁惧淇℃伅
-        AuthenticateRequest.AuthenticateDeviceInfoBean infoBean = new AuthenticateRequest.AuthenticateDeviceInfoBean();
-        infoBean.setDeviceMAC(macStr);
-        infoBean.setIPMAC(macStr);
-        infoBean.setDeviceName("绾㈠瀹�");//璁惧鍚嶅瓧
-        infoBean.setDeviceModel("HDL");//
-        infoBean.setAccessMode("WIFI");
-        infoBean.setIPGateway("192.168.88.1");
-        infoBean.setIPAddress(IpUtils.getIP(this));
-
-        infoBean.setOID("010105000000FE08");
-        infoBean.setSid("010105000000FE08110100000000");
-//        infoBean.set
-        AuthenticateRequest.VersionBean[] versionBeans = new AuthenticateRequest.VersionBean[]{new AuthenticateRequest.VersionBean("FW", versionString), new AuthenticateRequest.VersionBean("HW", "1956F")};
-        infoBean.setVersions(versionBeans);
-        AuthenticateRequest request = new AuthenticateRequest(IdUtils.getUUId(), time, infoBean, 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) {

--
Gitblit v1.8.0