From 613399cc6d14cfe5b8a245d462629ecee5deb2db Mon Sep 17 00:00:00 2001
From: xiaoQQya <xiaoQQya@126.com>
Date: 星期二, 17 十月 2023 17:49:31 +0800
Subject: [PATCH] fix(play): 修复单端口推流下级自定义 ssrc 时, 流注册后接口仍然超时的问题
---
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java | 314 ++++++++++++++++++++++++++-------------------------
1 files changed, 160 insertions(+), 154 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java
old mode 100644
new mode 100755
index a351445..8d0ed7f
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java
@@ -1,154 +1,160 @@
-package com.genersoft.iot.vmp.gb28181.transmit.callback;
-
-import com.genersoft.iot.vmp.vmanager.bean.DeferredResultEx;
-import org.springframework.stereotype.Component;
-import org.springframework.util.ObjectUtils;
-import org.springframework.web.context.request.async.DeferredResult;
-
-import java.util.Collection;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-
-/**
- * @description: 寮傛璇锋眰澶勭悊
- * @author: swwheihei
- * @date: 2020骞�5鏈�8鏃� 涓嬪崍7:59:05
- */
-@SuppressWarnings(value = {"rawtypes", "unchecked"})
-@Component
-public class DeferredResultHolder {
-
- public static final String CALLBACK_CMD_DEVICESTATUS = "CALLBACK_DEVICESTATUS";
-
- public static final String CALLBACK_CMD_DEVICEINFO = "CALLBACK_DEVICEINFO";
-
- public static final String CALLBACK_CMD_DEVICECONTROL = "CALLBACK_DEVICECONTROL";
-
- public static final String CALLBACK_CMD_DEVICECONFIG = "CALLBACK_DEVICECONFIG";
-
- public static final String CALLBACK_CMD_CONFIGDOWNLOAD = "CALLBACK_CONFIGDOWNLOAD";
-
- public static final String CALLBACK_CMD_CATALOG = "CALLBACK_CATALOG";
-
- public static final String CALLBACK_CMD_RECORDINFO = "CALLBACK_RECORDINFO";
-
- public static final String CALLBACK_CMD_PLAY = "CALLBACK_PLAY";
-
- public static final String CALLBACK_CMD_PLAYBACK = "CALLBACK_PLAYBACK";
-
- public static final String CALLBACK_CMD_DOWNLOAD = "CALLBACK_DOWNLOAD";
-
- public static final String CALLBACK_CMD_STOP = "CALLBACK_STOP";
-
- public static final String UPLOAD_FILE_CHANNEL = "UPLOAD_FILE_CHANNEL";
-
- public static final String CALLBACK_CMD_MOBILEPOSITION = "CALLBACK_MOBILEPOSITION";
-
- public static final String CALLBACK_CMD_PRESETQUERY = "CALLBACK_PRESETQUERY";
-
- public static final String CALLBACK_CMD_ALARM = "CALLBACK_ALARM";
-
- public static final String CALLBACK_CMD_BROADCAST = "CALLBACK_BROADCAST";
-
- private Map<String, Map<String, DeferredResultEx>> map = new ConcurrentHashMap<>();
-
-
- public void put(String key, String id, DeferredResultEx result) {
- Map<String, DeferredResultEx> deferredResultMap = map.get(key);
- if (deferredResultMap == null) {
- deferredResultMap = new ConcurrentHashMap<>();
- map.put(key, deferredResultMap);
- }
- deferredResultMap.put(id, result);
- }
-
- public void put(String key, String id, DeferredResult result) {
- Map<String, DeferredResultEx> deferredResultMap = map.get(key);
- if (deferredResultMap == null) {
- deferredResultMap = new ConcurrentHashMap<>();
- map.put(key, deferredResultMap);
- }
- deferredResultMap.put(id, new DeferredResultEx(result));
- }
-
- public DeferredResultEx get(String key, String id) {
- Map<String, DeferredResultEx> deferredResultMap = map.get(key);
- if (deferredResultMap == null || ObjectUtils.isEmpty(id)) {
- return null;
- }
- return deferredResultMap.get(id);
- }
-
- public Collection<DeferredResultEx> getAllByKey(String key) {
- Map<String, DeferredResultEx> deferredResultMap = map.get(key);
- if (deferredResultMap == null) {
- return null;
- }
- return deferredResultMap.values();
- }
-
- public boolean exist(String key, String id){
- if (key == null) {
- return false;
- }
- Map<String, DeferredResultEx> deferredResultMap = map.get(key);
- if (id == null) {
- return deferredResultMap != null;
- }else {
- return deferredResultMap != null && deferredResultMap.get(id) != null;
- }
- }
-
- /**
- * 閲婃斁鍗曚釜璇锋眰
- * @param msg
- */
- public void invokeResult(RequestMessage msg) {
- Map<String, DeferredResultEx> deferredResultMap = map.get(msg.getKey());
- if (deferredResultMap == null) {
- return;
- }
- DeferredResultEx result = deferredResultMap.get(msg.getId());
- if (result == null) {
- return;
- }
- result.getDeferredResult().setResult(msg.getData());
- deferredResultMap.remove(msg.getId());
- if (deferredResultMap.size() == 0) {
- map.remove(msg.getKey());
- }
- }
-
- /**
- * 閲婃斁鎵�鏈夌殑璇锋眰
- * @param msg
- */
- public void invokeAllResult(RequestMessage msg) {
- Map<String, DeferredResultEx> deferredResultMap = map.get(msg.getKey());
- if (deferredResultMap == null) {
- return;
- }
- synchronized (this) {
- deferredResultMap = map.get(msg.getKey());
- if (deferredResultMap == null) {
- return;
- }
- Set<String> ids = deferredResultMap.keySet();
- for (String id : ids) {
- DeferredResultEx result = deferredResultMap.get(id);
- if (result == null) {
- return;
- }
- if (result.getFilter() != null) {
- Object handler = result.getFilter().handler(msg.getData());
- result.getDeferredResult().setResult(handler);
- }else {
- result.getDeferredResult().setResult(msg.getData());
- }
-
- }
- map.remove(msg.getKey());
- }
- }
-}
+package com.genersoft.iot.vmp.gb28181.transmit.callback;
+
+import com.genersoft.iot.vmp.vmanager.bean.DeferredResultEx;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
+import org.springframework.web.context.request.async.DeferredResult;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * @description: 寮傛璇锋眰澶勭悊
+ * @author: swwheihei
+ * @date: 2020骞�5鏈�8鏃� 涓嬪崍7:59:05
+ */
+@SuppressWarnings(value = {"rawtypes", "unchecked"})
+@Component
+public class DeferredResultHolder {
+
+ public static final String CALLBACK_CMD_DEVICESTATUS = "CALLBACK_DEVICESTATUS";
+
+ public static final String CALLBACK_CMD_DEVICEINFO = "CALLBACK_DEVICEINFO";
+
+ public static final String CALLBACK_CMD_DEVICECONTROL = "CALLBACK_DEVICECONTROL";
+
+ public static final String CALLBACK_CMD_DEVICECONFIG = "CALLBACK_DEVICECONFIG";
+
+ public static final String CALLBACK_CMD_CONFIGDOWNLOAD = "CALLBACK_CONFIGDOWNLOAD";
+
+ public static final String CALLBACK_CMD_CATALOG = "CALLBACK_CATALOG";
+
+ public static final String CALLBACK_CMD_RECORDINFO = "CALLBACK_RECORDINFO";
+
+ public static final String CALLBACK_CMD_PLAY = "CALLBACK_PLAY";
+
+ public static final String CALLBACK_CMD_PLAYBACK = "CALLBACK_PLAYBACK";
+
+ public static final String CALLBACK_CMD_DOWNLOAD = "CALLBACK_DOWNLOAD";
+
+ public static final String CALLBACK_CMD_PROXY = "CALLBACK_PROXY";
+
+ public static final String CALLBACK_CMD_STOP = "CALLBACK_STOP";
+
+ public static final String UPLOAD_FILE_CHANNEL = "UPLOAD_FILE_CHANNEL";
+
+ public static final String CALLBACK_CMD_MOBILE_POSITION = "CALLBACK_CMD_MOBILE_POSITION";
+
+ public static final String CALLBACK_CMD_PRESETQUERY = "CALLBACK_PRESETQUERY";
+
+ public static final String CALLBACK_CMD_ALARM = "CALLBACK_ALARM";
+
+ public static final String CALLBACK_CMD_BROADCAST = "CALLBACK_BROADCAST";
+
+ public static final String CALLBACK_CMD_SNAP= "CALLBACK_SNAP";
+
+ private Map<String, Map<String, DeferredResultEx>> map = new ConcurrentHashMap<>();
+
+
+ public void put(String key, String id, DeferredResultEx result) {
+ Map<String, DeferredResultEx> deferredResultMap = map.get(key);
+ if (deferredResultMap == null) {
+ deferredResultMap = new ConcurrentHashMap<>();
+ map.put(key, deferredResultMap);
+ }
+ deferredResultMap.put(id, result);
+ }
+
+ public void put(String key, String id, DeferredResult result) {
+ Map<String, DeferredResultEx> deferredResultMap = map.get(key);
+ if (deferredResultMap == null) {
+ deferredResultMap = new ConcurrentHashMap<>();
+ map.put(key, deferredResultMap);
+ }
+ deferredResultMap.put(id, new DeferredResultEx(result));
+ }
+
+ public DeferredResultEx get(String key, String id) {
+ Map<String, DeferredResultEx> deferredResultMap = map.get(key);
+ if (deferredResultMap == null || ObjectUtils.isEmpty(id)) {
+ return null;
+ }
+ return deferredResultMap.get(id);
+ }
+
+ public Collection<DeferredResultEx> getAllByKey(String key) {
+ Map<String, DeferredResultEx> deferredResultMap = map.get(key);
+ if (deferredResultMap == null) {
+ return null;
+ }
+ return deferredResultMap.values();
+ }
+
+ public boolean exist(String key, String id){
+ if (key == null) {
+ return false;
+ }
+ Map<String, DeferredResultEx> deferredResultMap = map.get(key);
+ if (id == null) {
+ return deferredResultMap != null;
+ }else {
+ return deferredResultMap != null && deferredResultMap.get(id) != null;
+ }
+ }
+
+ /**
+ * 閲婃斁鍗曚釜璇锋眰
+ * @param msg
+ */
+ public void invokeResult(RequestMessage msg) {
+ Map<String, DeferredResultEx> deferredResultMap = map.get(msg.getKey());
+ if (deferredResultMap == null) {
+ return;
+ }
+ DeferredResultEx result = deferredResultMap.get(msg.getId());
+ if (result == null) {
+ return;
+ }
+ result.getDeferredResult().setResult(msg.getData());
+ deferredResultMap.remove(msg.getId());
+ if (deferredResultMap.size() == 0) {
+ map.remove(msg.getKey());
+ }
+ }
+
+ /**
+ * 閲婃斁鎵�鏈夌殑璇锋眰
+ * @param msg
+ */
+ public void invokeAllResult(RequestMessage msg) {
+ Map<String, DeferredResultEx> deferredResultMap = map.get(msg.getKey());
+ if (deferredResultMap == null) {
+ return;
+ }
+ synchronized (this) {
+ deferredResultMap = map.get(msg.getKey());
+ if (deferredResultMap == null) {
+ return;
+ }
+ Set<String> ids = deferredResultMap.keySet();
+ for (String id : ids) {
+ DeferredResultEx result = deferredResultMap.get(id);
+ if (result == null) {
+ return;
+ }
+ if (result.getFilter() != null) {
+ Object handler = result.getFilter().handler(msg.getData());
+ result.getDeferredResult().setResult(handler);
+ }else {
+ result.getDeferredResult().setResult(msg.getData());
+ }
+
+ }
+ map.remove(msg.getKey());
+ }
+ }
+
+
+}
--
Gitblit v1.8.0