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-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java |  181 +++++++++++++++++++++++++++++++++-----------
 1 files changed, 134 insertions(+), 47 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 c823c46..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
@@ -11,6 +11,7 @@
 import com.hdl.sdk.common.exception.HDLLinkException;
 import com.hdl.sdk.common.utils.LogUtils;
 import com.hdl.sdk.common.utils.ThreadToolUtils;
+import com.hdl.sdk.connect.HDLLink;
 import com.hdl.sdk.connect.bean.response.AuthenticateResponse;
 import com.hdl.sdk.connect.bean.response.NetworkAccessBroadcastResponse;
 import com.hdl.sdk.connect.callback.BaseCallBack;
@@ -70,8 +71,8 @@
     private volatile static HDLAuthSocket instance;
 
     private HDLAuthSocket() {
-        initSearchGatewayEvent();
         initListenerGatewayEvent();
+        initSearchGatewayEvent();
     }
 
 //    public interface CallBack extends BaseCallBack {
@@ -88,8 +89,6 @@
             synchronized (HDLLinkConfig.class) {
                 if (instance == null) {
                     instance = new HDLAuthSocket();
-                    //1.鍚姩Socket 寮�鍚洃鍚�
-                    instance.getUdpBoot();
                 }
             }
         }
@@ -108,6 +107,7 @@
 
     /**
      * 鑾峰彇褰撳墠udp瀵硅薄锛屽鏋滀笉瀛樺湪灏卞垱寤�
+     *
      * @return 杩斿洖褰撳墠瀵硅薄
      */
     private UdpSocketBoot getUdpBoot() {
@@ -117,7 +117,7 @@
                 udpSocketBoot.bind();
             }
         } catch (Exception e) {
-            return null;
+//            return null;
         }
 
         return udpSocketBoot;
@@ -131,6 +131,8 @@
      */
     public void startAuthenticateRequest(AuthenticateRequest request, HDLLinkCallBack callBack) {
         HDLLinkConfig.getInstance().clearConfig();
+        //1.鍚姩Socket 寮�鍚洃鍚�
+        getUdpBoot();
         //2.鏋勫缓鐩戝惉Listener
 //        authEvent =
         //3.鐩戝惉缃戝叧骞挎挱鐨勫叆缃戞寚浠�
@@ -139,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");
+
             }
         });
     }
@@ -176,30 +178,39 @@
         String requestStr = gs.toJson(request);
         LinkRequest message = new LinkRequest(topic, requestStr);
 
-        HdlSocketHelper.send(getUdpBoot(), InetSocketAddress.createUnresolved(ip,UDP_PORT), message, new HdlSocketHelper.HdlSocketListener() {
+        HdlSocketHelper.sendUdp(getUdpBoot(), ip, UDP_PORT, message, new HdlSocketHelper.HdlSocketListener() {
             @Override
             public void onSucceed(Object msg) {
                 if (callBack == null) return;
                 try {
                     AuthenticateResponse bean = getAuthenticateResponseBean(msg);
                     if (bean != null) {
-                        String localSecret = "";
-                        String gatewayId = "";
-                        String ipAddress = "";
-                        if(bean.getAuth() != null) {
-                            localSecret = bean.getAuth().getLocalSecret();
-                        }
-                        if(bean.getObjects() != null){
-                             gatewayId = bean.getObjects().getGatewayID();
-                             ipAddress = bean.getObjects().getIPAddress();
-                        }
-                        //鍒ゆ柇缃戝叧鏄惁宸茬粡娉ㄥ唽鍒颁簯绔�
-                        if (TextUtils.isEmpty(localSecret) || TextUtils.isEmpty(gatewayId)) {
-                            //璁よ瘉澶辫触锛岀綉鍏虫湭娉ㄥ唽鍒颁簯绔�
-                            callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_AUTH_ERROR_GATEWAY_NOT_REGISTERED));
-                        } else {
-                            HDLLinkConfig.getInstance().saveConfig(localSecret, gatewayId, ipAddress);
-                            callBack.onSuccess("璁よ瘉鎴愬姛");
+                        if (bean.getCode().equals("200")) {
+                            String localSecret = "";
+                            String gatewayId = "";
+                            String ipAddress = "";
+                            if (bean.getAuth() != null) {
+                                localSecret = bean.getAuth().getLocalSecret();
+                            }
+                            if (bean.getObjects() != null) {
+                                gatewayId = bean.getObjects().getGatewayID();
+                                ipAddress = bean.getObjects().getIPAddress();
+                            }
+                            //鍒ゆ柇缃戝叧鏄惁宸茬粡娉ㄥ唽鍒颁簯绔�
+                            if (TextUtils.isEmpty(localSecret) || TextUtils.isEmpty(gatewayId)) {
+                                //璁よ瘉澶辫触锛岀綉鍏虫湭娉ㄥ唽鍒颁簯绔�
+                                callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_AUTH_ERROR_GATEWAY_NOT_REGISTERED));
+                            } else {
+                                HDLLinkConfig.getInstance().saveConfig(localSecret, gatewayId, ipAddress);
+                                callBack.onSuccess("璁よ瘉鎴愬姛");
+                            }
+                        } else if (bean.getCode().equals("14013")){
+                            //璁よ瘉澶辫触锛岃MAC瀵瑰簲鐨勮澶囧瘑閽ヤ笉瀛樺湪
+                            callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_AUTH_MAC_KEY_ERROR_));
+                        } else{
+                            //璁よ瘉澶辫触锛岄敊璇爜锛�
+                            LogUtils.e("璁よ瘉澶辫触锛岄敊璇爜锛�" + bean.getCode());
+                            callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_AUTH_ERROR));
                         }
                     } else {
                         callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_DATA_ERROR));
