From 5f096921985f0a79abe426396ceada42c841b03c Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期五, 23 二月 2024 18:48:01 +0800
Subject: [PATCH] 添加统一回调管理
---
src/main/java/com/genersoft/iot/vmp/gb28181/session/CommonSessionManager.java | 86 +++++++++++++++++++++++++++++++++++++++++++
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java | 5 +-
2 files changed, 88 insertions(+), 3 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/session/CommonSessionManager.java b/src/main/java/com/genersoft/iot/vmp/gb28181/session/CommonSessionManager.java
new file mode 100755
index 0000000..2d8c7e1
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/session/CommonSessionManager.java
@@ -0,0 +1,86 @@
+package com.genersoft.iot.vmp.gb28181.session;
+
+import com.genersoft.iot.vmp.common.CommonCallback;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.Calendar;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * 閫氱敤鍥炶皟绠$悊
+ */
+@Component
+public class CommonSessionManager {
+
+ public static Map<String, CommonSession> callbackMap = new ConcurrentHashMap<>();
+
+ /**
+ * 瀛樺偍鍥炶皟鐩稿叧鐨勪俊鎭�
+ */
+ class CommonSession{
+ public String session;
+ public long createTime;
+ public int timeout;
+
+ public CommonCallback<Object> callback;
+ public CommonCallback<String> timeoutCallback;
+ }
+
+ /**
+ * 娣诲姞鍥炶皟
+ * @param sessionId 鍞竴鏍囪瘑
+ * @param callback 鍥炶皟
+ * @param timeout 瓒呮椂鏃堕棿, 鍗曚綅鍒嗛挓
+ */
+ public void add(String sessionId, CommonCallback<Object> callback, CommonCallback<String> timeoutCallback,
+ Integer timeout) {
+ CommonSession commonSession = new CommonSession();
+ commonSession.session = sessionId;
+ commonSession.callback = callback;
+ commonSession.createTime = System.currentTimeMillis();
+ if (timeoutCallback != null) {
+ commonSession.timeoutCallback = timeoutCallback;
+ }
+ if (timeout != null) {
+ commonSession.timeout = timeout;
+ }
+ callbackMap.put(sessionId, commonSession);
+ }
+
+ public void add(String sessionId, CommonCallback<Object> callback) {
+ add(sessionId, callback, null, 1);
+ }
+
+ public CommonCallback<Object> get(String sessionId, boolean destroy) {
+ CommonSession commonSession = callbackMap.get(sessionId);
+ if (destroy) {
+ callbackMap.remove(sessionId);
+ }
+ return commonSession.callback;
+ }
+
+ public CommonCallback<Object> get(String sessionId) {
+ return get(sessionId, false);
+ }
+
+ public void delete(String sessionID) {
+ callbackMap.remove(sessionID);
+ }
+
+ @Scheduled(fixedRate= 60) //姣忓垎閽熸墽琛屼竴娆�
+ public void execute(){
+ Calendar cal = Calendar.getInstance();
+ cal.add(Calendar.MINUTE, -1);
+ for (String session : callbackMap.keySet()) {
+ if (callbackMap.get(session).createTime < cal.getTimeInMillis()) {
+ // 瓒呮椂
+ if (callbackMap.get(session).timeoutCallback != null) {
+ callbackMap.get(session).timeoutCallback.run("timeout");
+ }
+ callbackMap.remove(session);
+ }
+ }
+ }
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java
index d35c6a6..435f35f 100755
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java
@@ -6,7 +6,6 @@
import com.genersoft.iot.vmp.conf.UserSetting;
import com.genersoft.iot.vmp.gb28181.bean.*;
import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
-import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver;
import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
@@ -38,7 +37,6 @@
import javax.sip.header.FromHeader;
import javax.sip.message.Response;
import java.text.ParseException;
-import java.util.Iterator;
import java.util.List;
import java.util.concurrent.ConcurrentLinkedQueue;
@@ -222,7 +220,6 @@
mobilePosition.getLongitude(), mobilePosition.getLatitude());
mobilePosition.setReportSource("Mobile Position");
-
// 鏇存柊device channel 鐨勭粡绾害
DeviceChannel deviceChannel = new DeviceChannel();
deviceChannel.setDeviceId(device.getDeviceId());
@@ -242,6 +239,8 @@
}
storager.updateChannelPosition(deviceChannel);
+ // 鍚戝叧鑱斾簡璇ラ�氶亾骞朵笖寮�鍚Щ鍔ㄤ綅缃闃呯殑涓婄骇骞冲彴鍙戦�佺Щ鍔ㄤ綅缃闃呮秷鎭�
+
// 鍙戦�乺edis娑堟伅銆� 閫氱煡浣嶇疆淇℃伅鐨勫彉鍖�
JSONObject jsonObject = new JSONObject();
--
Gitblit v1.8.0