From 9ef1a0277b23c0302891d74648e0b559423dcbb8 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期三, 18 五月 2022 15:36:33 +0800
Subject: [PATCH] 更新jessibuca播放器
---
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/RecordInfoResponseMessageHandler.java | 101 ++++++++++++++++++++++++--------------------------
1 files changed, 49 insertions(+), 52 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/RecordInfoResponseMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/RecordInfoResponseMessageHandler.java
index 45b7e56..4509e42 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/RecordInfoResponseMessageHandler.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/RecordInfoResponseMessageHandler.java
@@ -5,14 +5,14 @@
import com.genersoft.iot.vmp.gb28181.bean.RecordInfo;
import com.genersoft.iot.vmp.gb28181.bean.RecordItem;
import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.CheckForAllRecordsThread;
+import com.genersoft.iot.vmp.gb28181.session.RecordDataCatch;
import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler;
import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.ResponseMessageHandler;
-import com.genersoft.iot.vmp.gb28181.utils.DateUtil;
-import com.genersoft.iot.vmp.utils.redis.RedisUtil;
+import com.genersoft.iot.vmp.utils.DateUtil;
+import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.slf4j.Logger;
@@ -20,19 +20,20 @@
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
+import org.springframework.util.StringUtils;
import javax.sip.InvalidArgumentException;
import javax.sip.RequestEvent;
import javax.sip.SipException;
import javax.sip.message.Response;
import java.text.ParseException;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.UUID;
+import java.util.*;
import static com.genersoft.iot.vmp.gb28181.utils.XmlUtil.getText;
+/**
+ * @author lin
+ */
@Component
public class RecordInfoResponseMessageHandler extends SIPRequestProcessorParent implements InitializingBean, IMessageHandler {
@@ -45,10 +46,12 @@
private ResponseMessageHandler responseMessageHandler;
@Autowired
- private RedisUtil redis;
+ private RecordDataCatch recordDataCatch;
@Autowired
private DeferredResultHolder deferredResultHolder;
+
+
@Autowired
private EventPublisher eventPublisher;
@@ -66,32 +69,22 @@
responseAck(evt, Response.OK);
rootElement = getRootElement(evt, device.getCharset());
- String uuid = UUID.randomUUID().toString().replace("-", "");
- RecordInfo recordInfo = new RecordInfo();
String sn = getText(rootElement, "SN");
- String key = DeferredResultHolder.CALLBACK_CMD_RECORDINFO + device.getDeviceId() + sn;
- recordInfo.setDeviceId(device.getDeviceId());
- recordInfo.setSn(sn);
- recordInfo.setName(getText(rootElement, "Name"));
- if (getText(rootElement, "SumNum") == null || getText(rootElement, "SumNum") == "") {
- recordInfo.setSumNum(0);
- } else {
- recordInfo.setSumNum(Integer.parseInt(getText(rootElement, "SumNum")));
+
+ String sumNumStr = getText(rootElement, "SumNum");
+ int sumNum = 0;
+ if (!StringUtils.isEmpty(sumNumStr)) {
+ sumNum = Integer.parseInt(sumNumStr);
}
Element recordListElement = rootElement.element("RecordList");
- if (recordListElement == null || recordInfo.getSumNum() == 0) {
+ if (recordListElement == null || sumNum == 0) {
logger.info("鏃犲綍鍍忔暟鎹�");
- eventPublisher.recordEndEventPush(recordInfo);
- RequestMessage msg = new RequestMessage();
- msg.setKey(key);
- msg.setData(recordInfo);
- deferredResultHolder.invokeAllResult(msg);
+ recordDataCatch.put(device.getDeviceId(), sn, sumNum, new ArrayList<>());
+ releaseRequest(device.getDeviceId(), sn);
} else {
Iterator<Element> recordListIterator = recordListElement.elementIterator();
- List<RecordItem> recordList = new ArrayList<RecordItem>();
if (recordListIterator != null) {
- RecordItem record = new RecordItem();
- logger.info("澶勭悊褰曞儚鍒楄〃鏁版嵁...");
+ List<RecordItem> recordList = new ArrayList<>();
// 閬嶅巻DeviceList
while (recordListIterator.hasNext()) {
Element itemRecord = recordListIterator.next();
@@ -100,43 +93,31 @@
logger.info("璁板綍涓虹┖锛屼笅涓�涓�...");
continue;
}
- record = new RecordItem();
+ RecordItem record = new RecordItem();
record.setDeviceId(getText(itemRecord, "DeviceID"));
record.setName(getText(itemRecord, "Name"));
record.setFilePath(getText(itemRecord, "FilePath"));
record.setFileSize(getText(itemRecord, "FileSize"));
record.setAddress(getText(itemRecord, "Address"));
- record.setStartTime(
- DateUtil.ISO8601Toyyyy_MM_dd_HH_mm_ss(getText(itemRecord, "StartTime")));
- record.setEndTime(
- DateUtil.ISO8601Toyyyy_MM_dd_HH_mm_ss(getText(itemRecord, "EndTime")));
+
+ String startTimeStr = getText(itemRecord, "StartTime");
+ record.setStartTime(DateUtil.ISO8601Toyyyy_MM_dd_HH_mm_ss(startTimeStr));
+
+ String endTimeStr = getText(itemRecord, "EndTime");
+ record.setEndTime(DateUtil.ISO8601Toyyyy_MM_dd_HH_mm_ss(endTimeStr));
+
record.setSecrecy(itemRecord.element("Secrecy") == null ? 0
: Integer.parseInt(getText(itemRecord, "Secrecy")));
record.setType(getText(itemRecord, "Type"));
record.setRecorderId(getText(itemRecord, "RecorderID"));
recordList.add(record);
}
- recordInfo.setRecordList(recordList);
+ int count = recordDataCatch.put(device.getDeviceId(), sn, sumNum, recordList);
+ logger.info("[鍥芥爣褰曞儚]锛� {}->{}: {}/{}", device.getDeviceId(), sn, count, sumNum);
}
- eventPublisher.recordEndEventPush(recordInfo);
- // 鏀圭敤鍗曠嫭绾跨▼缁熻宸茶幏鍙栧綍鍍忔枃浠舵暟閲忥紝閬垮厤澶氬寘骞惰鍒嗗埆缁熻涓嶅畬鏁寸殑闂
- String cacheKey = CACHE_RECORDINFO_KEY + device.getDeviceId() + sn;
- redis.set(cacheKey + "_" + uuid, recordList, 90);
- if (!threadNameList.contains(cacheKey)) {
- threadNameList.add(cacheKey);
- CheckForAllRecordsThread chk = new CheckForAllRecordsThread(cacheKey, recordInfo);
- chk.setName(cacheKey);
- chk.setDeferredResultHolder(deferredResultHolder);
- chk.setRedis(redis);
- chk.setLogger(logger);
- chk.start();
- if (logger.isDebugEnabled()) {
- logger.debug("Start Thread " + cacheKey + ".");
- }
- } else {
- if (logger.isDebugEnabled()) {
- logger.debug("Thread " + cacheKey + " already started.");
- }
+
+ if (recordDataCatch.isComplete(device.getDeviceId(), sn)){
+ releaseRequest(device.getDeviceId(), sn);
}
}
} catch (SipException e) {
@@ -154,4 +135,20 @@
public void handForPlatform(RequestEvent evt, ParentPlatform parentPlatform, Element element) {
}
+
+ public void releaseRequest(String deviceId, String sn){
+ String key = DeferredResultHolder.CALLBACK_CMD_RECORDINFO + deviceId + sn;
+ WVPResult<RecordInfo> wvpResult = new WVPResult<>();
+ wvpResult.setCode(0);
+ wvpResult.setMsg("success");
+ // 瀵规暟鎹繘琛屾帓搴�
+ Collections.sort(recordDataCatch.getRecordInfo(deviceId, sn).getRecordList());
+ wvpResult.setData(recordDataCatch.getRecordInfo(deviceId, sn));
+
+ RequestMessage msg = new RequestMessage();
+ msg.setKey(key);
+ msg.setData(wvpResult);
+ deferredResultHolder.invokeAllResult(msg);
+ recordDataCatch.remove(deviceId, sn);
+ }
}
--
Gitblit v1.8.0