From 17b81245f31d032d5eed69c190e42edb1949f46b Mon Sep 17 00:00:00 2001
From: hxb <hxb@hdlchina.com.cn>
Date: 星期二, 12 四月 2022 16:37:39 +0800
Subject: [PATCH] 修复接听后闪退的问题

---
 HDLSDK/hdl-common/build.gradle                                                 |    2 
 HDLSDK/hdl-connect/build.gradle                                                |    2 
 HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/HDLSdk.java                 |    2 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HDLLink.java              |    2 
 HDLSDK/com.hdl.sdk/build.gradle                                                |    2 
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java |    4 
 HDLSDK/hdl-socket/build.gradle                                                 |    2 
 HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/event/EventDispatcher.java  |  213 ++++++++++++++++++++++++++++++++---------------------
 8 files changed, 138 insertions(+), 91 deletions(-)

diff --git a/HDLSDK/com.hdl.sdk/build.gradle b/HDLSDK/com.hdl.sdk/build.gradle
index f8964e7..795f57b 100644
--- a/HDLSDK/com.hdl.sdk/build.gradle
+++ b/HDLSDK/com.hdl.sdk/build.gradle
@@ -9,7 +9,7 @@
         minSdkVersion rootProject.minSdkVersion
         targetSdkVersion rootProject.targetSdkVersion
         versionCode 2
