From fdcf461fbfa3bcd650685743e891ad3357898f0c Mon Sep 17 00:00:00 2001
From: 562935844@qq.com
Date: 星期四, 31 八月 2023 17:36:50 +0800
Subject: [PATCH] 更新sdk

---
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/event/EventDispatcher.java |  239 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 239 insertions(+), 0 deletions(-)

diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/event/EventDispatcher.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/event/EventDispatcher.java
new file mode 100644
index 0000000..2f59e1d
--- /dev/null
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/event/EventDispatcher.java
@@ -0,0 +1,239 @@
+package com.hdl.sdk.common.event;
+
+
+import android.util.ArrayMap;
+
+import com.hdl.sdk.common.utils.LogUtils;
+import com.hdl.sdk.common.utils.ThreadToolUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ExecutorService;
+
+
+/**
+ * Created by Tong on 2021/9/22.
+ * 浜嬩欢鍒嗗彂
+ */
+public class EventDispatcher {
+
+    private static final List<EventListener> ALL_TOPICS_EVENT = new ArrayList<>();//鎵�鏈変富棰樻秷鎭�
+
+    private static final ConcurrentHashMap<Object, List<EventListener>> EVENT = new ConcurrentHashMap<>();
+
+    private static final ConcurrentHashMap<EventListener, Integer> TYPE = new ConcurrentHashMap<>();
+
+    private static final int MAIN_TYPE = 0;
+    private static final int IO_TYPE = 1;
+
+    private static final ExecutorService ioThread = ThreadToolUtils.getInstance().newFixedThreadPool(3);
+
+
+    private EventDispatcher() {
+    }
+
+    //    private static class SingletonInstance {
+    private static final EventDispatcher instance = new EventDispatcher();
+//    }
+
+    public static EventDispatcher getInstance() {
+        return instance;
+    }
+
+    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());
+            }
+        }
+    }
+
+    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());
+            }
+        }
+    }
+
+    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;
+                        }
+                        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 ignored) {
+                LogUtils.e("绉婚櫎event寮傚父1锛�" + ignored.getMessage());
+            }
+        }
+    }
+
+    public synchronized void post(Object tag, Object o) {
+        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() {
+                            try {
+                                if (listener != null) {
+                                    listener.onMessage(o);
+                                }
+                            } catch (Exception e) {
+                            }
+                        }
+                    });
+                }
+            }
+        } catch (Exception e) {
+            LogUtils.e("post寮傚父2锛�" + e.getMessage());
+        }
+    }
+
+    /**
+     * 娉ㄥ唽鎵�鏈変富棰樻秷鎭殑鐩戝惉
+     *
+     * @param listener
+     */
+    public synchronized void registerAllTopicsListener(EventListener listener) {
+        if (listener == null) {
+            return;
+        }
+        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());
+        }
+    }
+
+    /**
+     * 鍙栨秷鎵�鏈変富棰樻秷鎭殑鐩戝惉
+     *
+     * @param listener
+     */
+    public synchronized void removeAllTopicsListener(EventListener listener) {
+        try {
+            ioThread.execute(new Runnable() {
+                @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);
+                        }
+                    } catch (Exception ignored) {
+                        LogUtils.e("绉婚櫎event寮傚父1锛�" + ignored.getMessage());
+                    }
+
+                }
+            });
+        } catch (Exception e) {
+            LogUtils.e("绉婚櫎event寮傚父2锛�" + e.getMessage());
+        }
+    }
+
+    public synchronized void clear() {
+        ALL_TOPICS_EVENT.clear();
+        EVENT.clear();
+        TYPE.clear();
+    }
+
+    public synchronized void release() {
+        clear();
+        ioThread.shutdownNow();
+    }
+}

--
Gitblit v1.8.0