From d8bf4f4d66715f002d024cae92862c1d83daa425 Mon Sep 17 00:00:00 2001
From: hxb <hxb@hdlchina.com.cn>
Date: 星期日, 12 十二月 2021 22:06:35 +0800
Subject: [PATCH] 更改了udp的机制

---
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java |  105 +++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 71 insertions(+), 34 deletions(-)

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 46757ec..c823c46 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
@@ -1,6 +1,5 @@
 package com.hdl.sdk.connect.socket;
 
-import android.net.ipsec.ike.TunnelModeChildSessionParams;
 import android.text.TextUtils;
 
 import com.google.gson.Gson;
@@ -30,15 +29,13 @@
 import com.hdl.sdk.connect.bean.LinkResponse;
 import com.hdl.sdk.connect.protocol.LinkMessageDecoder;
 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.UdpClient;
 import com.hdl.sdk.socket.codec.MessagePipeLine;
-import com.hdl.sdk.socket.listener.SendListener;
+import com.hdl.sdk.socket.udp.UdpSocketBoot;
+import com.hdl.sdk.socket.udp.UdpSocketOptions;
 
-import java.io.UnsupportedEncodingException;
+import java.net.InetSocketAddress;
 import java.util.List;
-import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
 
@@ -47,7 +44,7 @@
 /**
  * Created by jlchen on 11/11/21.
  *
- * @Description : HDLAuthSocket
+ * @Description : HDLAuthSocket 鐢变簬鍓嶆湡宸茬粡鍛藉悕濂斤紝涓嶅仛鏇存敼锛屽彲鐢ㄤ綔Udp鏈嶅姟绔娇鐢�
  */
 public class HDLAuthSocket {
     private static final String TAG = "HDLAuth";
@@ -55,7 +52,10 @@
      * udp榛樿绔彛
      */
     private static final int UDP_PORT = 8585;
-    private static SocketBoot updBoot;
+    /**
+     * 鍥犱负鑰冭檻鍒颁娇鐢ㄤ竴涓鍙o紝瑕佹敮鎸佹帴鏀跺缃戝叧鐨勬暟鎹紝鎵�浠ュ彧鍏佽浣跨敤涓�涓�
+     */
+    private static UdpSocketBoot udpSocketBoot;
     //    private EventListener authEvent;
     //鎼滅储缃戝叧
     private EventListener searchGatewayEvent;
@@ -71,6 +71,7 @@
 
     private HDLAuthSocket() {
         initSearchGatewayEvent();
+        initListenerGatewayEvent();
     }
 
 //    public interface CallBack extends BaseCallBack {
@@ -87,30 +88,39 @@
             synchronized (HDLLinkConfig.class) {
                 if (instance == null) {
                     instance = new HDLAuthSocket();
+                    //1.鍚姩Socket 寮�鍚洃鍚�
+                    instance.getUdpBoot();
                 }
             }
         }
         return instance;
     }
 
