From 4b9549dfbf55d8af415efe609623e9d19dd6e6d4 Mon Sep 17 00:00:00 2001
From: Lawrence <1934378145@qq.com>
Date: 星期四, 21 一月 2021 19:57:57 +0800
Subject: [PATCH] 添加浏览器ID,确保SSE可同时推送到不同的前端

---
 src/main/java/com/genersoft/iot/vmp/gb28181/event/alarm/AlarmEventListener.java |   39 +++++++++++++++++++++++++--------------
 1 files changed, 25 insertions(+), 14 deletions(-)

diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/alarm/AlarmEventListener.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/alarm/AlarmEventListener.java
index 1b2f672..2b56326 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/alarm/AlarmEventListener.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/alarm/AlarmEventListener.java
@@ -4,6 +4,10 @@
 import org.springframework.stereotype.Component;
 import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
 import java.io.IOException;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.Map;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -18,10 +22,10 @@
 
     private final static Logger logger = LoggerFactory.getLogger(AlarmEventListener.class);
 
-    private static SseEmitter emitter = new SseEmitter();
+    private static Map<String, SseEmitter> sseEmitters = new Hashtable<>();
 
-    public void addSseEmitters(SseEmitter sseEmitter) {
-        emitter = sseEmitter;
+    public void addSseEmitters(String browserId, SseEmitter sseEmitter) {
+        sseEmitters.put(browserId, sseEmitter);
     }
 
     @Override
@@ -30,18 +34,25 @@
             logger.debug("璁惧鎶ヨ浜嬩欢瑙﹀彂锛宒eviceId锛�" + event.getAlarmInfo().getDeviceId() + ", "
                     + event.getAlarmInfo().getAlarmDescription());
         }
-        try {
-            String msg = "<strong>璁惧缂栫爜锛�</strong> <i>" + event.getAlarmInfo().getDeviceId() + "</i>"
-                        + "<br><strong>鎶ヨ鎻忚堪锛�</strong> <i>" + event.getAlarmInfo().getAlarmDescription() + "</i>"
-                        + "<br><strong>鎶ヨ鏃堕棿锛�</strong> <i>" + event.getAlarmInfo().getAlarmTime() + "</i>"
-                        + "<br><strong>瀹氫綅缁忓害锛�</strong> <i>" + event.getAlarmInfo().getLongitude() + "</i>"
-                        + "<br><strong>瀹氫綅绾害锛�</strong> <i>" + event.getAlarmInfo().getLatitude() + "</i>";
-            emitter.send(msg);
-        } catch (IOException e) {
-            if (logger.isDebugEnabled()) {
-                logger.debug("SSE 閫氶亾宸插叧闂�");
+        String msg = "<strong>璁惧缂栫爜锛�</strong> <i>" + event.getAlarmInfo().getDeviceId() + "</i>"
+                    + "<br><strong>鎶ヨ鎻忚堪锛�</strong> <i>" + event.getAlarmInfo().getAlarmDescription() + "</i>"
+                    + "<br><strong>鎶ヨ鏃堕棿锛�</strong> <i>" + event.getAlarmInfo().getAlarmTime() + "</i>"
+                    + "<br><strong>鎶ヨ浣嶇疆锛�</strong> <i>" + event.getAlarmInfo().getLongitude() + "</i>"
+                    + ", <i>" + event.getAlarmInfo().getLatitude() + "</i>";
+
+        for (Iterator<Map.Entry<String, SseEmitter>> it = sseEmitters.entrySet().iterator(); it.hasNext();) {
+            Map.Entry<String, SseEmitter> emitter = it.next();
+            logger.info("鎺ㄩ�佸埌SSE杩炴帴锛屾祻瑙堝櫒ID: " + emitter.getKey());
+            try {
+                emitter.getValue().send(msg);
+            } catch (IOException | IllegalStateException e) {
+                if (logger.isDebugEnabled()) {
+                    logger.debug("SSE杩炴帴宸插叧闂�");
+                }
+                // 绉婚櫎宸插叧闂殑杩炴帴
+                it.remove();
+                // e.printStackTrace();
             }
-            // e.printStackTrace();
         }
     }
 }

--
Gitblit v1.8.0