From ea32cd2673b83b9481e8cc45705d2d3a84e884bb Mon Sep 17 00:00:00 2001
From: 64850858 <648540858@qq.com>
Date: 星期一, 26 七月 2021 13:21:03 +0800
Subject: [PATCH] 重启后对心跳超时的设备设置为离线。
---
src/main/java/com/genersoft/iot/vmp/conf/SipDeviceRunner.java | 36 ++++++++++++++++++
src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java | 11 +++++
src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java | 5 ++
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java | 30 ++++++++++----
4 files changed, 73 insertions(+), 9 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/SipDeviceRunner.java b/src/main/java/com/genersoft/iot/vmp/conf/SipDeviceRunner.java
new file mode 100644
index 0000000..68bb1a6
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/conf/SipDeviceRunner.java
@@ -0,0 +1,36 @@
+package com.genersoft.iot.vmp.conf;
+
+import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
+import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+
+/**
+ * 绯荤粺鍚姩鏃舵帶鍒惰澶囩绾�
+ */
+@Component
+@Order(value=4)
+public class SipDeviceRunner implements CommandLineRunner {
+
+ @Autowired
+ private IVideoManagerStorager storager;
+
+ @Autowired
+ private IRedisCatchStorage redisCatchStorage;
+
+ @Override
+ public void run(String... args) throws Exception {
+ // 璇诲彇redis娌℃湁蹇冭烦淇℃伅鐨勫垯璁剧疆涓虹绾匡紝绛夋敹鍒颁笅娆″績璺宠缃负鍦ㄧ嚎
+ // 璁剧疆鎵�鏈夎澶囩绾�
+ storager.outlineForAll();
+ List<String> onlineForAll = redisCatchStorage.getOnlineForAll();
+ for (String deviceId : onlineForAll) {
+ storager.online(deviceId);
+ }
+ }
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java
index 70e64a5..d46c0c4 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java
@@ -771,19 +771,31 @@
Element rootElement = getRootElement(evt);
String deviceId = XmlUtil.getText(rootElement, "DeviceID");
Device device = storager.queryVideoDevice(deviceId);
- // 妫�鏌ヨ澶囨槸鍚﹀瓨鍦ㄥ苟鍦ㄧ嚎锛� 涓嶅瓨鍦ㄥ垯涓嶅洖澶�
- if (device != null && device.getOnline() == 1) {
+
+ // 妫�鏌ヨ澶囨槸鍚﹀瓨鍦ㄥ苟鍦ㄧ嚎锛� 涓嶅湪绾垮垯璁剧疆涓哄湪绾�
+ if (device != null ) {
// 鍥炲200 OK
responseAck(evt);
- if (offLineDetector.isOnline(deviceId)) {
- publisher.onlineEventPublish(device, VideoManagerConstants.EVENT_ONLINE_KEEPLIVE);
- } else {
- }
- }else {
- logger.warn("鏀跺埌[ "+deviceId+" ]蹇冭烦淇℃伅, 浣嗘槸璁惧" + (device == null? "涓嶅瓨鍦�":"绂荤嚎") + ", 鍥炲401");
- Response response = getMessageFactory().createResponse(Response.UNAUTHORIZED, evt.getRequest());
+ publisher.onlineEventPublish(device, VideoManagerConstants.EVENT_ONLINE_KEEPLIVE);
+ }else{
+ logger.warn("鏀跺埌[ "+deviceId+" ]蹇冭烦淇℃伅, 浣嗘槸璁惧涓嶅瓨鍦�, 鍥炲404");
+ Response response = getMessageFactory().createResponse(Response.NOT_FOUND, evt.getRequest());
getServerTransaction(evt).sendResponse(response);
}
+
+// if (device != null && device.getOnline() == 1) {
+//
+// if (offLineDetector.isOnline(deviceId)) {
+// publisher.onlineEventPublish(device, VideoManagerConstants.EVENT_ONLINE_KEEPLIVE);
+// } else {
+// }
+// }else {
+//// logger.warn("鏀跺埌[ "+deviceId+" ]蹇冭烦淇℃伅, 浣嗘槸璁惧" + (device == null? "涓嶅瓨鍦�":"绂荤嚎") + ", 鍥炲401");
+//// Response response = getMessageFactory().createResponse(Response.UNAUTHORIZED, evt.getRequest());
+//// getServerTransaction(evt).sendResponse(response);
+// publisher.onlineEventPublish(device, VideoManagerConstants.EVENT_ONLINE_KEEPLIVE);
+//
+// }
} catch (ParseException | SipException | InvalidArgumentException | DocumentException e) {
e.printStackTrace();
}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java b/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java
index f5b2b1b..e4313d9 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java
@@ -113,6 +113,11 @@
void outlineForAll();
/**
+ * 鑾峰彇鎵�鏈夊湪绾跨殑
+ */
+ List<String> getOnlineForAll();
+
+ /**
* 鍦╮edis娣诲姞wvp鐨勪俊鎭�
*/
void updateWVPInfo(JSONObject jsonObject);
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java
index 08eb9d1..e5b1269 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java
@@ -284,6 +284,17 @@
}
@Override
+ public List<String> getOnlineForAll() {
+ List<String> result = new ArrayList<>();
+ List<Object> onlineDevices = redis.scan(VideoManagerConstants.KEEPLIVEKEY_PREFIX + "*" );
+ for (int i = 0; i < onlineDevices.size(); i++) {
+ String key = (String) onlineDevices.get(i);
+ result.add((String) redis.get(key));
+ }
+ return result;
+ }
+
+ @Override
public void updateWVPInfo(JSONObject jsonObject) {
}
--
Gitblit v1.8.0