@@ -292,7 +303,7 @@
      * @param callBack 鍥炶皟
      */
     public void searchGatewayMulticast(SearchGatewayCallBack callBack) {
-        searchGateway(HDLLinkConfig.getInstance().getGatewayId(),  InetSocketAddress.createUnresolved(UDP_GROUP_IP,UDP_PORT), callBack);
+        searchGateway(HDLLinkConfig.getInstance().getGatewayId(), UDP_GROUP_IP, UDP_PORT, callBack);
     }
 
     /**
@@ -301,8 +312,14 @@
      * @param callBack 鍥炶皟
      */
     public void searchGatewayBroadcast(SearchGatewayCallBack callBack) {
+        if (!HDLLinkConfig.getInstance().checkIfCertified()) {
+            if (callBack != null) {
+                callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_UNAUTHORIZED_ERROR));
+            }
+            return;
+        }
         String ip = IpUtils.getBroadcastAddress();
-        searchGateway(HDLLinkConfig.getInstance().getGatewayId(),  InetSocketAddress.createUnresolved(ip,UDP_PORT), callBack);
+        searchGateway(HDLLinkConfig.getInstance().getGatewayId(), ip, UDP_PORT, callBack);
     }
 
 
@@ -320,7 +337,7 @@
                 GsonConvert.getGson().toJson(data));
 
         String ip = IpUtils.getBroadcastAddress();