-    private SocketOptions getUdpOptions() {
-        final SocketOptions options = new SocketOptions();
+    private UdpSocketOptions getUdpOptions() {
+        final UdpSocketOptions options = new UdpSocketOptions();
         final MessagePipeLine pipeLine = new MessagePipeLine();
         pipeLine.add(new LinkMessageDecoder());
         pipeLine.add(new LinkMessageEncoder());
         options.setHandleMessage(pipeLine);
-        options.setHeartbeatTimeInterval(10*1000L);
-        options.setHeartbeatData("UDP");
-        options.setEnabledHeartbeat(true);//鏄惁寮�鍚績璺冲寘鍙戦�佹娴�
         return options;
     }
 
-    private SocketBoot getUdpBoot(String ip) {
-        if (updBoot == null) {
-            updBoot = UdpClient.init(ip, UDP_PORT, getUdpOptions());
-            updBoot.connect();
+
+    /**
+     * 鑾峰彇褰撳墠udp瀵硅薄锛屽鏋滀笉瀛樺湪灏卞垱寤�
+     * @return 杩斿洖褰撳墠瀵硅薄
+     */
+    private UdpSocketBoot getUdpBoot() {
+        try {
+            if (udpSocketBoot == null) {
+                udpSocketBoot = UdpClient.init(UDP_PORT, getUdpOptions());
+                udpSocketBoot.bind();
+            }
+        } catch (Exception e) {
+            return null;
         }
-        return updBoot;
+
+        return udpSocketBoot;
     }
 
     /**
@@ -121,8 +131,6 @@
      */
     public void startAuthenticateRequest(AuthenticateRequest request, HDLLinkCallBack callBack) {
         HDLLinkConfig.getInstance().clearConfig();
-        //1.鍚姩Socket 寮�鍚洃鍚�
-        getUdpBoot(IpUtils.getBroadcastAddress());
         //2.鏋勫缓鐩戝惉Listener
 //        authEvent =
         //3.鐩戝惉缃戝叧骞挎挱鐨勫叆缃戞寚浠�
@@ -168,7 +176,7 @@
         String requestStr = gs.toJson(request);
         LinkRequest message = new LinkRequest(topic, requestStr);
 
-        HdlSocketHelper.send(getUdpBoot(ip), message, new HdlSocketHelper.HdlSocketListener() {
+        HdlSocketHelper.send(getUdpBoot(), InetSocketAddress.createUnresolved(ip,UDP_PORT), message, new HdlSocketHelper.HdlSocketListener() {
             @Override
             public void onSucceed(Object msg) {
                 if (callBack == null) return;
@@ -284,7 +292,7 @@
      * @param callBack 鍥炶皟
      */
     public void searchGatewayMulticast(SearchGatewayCallBack callBack) {
-        searchGateway(HDLLinkConfig.getInstance().getGatewayId(), UDP_GROUP_IP, callBack);
+        searchGateway(HDLLinkConfig.getInstance().getGatewayId(),  InetSocketAddress.createUnresolved(UDP_GROUP_IP,UDP_PORT), callBack);
     }
 
     /**
@@ -294,7 +302,7 @@
      */
     public void searchGatewayBroadcast(SearchGatewayCallBack callBack) {
         String ip = IpUtils.getBroadcastAddress();
-        searchGateway(HDLLinkConfig.getInstance().getGatewayId(), ip, callBack);
+        searchGateway(HDLLinkConfig.getInstance().getGatewayId(),  InetSocketAddress.createUnresolved(ip,UDP_PORT), callBack);
     }
 
 
@@ -312,7 +320,7 @@
                 GsonConvert.getGson().toJson(data));
 
         String ip = IpUtils.getBroadcastAddress();
-        HdlSocketHelper.send(getUdpBoot(ip), message, new HdlSocketHelper.HdlSocketListener() {
+        HdlSocketHelper.send(getUdpBoot(), InetSocketAddress.createUnresolved(ip,UDP_PORT), message, new HdlSocketHelper.HdlSocketListener() {
             @Override
             public void onSucceed(Object msg) {
                 if (callBack == null) return;
@@ -345,7 +353,7 @@
         }
         LinkRequest message = new LinkRequest(topic, bodyStr);
         String ip = IpUtils.getBroadcastAddress();
-        HdlSocketHelper.send(getUdpBoot(ip), message, new HdlSocketHelper.HdlSocketListener() {
+        HdlSocketHelper.send(getUdpBoot(), InetSocketAddress.createUnresolved(ip,UDP_PORT), message, new HdlSocketHelper.HdlSocketListener() {
                     @Override
                     public void onSucceed(Object msg) {
                         if (callBack == null) return;
@@ -374,7 +382,7 @@
         }
         LinkRequest message = new LinkRequest(topic, bodyStr);
         String ip = IpUtils.getBroadcastAddress();
-        getUdpBoot(ip).sendMsg(message.getSendBytes());
+        getUdpBoot().sendMsg( InetSocketAddress.createUnresolved(ip,UDP_PORT),message.getSendBytes());
     }
 
     private GatewaySearchBean getGatewaySearchBean(Object msg) {
@@ -433,7 +441,7 @@
     private SearchGatewayCallBack mSearchGatewayCallBack;
 
     private void initSearchGatewayEvent() {
-        LogUtils.i("鎼滅储缃戝叧--", "initSearchGatewayEvent");
+        LogUtils.i("鎼滅储缃戝叧", "initSearchGatewayEvent");
         searchGatewayEvent = new EventListener() {
             @Override
             public void onMessage(Object msg) {
@@ -441,7 +449,6 @@
                     if (msg instanceof LinkResponse) {
                         LinkResponse linkResponse = (LinkResponse) msg;
                         String data = linkResponse.getData();
-                        LogUtils.i("鎼滅储鍒扮綉鍏�->" + data);
                         if (!TextUtils.isEmpty(data)) {
                             final BaseLocalResponse<GatewaySearchBean> response = GsonConvert.getGson().fromJson(data, new TypeToken<BaseLocalResponse<GatewaySearchBean>>() {
                             }.getType());
@@ -467,14 +474,44 @@
         };
     }
 
+    private void initListenerGatewayEvent() {
+        LogUtils.i( "鍒濆鍖栨案涔呯洃鍚綉鍏冲箍鎾簨浠讹紝涓嶇敤绉婚櫎姝や簨浠�");
+        EventListener  gatewayEvent = new EventListener() {
+            @Override
+            public void onMessage(Object msg) {
+                try {
+                    if (msg instanceof LinkResponse) {
+                        LinkResponse linkResponse = (LinkResponse) msg;
+                        String data = linkResponse.getData();
+                        LogUtils.i("鎺ユ敹鍒扮綉鍏充俊鎭細" + data);
+                        if (!TextUtils.isEmpty(data)) {
+                            final BaseLocalResponse<GatewaySearchBean> response = GsonConvert.getGson().fromJson(data, new TypeToken<BaseLocalResponse<GatewaySearchBean>>() {
+                            }.getType());
+                            GatewaySearchBean searchBean = response.getObjects();
+                            if (searchBean != null && !TextUtils.isEmpty(searchBean.getGatewayId())) {
+                                if (searchBean.getGatewayId().equals(HDLLinkConfig.getInstance().getGatewayId())) {
+                                    HDLLinkConfig.getInstance().setCurrentGateway(searchBean);//璁剧疆褰撳墠缃戝叧
+                                    HDLLinkConfig.getInstance().setLocalEncrypt(searchBean.isLocalEncrypt());//璁剧疆鏄惁鍔犲瘑
+                                }
+                            }
+                        }
+                    }
+                } catch (Exception e) {
+
+                }
+            }
+        };
+        EventDispatcher.getInstance().registerIo(TopicConstant.GATEWAY_SEARCH_REPLY, gatewayEvent);
+    }
+
     /**
      * 鎼滅储鎸囧畾缃戝叧鏄惁鍦ㄧ嚎锛屾悳绱㈠埌鍒欒繑鍥炴寚瀹氱殑缃戝叧瀵硅薄
      *
      * @param gatewayId 缃戝叧id
-     * @param ip        鎺ユ敹鐩爣鐨刬p鍦板潃
+     * @param desInetSocketAddress        鐩爣鐨勫湴鍧�
      * @param callBack  鍥炶皟
      */
-    public void searchGateway(String gatewayId, String ip, SearchGatewayCallBack callBack) {
+    public void searchGateway(String gatewayId, InetSocketAddress desInetSocketAddress, SearchGatewayCallBack callBack) {
         this.searchGatewayId = gatewayId;
         this.mSearchGatewayCallBack = callBack;
         //閲嶇疆鍙傛暟
@@ -495,8 +532,8 @@
                     try {
                         //鎼滅储缃戝叧
                         searchGatewayCount.set(searchGatewayCount.get() + 1);
-                        LogUtils.i("鎼滅储缃戝叧--", "鎼滅储缃戝叧绗�" + searchGatewayCount.get() + "娆�");
-                        getUdpBoot(ip).sendMsg(message.getSendBytes());
+                        LogUtils.i("鎼滅储缃戝叧", "鎼滅储缃戝叧绗�" + searchGatewayCount.get() + "娆�");
+                        getUdpBoot().sendMsg(desInetSocketAddress,message.getSendBytes());
                         Thread.sleep(1000L);
                     } catch (InterruptedException e) {
                         e.printStackTrace();
@@ -517,7 +554,7 @@
      * 娉ㄥ唽鎼滅储缃戝叧鐩戝惉
      */
     private void registerSearchGatewayEvent() {
-        LogUtils.i("鎼滅储缃戝叧--", "娉ㄥ唽鎼滅储缃戝叧鐩戝惉");
+        LogUtils.i("鎼滅储缃戝叧", "娉ㄥ唽鎼滅储缃戝叧鐩戝惉");
         EventDispatcher.getInstance().registerIo(TopicConstant.GATEWAY_SEARCH_REPLY, searchGatewayEvent);
     }
 
@@ -525,7 +562,7 @@
      * 绉婚櫎鎼滅储缃戝叧鐩戝惉
      */
     private void removeSearchGatewayEvent() {
-        LogUtils.i("鎼滅储缃戝叧--", "绉婚櫎鎼滅储缃戝叧鐩戝惉");
+        LogUtils.i("鎼滅储缃戝叧", "绉婚櫎鎼滅储缃戝叧鐩戝惉");
         EventDispatcher.getInstance().remove(TopicConstant.GATEWAY_SEARCH_REPLY, searchGatewayEvent);
     }
 

--
Gitblit v1.8.0