From a8c424e49db9213e879bf6c44cebccdfddaa1808 Mon Sep 17 00:00:00 2001
From: BradyXu <brady_xu@outlook.com>
Date: 星期日, 12 五月 2024 02:00:55 +0800
Subject: [PATCH] 修复sip绑定监听多网卡IP时,新增上级平台新增失败的问题,本地IP改成从配置的多IP下拉选择

---
 src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaServerStatusManger.java |   35 +++++++++++++++++++++--------------
 1 files changed, 21 insertions(+), 14 deletions(-)

diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaServerStatusManger.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaServerStatusManger.java
index 6f97558..cdf1e3f 100644
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaServerStatusManger.java
+++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaServerStatusManger.java
@@ -5,10 +5,10 @@
 import com.alibaba.fastjson2.JSONObject;
 import com.genersoft.iot.vmp.conf.DynamicTask;
 import com.genersoft.iot.vmp.conf.UserSetting;
-import com.genersoft.iot.vmp.media.event.MediaServerChangeEvent;
-import com.genersoft.iot.vmp.media.event.MediaServerDeleteEvent;
+import com.genersoft.iot.vmp.media.event.mediaServer.MediaServerChangeEvent;
+import com.genersoft.iot.vmp.media.event.mediaServer.MediaServerDeleteEvent;
 import com.genersoft.iot.vmp.media.service.IMediaServerService;
-import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
+import com.genersoft.iot.vmp.media.bean.MediaServer;
 import com.genersoft.iot.vmp.media.zlm.dto.ZLMServerConfig;
 import com.genersoft.iot.vmp.media.zlm.event.HookZlmServerKeepaliveEvent;
 import com.genersoft.iot.vmp.media.zlm.event.HookZlmServerStartEvent;
@@ -36,8 +36,8 @@
 
     private final static Logger logger = LoggerFactory.getLogger(ZLMMediaServerStatusManger.class);
 
-    private final Map<Object, MediaServerItem> offlineZlmPrimaryMap = new ConcurrentHashMap<>();
-    private final Map<Object, MediaServerItem> offlineZlmsecondaryMap = new ConcurrentHashMap<>();
+    private final Map<Object, MediaServer> offlineZlmPrimaryMap = new ConcurrentHashMap<>();
+    private final Map<Object, MediaServer> offlineZlmsecondaryMap = new ConcurrentHashMap<>();
     private final Map<Object, Long> offlineZlmTimeMap = new ConcurrentHashMap<>();
 
     @Autowired
@@ -55,6 +55,9 @@
     @Value("${server.port}")
     private Integer serverPort;
 
+    @Value("${server.servlet.context-path:}")
+    private String serverServletContextPath;
+
     @Autowired
     private UserSetting userSetting;
 
@@ -67,13 +70,14 @@
                 || event.getMediaServerItemList().isEmpty()) {
             return;
         }
-        for (MediaServerItem mediaServerItem : event.getMediaServerItemList()) {
+        for (MediaServer mediaServerItem : event.getMediaServerItemList()) {
             if (!type.equals(mediaServerItem.getType())) {
                 continue;
             }
             logger.info("[ZLM-娣诲姞寰呬笂绾胯妭鐐筣 ID锛�" + mediaServerItem.getId());
             offlineZlmPrimaryMap.put(mediaServerItem.getId(), mediaServerItem);
             offlineZlmTimeMap.put(mediaServerItem.getId(), System.currentTimeMillis());
+            execute();
         }
     }
 
@@ -85,7 +89,7 @@
                 || event.getMediaServerItem().isStatus()) {
             return;
         }
-        MediaServerItem serverItem = mediaServerService.getOne(event.getMediaServerItem().getId());
+        MediaServer serverItem = mediaServerService.getOne(event.getMediaServerItem().getId());
         if (serverItem == null) {
             return;
         }
@@ -99,7 +103,7 @@
         if (event.getMediaServerItem() == null) {
             return;
         }
-        MediaServerItem serverItem = mediaServerService.getOne(event.getMediaServerItem().getId());
+        MediaServer serverItem = mediaServerService.getOne(event.getMediaServerItem().getId());
         if (serverItem == null) {
             return;
         }