-        versionName "1.0.13"
+        versionName "1.0.15"
     }
     buildTypes {
         debug {
diff --git a/HDLSDK/hdl-common/build.gradle b/HDLSDK/hdl-common/build.gradle
index e589058..f054e96 100644
--- a/HDLSDK/hdl-common/build.gradle
+++ b/HDLSDK/hdl-common/build.gradle
@@ -10,7 +10,7 @@
         targetSdkVersion rootProject.targetSdkVersion
         versionCode 2
 
-        versionName "1.0.13"
+        versionName "1.0.15"
         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 c9ef3ae..de346dd 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
@@ -19,7 +19,7 @@
         return version;
     }
 
-    private String version="1.0.13";
+    private String version="1.0.15";
 
     private HDLSdk() {
     }
diff --git a/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/event/EventDispatcher.java b/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/event/EventDispatcher.java
index 172ed9b..bfb38b3 100644
--- a/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/event/EventDispatcher.java
+++ b/HDLSDK/hdl-common/src/main/java/com/hdl/sdk/common/event/EventDispatcher.java
@@ -30,116 +30,151 @@
 
     private static final ExecutorService ioThread = ThreadToolUtils.getInstance().newFixedThreadPool(3);
 
+
     private EventDispatcher() {
     }
 
-//    private static class SingletonInstance {
-        private static final EventDispatcher instance = new EventDispatcher();
+    //    private static class SingletonInstance {
+    private static final EventDispatcher instance = new EventDispatcher();
 //    }
 
     public static EventDispatcher getInstance() {
         return instance;
     }
 
-    public synchronized void register(Object tag, EventListener listener) {
-        if (!EVENT.containsKey(tag)) {
-            EVENT.put(tag, new ArrayList<>());
+    public void register(Object tag, EventListener listener) {
+        synchronized (this) {
+            try {
+                LogUtils.i("娉ㄥ唽涓婚锛�" + tag);
+                if (tag == null) return;
+                if (!EVENT.containsKey(tag)) {
+                    EVENT.put(tag, new ArrayList<>());
+                }
+                if (listener == null) {
+                    LogUtils.i("鐩戝惉浜嬩欢涓虹┖");
+                    return;
+                }
+                Objects.requireNonNull(EVENT.get(tag)).add(listener);
+                TYPE.put(listener, MAIN_TYPE);
+            } catch (Exception e) {
+                LogUtils.e("register锛�" + e.getMessage());
+            }
         }
-        List<EventListener> events = EVENT.get(tag);
-        if (events != null && !events.contains(listener)) {
-            events.add(listener);
-        }
-        TYPE.put(listener, MAIN_TYPE);
     }
 
-    public synchronized void registerIo(Object tag, EventListener listener) {
-        if (!EVENT.containsKey(tag)) {
-            EVENT.put(tag, new ArrayList<>());
+    public  void registerIo(Object tag, EventListener listener) {
+        synchronized (this) {
+            LogUtils.i("娉ㄥ唽涓婚锛�" + tag);
+            if (tag == null) return;
+            if (!EVENT.containsKey(tag)) {
+                EVENT.put(tag, new ArrayList<>());
+            }
+            try {
+                if (listener == null) {
+                    LogUtils.i("鐩戝惉浜嬩欢涓虹┖");
+                    return;
+                }
+                Objects.requireNonNull(EVENT.get(tag)).add(listener);
+                TYPE.put(listener, IO_TYPE);
+            } catch (Exception e) {
+                LogUtils.e("registerIo锛�" + e.getMessage());
+            }
         }
-        List<EventListener> events = EVENT.get(tag);
-        if (events != null && !events.contains(listener)) {
-            events.add(listener);
-        }
-        TYPE.put(listener, IO_TYPE);
     }
 
-    public synchronized void remove(Object tag) {
-        try {
-
-            ioThread.execute(new Runnable() {
-                @Override
-                public void run() {
-                    try {
-                        if (EVENT.containsKey(tag)) {
-                            List<EventListener> list = EVENT.get(tag);
-                            for (EventListener eventListener : list) {
-                                TYPE.remove(eventListener);
-                            }
-                            EVENT.remove(tag);
+    public  void remove(Object tag) {
+        synchronized (this) {
+            if (tag == null) {
+                return;
+            }
+            try {
+                if (EVENT.containsKey(tag)) {
+                    LogUtils.i("绉婚櫎key锛�" + tag);
+                    List<EventListener> list = EVENT.get(tag);
+                    for (EventListener eventListener : list) {
+                        if (eventListener == null) {
+                            continue;
                         }
-                    } catch (Exception ignored) {
-                        LogUtils.e("绉婚櫎event寮傚父1锛�"+ignored.getMessage());
+                        TYPE.remove(eventListener);
+                    }
+                    EVENT.remove(tag);
+                }
+            } catch (Exception ignored) {
+                LogUtils.e("绉婚櫎event寮傚父1锛�" + ignored.getMessage());
+            }
+        }
+    }
+
+    public  void remove(Object tag, EventListener listener) {
+        synchronized (this) {
+            try {
+                if (tag == null || listener == null) {
+                    return;
+                }
+                if (EVENT.containsKey(tag)) {
+                    LogUtils.i("绉婚櫎key锛�" + tag);
+                    List<EventListener> ev = EVENT.get(tag);
+                    if (ev != null && !ev.isEmpty()) {
+                        TYPE.remove(listener);
+                        ev.remove(listener);
                     }
                 }
-            });
-        }catch (Exception e){
-            LogUtils.e("绉婚櫎event寮傚父2锛�"+e.getMessage());
+            } catch (Exception ignored) {
+                LogUtils.e("绉婚櫎event寮傚父1锛�" + ignored.getMessage());
+            }
         }
     }
-
-    public synchronized void remove(Object tag, EventListener listener) {
-        try {
-            ioThread.execute(new Runnable() {
-                @Override
-                public void run() {
-                    try {
-                        if (EVENT.containsKey(tag)) {
-                            List<EventListener> ev = EVENT.get(tag);
-                            if (ev != null && !ev.isEmpty()) {
-                                TYPE.remove(listener);
-                                ev.remove(listener);
-                            }
-                        }
-                    } catch (Exception ignored) {
-                        LogUtils.e("绉婚櫎event寮傚父1锛�"+ignored.getMessage());
-                    }
-
-                }
-            });
-        }catch (Exception e){
-            LogUtils.e("绉婚櫎event寮傚父2锛�"+e.getMessage());
-        }
-    }
-
 
     public synchronized void post(Object tag, @NonNull Object o) {
-        if (EVENT.containsKey(tag)) {
-            List<EventListener> list = EVENT.get(tag);
-            if (list != null && !list.isEmpty()) {
-                for (EventListener listener : list) {
+        if (tag == null) {
+            LogUtils.i("post tag涓虹┖");
+            return;
+        }
+        try {
+            if (EVENT.containsKey(tag)) {
+                LogUtils.i("post锛�" + tag);
+                List<EventListener> list = EVENT.get(tag);
+                if (list != null && !list.isEmpty()) {
+                    for (EventListener listener : list) {
+                        if (listener == null) {
+                            continue;
+                        }
+                        ThreadToolUtils.getInstance().runOnUiThread(new Runnable() {
+                            @Override
+                            public void run() {
+                                try {
+                                    if (listener != null) {
+                                        listener.onMessage(o);
+                                    }
+                                } catch (Exception e) {
+                                    LogUtils.e("post寮傚父1锛�" + e.getMessage());
+                                }
+                            }
+                        });
+                    }
+                }
+            }
+            //鎵�鏈変富棰樼殑Listener閫氱煡
+            if (ALL_TOPICS_EVENT != null && !ALL_TOPICS_EVENT.isEmpty()) {
+                for (EventListener listener : ALL_TOPICS_EVENT) {
+                    if (listener == null) {
+                        continue;
+                    }
                     ThreadToolUtils.getInstance().runOnUiThread(new Runnable() {
                         @Override
                         public void run() {
-                            if (listener != null) {
-                                listener.onMessage(o);
+                            try {
+                                if (listener != null) {
+                                    listener.onMessage(o);
+                                }
+                            } catch (Exception e) {
                             }
                         }
                     });
                 }
             }
-        }
-        //鎵�鏈変富棰樼殑Listener閫氱煡
-        if (ALL_TOPICS_EVENT != null && !ALL_TOPICS_EVENT.isEmpty()) {
-            for (EventListener listener : ALL_TOPICS_EVENT) {
-                ThreadToolUtils.getInstance().runOnUiThread(new Runnable() {
-                    @Override
-                    public void run() {
-                        if (listener != null) {
-                            listener.onMessage(o);
-                        }
-                    }
-                });
-            }
+        }catch (Exception e){
+            LogUtils.e("post寮傚父2锛�" + e.getMessage());
         }
     }
 
@@ -148,10 +183,17 @@
      * @param listener
      */
     public synchronized void registerAllTopicsListener(EventListener listener) {
-        if (ALL_TOPICS_EVENT != null && !ALL_TOPICS_EVENT.contains(listener)) {
-            ALL_TOPICS_EVENT.add(listener);
+        if(listener==null){
+            return;
         }
-        TYPE.put(listener, MAIN_TYPE);
+        try {
+            if (ALL_TOPICS_EVENT != null && !ALL_TOPICS_EVENT.contains(listener)) {
+                ALL_TOPICS_EVENT.add(listener);
+            }
+            TYPE.put(listener, MAIN_TYPE);
+        }catch (Exception e){
+            LogUtils.e("registerAllTopicsListener锛�" + e.getMessage());
+        }
     }
 
     /**
@@ -164,6 +206,9 @@
                 @Override
                 public void run() {
                     try {
+                        if(listener==null){
+                            return;
+                        }
                         if (ALL_TOPICS_EVENT != null && !ALL_TOPICS_EVENT.isEmpty()) {
                             TYPE.remove(listener);
                             ALL_TOPICS_EVENT.remove(listener);
@@ -189,6 +234,4 @@
         clear();
         ioThread.shutdownNow();
     }
-
-
 }
diff --git a/HDLSDK/hdl-connect/build.gradle b/HDLSDK/hdl-connect/build.gradle
index 181dab8..79e077a 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.13"
+        versionName "1.0.15"
 
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
         consumerProguardFiles "consumer-rules.pro"
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 d26a345..e5e993b 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
@@ -1,5 +1,6 @@
 package com.hdl.sdk.connect;
 
+import com.hdl.sdk.common.utils.LogUtils;
 import com.hdl.sdk.common.utils.ThreadToolUtils;
 import com.hdl.sdk.connect.bean.request.DeviceControlRequest;
 import com.hdl.sdk.connect.callback.HDLLinkCallBack;
@@ -73,6 +74,7 @@
      * @param callBack 缁撴灉鍥炶皟
      */
     public void startAuthenticateRequest(AuthenticateRequest request, HDLLinkCallBack callBack) {
+        LogUtils.i("鍙戦�佽璇佽姹�");
         HDLAuthSocket.getInstance().startAuthenticateRequest(request,callBack);
     }
 
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 168fb90..0016adc 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
@@ -117,7 +117,7 @@
                 udpSocketBoot.bind();
             }
         } catch (Exception e) {
-//            return null;
+              LogUtils.e("鍒濆鍖朣ocket udp寮傚父"+e.getMessage());
         }
 
         return udpSocketBoot;
@@ -136,9 +136,11 @@
         //2.鏋勫缓鐩戝惉Listener
 //        authEvent =
         //3.鐩戝惉缃戝叧骞挎挱鐨勫叆缃戞寚浠�
+        EventDispatcher.getInstance().remove(TopicConstant.GATEWAY_AUTH_BROADCAST);
         EventDispatcher.getInstance().register(TopicConstant.GATEWAY_AUTH_BROADCAST, new EventListener() {
             @Override
             public void onMessage(Object msg) {
+                LogUtils.i("鏀跺埌缃戝叧璁よ瘉淇℃伅: ");
                 NetworkAccessBroadcastResponse bean = getNetworkAccessBroadcastResponse(msg);
                 if (bean != null) {
                     //绉婚櫎鐩戝惉
diff --git a/HDLSDK/hdl-socket/build.gradle b/HDLSDK/hdl-socket/build.gradle
index 1949c79..5c35438 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.13"
+        versionName "1.0.15"
 
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
         consumerProguardFiles "consumer-rules.pro"

--
Gitblit v1.8.0