-        HdlSocketHelper.send(getUdpBoot(), InetSocketAddress.createUnresolved(ip,UDP_PORT), message, new HdlSocketHelper.HdlSocketListener() {
+        HdlSocketHelper.sendUdp(getUdpBoot(), ip, UDP_PORT, message, new HdlSocketHelper.HdlSocketListener() {
             @Override
             public void onSucceed(Object msg) {
                 if (callBack == null) return;
@@ -342,18 +359,30 @@
      *
      * @param topic    鍙戦�佹暟鎹�
      * @param bodyStr  鍥炲鐨勪富棰�
+     * @param broadcast 鏄惁瑕佸箍鎾�
      * @param callBack 鍥炶皟
      */
-    public void udpSendMsg(String topic, String bodyStr, HDLLinkResponseCallBack callBack) {
+    public void udpSendMsg(String topic, String bodyStr,boolean broadcast,  HDLLinkResponseCallBack callBack) {
         if (TextUtils.isEmpty(topic) || TextUtils.isEmpty(bodyStr)) {
             if (callBack != null) {
                 callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_DATA_NULL_ERROR));
             }
             return;
         }
+
+        if (!HDLLinkConfig.getInstance().checkIfCertified()) {
+            if (callBack != null) {
+                callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_UNAUTHORIZED_ERROR));
+            }
+            return;
+        }
+
         LinkRequest message = new LinkRequest(topic, bodyStr);
-        String ip = IpUtils.getBroadcastAddress();
-        HdlSocketHelper.send(getUdpBoot(), InetSocketAddress.createUnresolved(ip,UDP_PORT), message, new HdlSocketHelper.HdlSocketListener() {
+        String ip = HDLLinkConfig.getInstance().getIpAddress();
+        if(broadcast) {
+            ip = IpUtils.getBroadcastAddress();
+        }
+        HdlSocketHelper.sendUdp(getUdpBoot(), ip, UDP_PORT, message, new HdlSocketHelper.HdlSocketListener() {
                     @Override
                     public void onSucceed(Object msg) {
                         if (callBack == null) return;
@@ -374,15 +403,23 @@
      *
      * @param topic   鍙戦�佹暟鎹�
      * @param bodyStr 鍥炲鐨勪富棰�
+     * @param broadcast 鏄惁骞挎挱
      */
-    public void udpSendMsg(String topic, String bodyStr) {
+    public void udpSendMsg(String topic, String bodyStr,boolean broadcast) {
         if (TextUtils.isEmpty(topic) || TextUtils.isEmpty(bodyStr)) {
             LogUtils.e("udpSendMsg", "鍙傛暟涓嶈兘涓虹┖");
             return;
         }
+        if (!HDLLinkConfig.getInstance().checkIfCertified()) {
+            LogUtils.e("udpSendMsg", "鏈璇侊紝璇峰厛璁よ瘉");
+            return;
+        }
         LinkRequest message = new LinkRequest(topic, bodyStr);
-        String ip = IpUtils.getBroadcastAddress();
-        getUdpBoot().sendMsg( InetSocketAddress.createUnresolved(ip,UDP_PORT),message.getSendBytes());
+        String ip = HDLLinkConfig.getInstance().getIpAddress();
+        if(broadcast) {
+            ip = IpUtils.getBroadcastAddress();
+        }
+        HdlSocketHelper.sendUdpOne(getUdpBoot(), ip, UDP_PORT, message);
     }
 
     private GatewaySearchBean getGatewaySearchBean(Object msg) {
@@ -475,8 +512,8 @@
     }
 
     private void initListenerGatewayEvent() {
-        LogUtils.i( "鍒濆鍖栨案涔呯洃鍚綉鍏冲箍鎾簨浠讹紝涓嶇敤绉婚櫎姝や簨浠�");
-        EventListener  gatewayEvent = new EventListener() {
+        LogUtils.i("鍒濆鍖栨案涔呯洃鍚綉鍏冲箍鎾簨浠讹紝涓嶇敤绉婚櫎姝や簨浠�");
+        EventListener gatewayEvent = new EventListener() {
             @Override
             public void onMessage(Object msg) {
                 try {
@@ -487,11 +524,15 @@
                         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());//璁剧疆鏄惁鍔犲瘑
+                            GatewaySearchBean gateway = response.getObjects();
+                            if (gateway != null && !TextUtils.isEmpty(gateway.getGatewayId())) {
+                                //涓荤綉鍏冲苟涓旀槸褰撳墠缁戝畾鐨勭綉鍏�
+                                if ("true".equals(gateway.getMaster().toLowerCase()) && gateway.getGatewayId().equals(HDLLinkConfig.getInstance().getGatewayId())) {
+                                    HDLLinkConfig.getInstance().setCurrentGateway(gateway);//璁剧疆褰撳墠缃戝叧
+                                    HDLLinkConfig.getInstance().setLocalEncrypt(gateway.isLocalEncrypt());//璁剧疆鏄惁鍔犲瘑
+                                    HDLLinkConfig.getInstance().setIpAddress(gateway.getIp_address());
+                                    //鏇存柊褰撳墠缃戝叧鐨勪俊鎭�
+                                    HDLLinkConfig.getInstance().reSaveConfig();
                                 }
                             }
                         }
@@ -508,10 +549,11 @@
      * 鎼滅储鎸囧畾缃戝叧鏄惁鍦ㄧ嚎锛屾悳绱㈠埌鍒欒繑鍥炴寚瀹氱殑缃戝叧瀵硅薄
      *
      * @param gatewayId 缃戝叧id
-     * @param desInetSocketAddress        鐩爣鐨勫湴鍧�
+     * @param ipAddress 鐩爣鐨処P鍦板潃
+     * @param port      鐩爣鐨勭鍙�
      * @param callBack  鍥炶皟
      */
-    public void searchGateway(String gatewayId, InetSocketAddress desInetSocketAddress, SearchGatewayCallBack callBack) {
+    public void searchGateway(String gatewayId, String ipAddress, int port, SearchGatewayCallBack callBack) {
         this.searchGatewayId = gatewayId;
         this.mSearchGatewayCallBack = callBack;
         //閲嶇疆鍙傛暟
@@ -533,7 +575,7 @@
                         //鎼滅储缃戝叧
                         searchGatewayCount.set(searchGatewayCount.get() + 1);
                         LogUtils.i("鎼滅储缃戝叧", "鎼滅储缃戝叧绗�" + searchGatewayCount.get() + "娆�");
-                        getUdpBoot().sendMsg(desInetSocketAddress,message.getSendBytes());
+                        getUdpBoot().sendMsg(ipAddress, port, message.getSendBytes());
                         Thread.sleep(1000L);
                     } catch (InterruptedException e) {
                         e.printStackTrace();
@@ -543,12 +585,12 @@
                 if (!isSearchGatewaySuccess.get()) {
                     //鎼滅储10娆★紝鎸囧畾缃戝叧閮芥病鍥炲锛屽洖璋冭秴鏃�
                     callBackSearchGatewayTimeout();
-                    LogUtils.e("鎼滅储缃戝叧--", "鎼滅储10娆★紝鎸囧畾缃戝叧閮芥病鍥炲锛屽洖璋冭秴鏃�");
+                    LogUtils.e("鎼滅储缃戝叧", "鎼滅储10娆★紝鎸囧畾缃戝叧閮芥病鍥炲锛屽洖璋冭秴鏃�");
                 }
             }
         }).start();
-
     }
+
 
     /**
      * 娉ㄥ唽鎼滅储缃戝叧鐩戝惉
@@ -581,4 +623,49 @@
         });
     }
 
+
+    /**
+     * 鎼滅储鍦ㄧ嚎鎵�鏈夌殑缃戝叧锛屽寘鎷綋鍓嶄綇瀹呯殑鍙婃病鏈夌粦瀹氳繃鍏跺畠浣忓畢鐨勭綉鍏�
+     *
+     * @param ipAddress 鐩爣鐨処P鍦板潃
+     * @param port      鐩爣鐨勭鍙�
+     * @param callBack  鍥炶皟
+     */
+    public void searchGateway(String ipAddress, int port, SearchGatewayCallBack callBack) {
+//        this.searchGatewayId = gatewayId;
+//        this.mSearchGatewayCallBack = callBack;
+//        //閲嶇疆鍙傛暟
+//        searchGatewayCount.set(0);
+//        isSearchGatewaySuccess.set(false);
+        String time = String.valueOf(System.currentTimeMillis());
+        JsonObject jsonObject = new JsonObject();
+        jsonObject.addProperty("id", IdUtils.getUUId());
+        jsonObject.addProperty("time_stamp", time);
+        LinkRequest message = new LinkRequest(TopicConstant.GATEWAY_SEARCH,
+                jsonObject.toString());
+        //娉ㄥ唽鎼滅储缃戝叧鐩戝惉
+        registerSearchGatewayEvent();
+        new Thread(new Runnable() {
+            @Override
+            public void run() {
+                while (searchGatewayCount.get() < 10 && (!isSearchGatewaySuccess.get())) {
+                    try {
+                        //鎼滅储缃戝叧
+                        searchGatewayCount.set(searchGatewayCount.get() + 1);
+                        LogUtils.i("鎼滅储缃戝叧", "鎼滅储缃戝叧绗�" + searchGatewayCount.get() + "娆�");
+                        getUdpBoot().sendMsg(ipAddress, port, message.getSendBytes());
+                        Thread.sleep(1000L);
+                    } catch (InterruptedException e) {
+                        e.printStackTrace();
+                    }
+                }
+
+                if (!isSearchGatewaySuccess.get()) {
+                    //鎼滅储10娆★紝鎸囧畾缃戝叧閮芥病鍥炲锛屽洖璋冭秴鏃�
+                    callBackSearchGatewayTimeout();
+                    LogUtils.e("鎼滅储缃戝叧", "鎼滅储10娆★紝鎸囧畾缃戝叧閮芥病鍥炲锛屽洖璋冭秴鏃�");
+                }
+            }
+        }).start();
+    }
 }

--
Gitblit v1.8.0