@@ -126,7 +130,7 @@
             return;
         }
         if (!offlineZlmPrimaryMap.isEmpty()) {
-            for (MediaServerItem mediaServerItem : offlineZlmPrimaryMap.values()) {
+            for (MediaServer mediaServerItem : offlineZlmPrimaryMap.values()) {
                 if (offlineZlmTimeMap.get(mediaServerItem.getId()) <  System.currentTimeMillis() - 30*60*1000) {
                     offlineZlmsecondaryMap.put(mediaServerItem.getId(), mediaServerItem);
                     offlineZlmPrimaryMap.remove(mediaServerItem.getId());
@@ -150,7 +154,7 @@
             }
         }
         if (!offlineZlmsecondaryMap.isEmpty()) {
-            for (MediaServerItem mediaServerItem : offlineZlmsecondaryMap.values()) {
+            for (MediaServer mediaServerItem : offlineZlmsecondaryMap.values()) {
                 if (offlineZlmTimeMap.get(mediaServerItem.getId()) <  System.currentTimeMillis() - 30*60*1000) {
                     continue;
                 }
@@ -175,7 +179,7 @@
         }
     }
 
-    private void online(MediaServerItem mediaServerItem, ZLMServerConfig config) {
+    private void online(MediaServer mediaServerItem, ZLMServerConfig config) {
         offlineZlmPrimaryMap.remove(mediaServerItem.getId());
         offlineZlmsecondaryMap.remove(mediaServerItem.getId());
         offlineZlmTimeMap.remove(mediaServerItem.getId());
@@ -193,10 +197,12 @@
                     }
                 }
                 if (config != null) {
+                    initPort(mediaServerItem, config);
                     setZLMConfig(mediaServerItem, "0".equals(config.getHookEnable())
                             || !Objects.equals(mediaServerItem.getHookAliveInterval(), config.getHookAliveInterval()));
                 }
             }
+            mediaServerService.update(mediaServerItem);
         }
         // 璁剧疆涓ゆ蹇冭烦鏈敹鍒板垯璁や负zlm绂荤嚎
         String key = "zlm-keepalive-" + mediaServerItem.getId();
@@ -209,7 +215,8 @@
             mediaServerService.update(mediaServerItem);
         }, (int)(mediaServerItem.getHookAliveInterval() * 2 * 1000));
     }
-    private void initPort(MediaServerItem mediaServerItem, ZLMServerConfig zlmServerConfig) {
+    private void initPort(MediaServer mediaServerItem, ZLMServerConfig zlmServerConfig) {
+        // 绔彛鍙細浠庨厤缃腑璇诲彇涓�娆★紝涓�鏃﹁嚜宸遍厤缃垨鑰呰鍙栬繃浜嗗皢涓嶅湪閰嶇疆
         if (mediaServerItem.getHttpSSlPort() == 0) {
             mediaServerItem.setHttpSSlPort(zlmServerConfig.getHttpSSLport());
         }
@@ -231,11 +238,11 @@
         mediaServerItem.setHookAliveInterval(10F);
     }
 
-    public void setZLMConfig(MediaServerItem mediaServerItem, boolean restart) {
+    public void setZLMConfig(MediaServer mediaServerItem, boolean restart) {
         logger.info("[濯掍綋鏈嶅姟鑺傜偣] 姝e湪璁剧疆 锛歿} -> {}:{}",
                 mediaServerItem.getId(), mediaServerItem.getIp(), mediaServerItem.getHttpPort());
         String protocol = sslEnabled ? "https" : "http";
-        String hookPrefix = String.format("%s://%s:%s/index/hook", protocol, mediaServerItem.getHookIp(), serverPort);
+        String hookPrefix = String.format("%s://%s:%s%s/index/hook", protocol, mediaServerItem.getHookIp(), serverPort, (serverServletContextPath == null || "/".equals(serverServletContextPath)) ? "" : serverServletContextPath);
 
         Map<String, Object> param = new HashMap<>();
         param.put("api.secret",mediaServerItem.getSecret()); // -profile:v Baseline

--
Gitblit v1.8.0