From b260ef7ab6ea46e07f91b96d289a90122735cd75 Mon Sep 17 00:00:00 2001
From: panlinlin <648540858@qq.com>
Date: 星期四, 06 五月 2021 11:54:23 +0800
Subject: [PATCH] 更新mysql驱动名
---
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java | 234 +++++++++++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 196 insertions(+), 38 deletions(-)
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 a2b3709..114ffd4 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
@@ -4,14 +4,22 @@
import java.text.ParseException;
import java.util.*;
+import javax.sip.address.SipURI;
+
import javax.sip.header.FromHeader;
+import javax.sip.header.HeaderAddress;
+import javax.sip.header.ToHeader;
import javax.sip.InvalidArgumentException;
+import javax.sip.ListeningPoint;
+import javax.sip.ObjectInUseException;
import javax.sip.RequestEvent;
import javax.sip.SipException;
+import javax.sip.SipProvider;
import javax.sip.message.Request;
import javax.sip.message.Response;
import com.alibaba.fastjson.JSONObject;
+import com.genersoft.iot.vmp.VManageBootstrap;
import com.genersoft.iot.vmp.common.StreamInfo;
import com.genersoft.iot.vmp.common.VideoManagerConstants;
import com.genersoft.iot.vmp.conf.UserSetup;
@@ -32,8 +40,9 @@
import com.genersoft.iot.vmp.utils.GpsUtil;
import com.genersoft.iot.vmp.utils.SpringBeanFactory;
import com.genersoft.iot.vmp.utils.redis.RedisUtil;
-import com.genersoft.iot.vmp.vmanager.platform.bean.ChannelReduce;
+import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce;
+import gov.nist.javax.sip.SipStackImpl;
import gov.nist.javax.sip.address.AddressImpl;
import gov.nist.javax.sip.address.SipUri;
@@ -84,7 +93,7 @@
private static final String MESSAGE_ALARM = "Alarm";
private static final String MESSAGE_RECORD_INFO = "RecordInfo";
private static final String MESSAGE_MEDIA_STATUS = "MediaStatus";
- // private static final String MESSAGE_BROADCAST = "Broadcast";
+ private static final String MESSAGE_BROADCAST = "Broadcast";
private static final String MESSAGE_DEVICE_STATUS = "DeviceStatus";
private static final String MESSAGE_DEVICE_CONTROL = "DeviceControl";
private static final String MESSAGE_DEVICE_CONFIG = "DeviceConfig";
@@ -105,43 +114,46 @@
String cmd = XmlUtil.getText(rootElement, "CmdType");
if (MESSAGE_KEEP_ALIVE.equals(cmd)) {
- logger.info("鎺ユ敹鍒癒eepAlive娑堟伅");
+ logger.debug("鎺ユ敹鍒癒eepAlive娑堟伅");
processMessageKeepAlive(evt);
} else if (MESSAGE_CONFIG_DOWNLOAD.equals(cmd)) {
- logger.info("鎺ユ敹鍒癈onfigDownload娑堟伅");
+ logger.debug("鎺ユ敹鍒癈onfigDownload娑堟伅");
processMessageConfigDownload(evt);
} else if (MESSAGE_CATALOG.equals(cmd)) {
- logger.info("鎺ユ敹鍒癈atalog娑堟伅");
+ logger.debug("鎺ユ敹鍒癈atalog娑堟伅");
processMessageCatalogList(evt);
} else if (MESSAGE_DEVICE_INFO.equals(cmd)) {
- logger.info("鎺ユ敹鍒癉eviceInfo娑堟伅");
+ // DeviceInfo娑堟伅澶勭悊
processMessageDeviceInfo(evt);
} else if (MESSAGE_DEVICE_STATUS.equals(cmd)) {
- logger.info("鎺ユ敹鍒癉eviceStatus娑堟伅");
+ // DeviceStatus娑堟伅澶勭悊
processMessageDeviceStatus(evt);
} else if (MESSAGE_DEVICE_CONTROL.equals(cmd)) {
- logger.info("鎺ユ敹鍒癉eviceControl娑堟伅");
+ logger.debug("鎺ユ敹鍒癉eviceControl娑堟伅");
processMessageDeviceControl(evt);
} else if (MESSAGE_DEVICE_CONFIG.equals(cmd)) {
logger.info("鎺ユ敹鍒癉eviceConfig娑堟伅");
processMessageDeviceConfig(evt);
} else if (MESSAGE_ALARM.equals(cmd)) {
- logger.info("鎺ユ敹鍒癆larm娑堟伅");
+ logger.debug("鎺ユ敹鍒癆larm娑堟伅");
processMessageAlarm(evt);
} else if (MESSAGE_RECORD_INFO.equals(cmd)) {
- logger.info("鎺ユ敹鍒癛ecordInfo娑堟伅");
+ logger.debug("鎺ユ敹鍒癛ecordInfo娑堟伅");
processMessageRecordInfo(evt);
}else if (MESSAGE_MEDIA_STATUS.equals(cmd)) {
- logger.info("鎺ユ敹鍒癕ediaStatus娑堟伅");
+ logger.debug("鎺ユ敹鍒癕ediaStatus娑堟伅");
processMessageMediaStatus(evt);
} else if (MESSAGE_MOBILE_POSITION.equals(cmd)) {
- logger.info("鎺ユ敹鍒癕obilePosition娑堟伅");
+ logger.debug("鎺ユ敹鍒癕obilePosition娑堟伅");
processMessageMobilePosition(evt);
} else if (MESSAGE_PRESET_QUERY.equals(cmd)) {
- logger.info("鎺ユ敹鍒癙resetQuery娑堟伅");
+ logger.debug("鎺ユ敹鍒癙resetQuery娑堟伅");
processMessagePresetQuery(evt);
+ } else if (MESSAGE_BROADCAST.equals(cmd)) {
+ // Broadcast娑堟伅澶勭悊
+ processMessageBroadcast(evt);
} else {
- logger.info("鎺ユ敹鍒版秷鎭細" + cmd);
+ logger.debug("鎺ユ敹鍒版秷鎭細" + cmd);
responseAck(evt);
}
} catch (DocumentException | SipException |InvalidArgumentException | ParseException e) {
@@ -211,27 +223,48 @@
private void processMessageDeviceStatus(RequestEvent evt) {
try {
Element rootElement = getRootElement(evt);
- String deviceId = XmlUtil.getText(rootElement, "DeviceID");
- // 妫�鏌ヨ澶囨槸鍚﹀瓨鍦紝 涓嶅瓨鍦ㄥ垯涓嶅洖澶�
- if (storager.exists(deviceId)) {
- // 鍥炲200 OK
- responseAck(evt);
- JSONObject json = new JSONObject();
- XmlUtil.node2Json(rootElement, json);
- if (logger.isDebugEnabled()) {
- logger.debug(json.toJSONString());
- }
- RequestMessage msg = new RequestMessage();
- msg.setDeviceId(deviceId);
- msg.setType(DeferredResultHolder.CALLBACK_CMD_DEVICESTATUS);
- msg.setData(json);
- deferredResultHolder.invokeResult(msg);
+ String name = rootElement.getName();
+ Element deviceIdElement = rootElement.element("DeviceID");
+ String deviceId = deviceIdElement.getText();
- if (offLineDetector.isOnline(deviceId)) {
- publisher.onlineEventPublish(deviceId, VideoManagerConstants.EVENT_ONLINE_KEEPLIVE);
+ if (name.equalsIgnoreCase("Query")) { // 鍖哄垎鏄疪esponse鈥斺�旀煡璇㈠搷搴旓紝杩樻槸Query鈥斺�旀煡璇㈣姹�
+ logger.info("鎺ユ敹鍒癉eviceStatus鏌ヨ娑堟伅");
+ FromHeader fromHeader = (FromHeader) evt.getRequest().getHeader(FromHeader.NAME);
+ String platformId = ((SipUri) fromHeader.getAddress().getURI()).getUser();
+ if (platformId == null) {
+ response404Ack(evt);
+ return;
} else {
+ // 鍥炲200 OK
+ responseAck(evt);
+ String sn = rootElement.element("SN").getText();
+ ParentPlatform parentPlatform = storager.queryParentPlatByServerGBId(platformId);
+ cmderFroPlatform.deviceStatusResponse(parentPlatform, sn, fromHeader.getTag());
+ }
+ } else {
+ logger.info("鎺ユ敹鍒癉eviceStatus搴旂瓟娑堟伅");
+ // 妫�鏌ヨ澶囨槸鍚﹀瓨鍦紝 涓嶅瓨鍦ㄥ垯涓嶅洖澶�
+ if (storager.exists(deviceId)) {
+ // 鍥炲200 OK
+ responseAck(evt);
+ JSONObject json = new JSONObject();
+ XmlUtil.node2Json(rootElement, json);
+ if (logger.isDebugEnabled()) {
+ logger.debug(json.toJSONString());
+ }
+ RequestMessage msg = new RequestMessage();
+ msg.setDeviceId(deviceId);
+ msg.setType(DeferredResultHolder.CALLBACK_CMD_DEVICESTATUS);
+ msg.setData(json);
+ deferredResultHolder.invokeResult(msg);
+
+ if (offLineDetector.isOnline(deviceId)) {
+ publisher.onlineEventPublish(deviceId, VideoManagerConstants.EVENT_ONLINE_KEEPLIVE);
+ } else {
+ }
}
}
+
} catch (ParseException | SipException | InvalidArgumentException | DocumentException e) {
e.printStackTrace();
}
@@ -263,6 +296,52 @@
deferredResultHolder.invokeResult(msg);
} else {
// 姝ゅ鏄笂绾у彂鍑虹殑DeviceControl鎸囦护
+ String platformId = ((SipURI) ((HeaderAddress) evt.getRequest().getHeader(FromHeader.NAME)).getAddress().getURI()).getUser();
+ String targetGBId = ((SipURI) ((HeaderAddress) evt.getRequest().getHeader(ToHeader.NAME)).getAddress().getURI()).getUser();
+ // 杩滅▼鍚姩鍔熻兘
+ if (!XmlUtil.isEmpty(XmlUtil.getText(rootElement, "TeleBoot"))) {
+ if (deviceId.equals(targetGBId)) {
+ // 杩滅▼鍚姩鏈钩鍙帮細闇�瑕佸湪閲嶆柊鍚姩绋嬪簭鍚庡厛瀵筍ipStack瑙g粦
+ logger.info("鎵ц杩滅▼鍚姩鏈钩鍙板懡浠�");
+ ParentPlatform parentPlatform = storager.queryParentPlatByServerGBId(platformId);
+ cmderFroPlatform.unregister(parentPlatform, null, null);
+
+ Thread restartThread = new Thread(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ Thread.sleep(3000);
+ SipProvider up = (SipProvider) SpringBeanFactory.getBean("udpSipProvider");
+ SipStackImpl stack = (SipStackImpl)up.getSipStack();
+ stack.stop();
+ Iterator listener = stack.getListeningPoints();
+ while (listener.hasNext()) {
+ stack.deleteListeningPoint((ListeningPoint) listener.next());
+ }
+ Iterator providers = stack.getSipProviders();
+ while (providers.hasNext()) {
+ stack.deleteSipProvider((SipProvider) providers.next());
+ }
+ VManageBootstrap.restart();
+ } catch (InterruptedException ignored) {
+ } catch (ObjectInUseException e) {
+ e.printStackTrace();
+ }
+ }
+ });
+
+ restartThread.setDaemon(false);
+ restartThread.start();
+ } else {
+ // 杩滅▼鍚姩鎸囧畾璁惧
+ }
+ }
+ // 浜戝彴/鍓嶇鎺у埗鍛戒护
+ if (!XmlUtil.isEmpty(XmlUtil.getText(rootElement,"PTZCmd")) && !deviceId.equals(targetGBId)) {
+ String cmdString = XmlUtil.getText(rootElement,"PTZCmd");
+ Device device = storager.queryVideoDeviceByPlatformIdAndChannelId(platformId, deviceId);
+ cmder.fronEndCmd(device, deviceId, cmdString);
+ }
}
} catch (ParseException | SipException | InvalidArgumentException | DocumentException e) {
e.printStackTrace();
@@ -374,9 +453,21 @@
Element deviceIdElement = rootElement.element("DeviceID");
String deviceId = deviceIdElement.getTextTrim().toString();
if (requestName.equals("Query")) {
- // 鍥炲200 OK
- responseAck(evt);
+ logger.info("鎺ユ敹鍒癉eviceInfo鏌ヨ娑堟伅");
+ FromHeader fromHeader = (FromHeader) evt.getRequest().getHeader(FromHeader.NAME);
+ String platformId = ((SipUri) fromHeader.getAddress().getURI()).getUser();
+ if (platformId == null) {
+ response404Ack(evt);
+ return;
+ } else {
+ // 鍥炲200 OK
+ responseAck(evt);
+ String sn = rootElement.element("SN").getText();
+ ParentPlatform parentPlatform = storager.queryParentPlatByServerGBId(platformId);
+ cmderFroPlatform.deviceInfoResponse(parentPlatform, sn, fromHeader.getTag());
+ }
} else {
+ logger.debug("鎺ユ敹鍒癉eviceInfo搴旂瓟娑堟伅");
Device device = storager.queryVideoDevice(deviceId);
if (device == null) {
return;
@@ -426,7 +517,7 @@
// if (deviceListElement == null) { // 瀛樺湪DeviceList鍒欎负鍝嶅簲 catalog锛� 涓嶅瓨鍦―eviceList鍒欎负鏌ヨ璇锋眰
if (name.equalsIgnoreCase("Query")) { // 鍖哄垎鏄疪esponse鈥斺�旀煡璇㈠搷搴旓紝杩樻槸Query鈥斺�旀煡璇㈣姹�
// TODO 鍚庣画灏嗕唬鐮佹媶鍒�
- ParentPlatform parentPlatform = storager.queryParentPlatById(platformId);
+ ParentPlatform parentPlatform = storager.queryParentPlatByServerGBId(platformId);
if (parentPlatform == null) {
response404Ack(evt);
return;
@@ -438,13 +529,44 @@
String sn = snElement.getText();
// 鍑嗗鍥炲閫氶亾淇℃伅
List<ChannelReduce> channelReduces = storager.queryChannelListInParentPlatform(parentPlatform.getServerGBId());
+ // 鏌ヨ鍏宠仈鐨勭洿鎾�氶亾
+ List<GbStream> gbStreams = storager.queryGbStreamListInPlatform(parentPlatform.getServerGBId());
+ int size = channelReduces.size() + gbStreams.size();
+ // 鍥炲绾ц仈鐨勯�氶亾
if (channelReduces.size() > 0) {
for (ChannelReduce channelReduce : channelReduces) {
DeviceChannel deviceChannel = storager.queryChannel(channelReduce.getDeviceId(), channelReduce.getChannelId());
- cmderFroPlatform.catalogQuery(deviceChannel, parentPlatform, sn, fromHeader.getTag(), channelReduces.size());
+ cmderFroPlatform.catalogQuery(deviceChannel, parentPlatform, sn, fromHeader.getTag(), size);
}
}
+ // 鍥炲鐩存挱鐨勯�氶亾
+ if (gbStreams.size() > 0) {
+ for (GbStream gbStream : gbStreams) {
+ DeviceChannel deviceChannel = new DeviceChannel();
+ deviceChannel.setChannelId(gbStream.getGbId());
+ deviceChannel.setName(gbStream.getName());
+ deviceChannel.setLongitude(gbStream.getLongitude());
+ deviceChannel.setLatitude(gbStream.getLatitude());
+ deviceChannel.setDeviceId(parentPlatform.getDeviceGBId());
+ deviceChannel.setManufacture("wvp-pro");
+ deviceChannel.setStatus(gbStream.isStatus()?1:0);
+// deviceChannel.setParentId(parentPlatform.getDeviceGBId());
+ deviceChannel.setRegisterWay(1);
+ deviceChannel.setCivilCode(cmder.getSipConfig().getSipDomain());
+ deviceChannel.setModel("live");
+ deviceChannel.setOwner("wvp-pro");
+// deviceChannel.setAddress("test");
+ deviceChannel.setParental(0);
+ deviceChannel.setSecrecy("0");
+ deviceChannel.setSecrecy("0");
+ cmderFroPlatform.catalogQuery(deviceChannel, parentPlatform, sn, fromHeader.getTag(), size);
+ }
+ }
+ if (size == 0) {
+ // 鍥炲鏃犻�氶亾
+ cmderFroPlatform.catalogQuery(null, parentPlatform, sn, fromHeader.getTag(), size);
+ }
}
@@ -648,14 +770,19 @@
try {
Element rootElement = getRootElement(evt);
String deviceId = XmlUtil.getText(rootElement, "DeviceID");
- // 妫�鏌ヨ澶囨槸鍚﹀瓨鍦紝 涓嶅瓨鍦ㄥ垯涓嶅洖澶�
- if (storager.exists(deviceId)) {
+ Device device = storager.queryVideoDevice(deviceId);
+ // 妫�鏌ヨ澶囨槸鍚﹀瓨鍦ㄥ苟鍦ㄧ嚎锛� 涓嶅瓨鍦ㄥ垯涓嶅洖澶�
+ if (device != null && device.getOnline() == 1) {
// 鍥炲200 OK
responseAck(evt);
if (offLineDetector.isOnline(deviceId)) {
publisher.onlineEventPublish(deviceId, VideoManagerConstants.EVENT_ONLINE_KEEPLIVE);
} else {
}
+ }else {
+ logger.warn("鏀跺埌[ "+deviceId+" ]蹇冭烦淇℃伅, 浣嗘槸璁惧" + (device == null? "涓嶅瓨鍦�":"绂荤嚎") + ", 鍥炲401");
+ Response response = getMessageFactory().createResponse(Response.UNAUTHORIZED, evt.getRequest());
+ getServerTransaction(evt).sendResponse(response);
}
} catch (ParseException | SipException | InvalidArgumentException | DocumentException e) {
e.printStackTrace();
@@ -800,7 +927,7 @@
StreamInfo streamInfo = redisCatchStorage.queryPlaybackByDevice(deviceId, "*");
if (streamInfo != null) {
redisCatchStorage.stopPlayback(streamInfo);
- cmder.streamByeCmd(streamInfo.getStreamId());
+ cmder.streamByeCmd(streamInfo.getDeviceID(), streamInfo.getChannelId());
}
}
} catch (ParseException | SipException | InvalidArgumentException | DocumentException e) {
@@ -808,6 +935,37 @@
}
}
+ /**
+ * 澶勭悊AudioBroadcast璇煶骞挎挱Message
+ *
+ * @param evt
+ */
+ private void processMessageBroadcast(RequestEvent evt) {
+ try {
+ Element rootElement = getRootElement(evt);
+ String deviceId = XmlUtil.getText(rootElement, "DeviceID");
+ // 鍥炲200 OK
+ responseAck(evt);
+ if (rootElement.getName().equals("Response")) {
+ // 姝ゅ鏄鏈钩鍙板彂鍑築roadcast鎸囦护鐨勫簲绛�
+ JSONObject json = new JSONObject();
+ XmlUtil.node2Json(rootElement, json);
+ if (logger.isDebugEnabled()) {
+ logger.debug(json.toJSONString());
+ }
+ RequestMessage msg = new RequestMessage();
+ msg.setDeviceId(deviceId);
+ msg.setType(DeferredResultHolder.CALLBACK_CMD_BROADCAST);
+ msg.setData(json);
+ deferredResultHolder.invokeResult(msg);
+ } else {
+ // 姝ゅ鏄笂绾у彂鍑虹殑Broadcast鎸囦护
+ }
+ } catch (ParseException | SipException | InvalidArgumentException | DocumentException e) {
+ e.printStackTrace();
+ }
+ }
+
/***
* 鍥炲200 OK
--
Gitblit v1.8.0