From 18c3b5931872fe1399440a89e1c17562b16b997c Mon Sep 17 00:00:00 2001
From: lawrencehj <1934378145@qq.com>
Date: 星期三, 03 二月 2021 11:00:24 +0800
Subject: [PATCH] 增加多种信令的支持
---
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java | 437 ++++++++++++++++++++++++++++--
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java | 12
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java | 298 +++++++++++++++++----
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java | 83 ++++-
4 files changed, 721 insertions(+), 109 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
index 574e94c..edf8679 100644
--- 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
@@ -17,7 +17,15 @@
@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";
@@ -29,6 +37,10 @@
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";
+
private Map<String, DeferredResult> map = new ConcurrentHashMap<String, DeferredResult>();
public void put(String key, DeferredResult result) {
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java
index 7e63af7..30fbfe9 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java
@@ -115,24 +115,35 @@
/**
* 闊宠棰戝綍鍍忔帶鍒�
*
- * @param device 瑙嗛璁惧
- * @param channelId 棰勮閫氶亾
+ * @param device 瑙嗛璁惧
+ * @param channelId 棰勮閫氶亾
+ * @param recordCmdStr 褰曞儚鍛戒护锛歊ecord / StopRecord
*/
- boolean recordCmd(Device device,String channelId);
+ boolean recordCmd(Device device, String channelId, String recordCmdStr, SipSubscribe.Event errorEvent);
+ /**
+ * 杩滅▼鍚姩鎺у埗鍛戒护
+ *
+ * @param device 瑙嗛璁惧
+ */
+ boolean teleBootCmd(Device device);
+
/**
* 鎶ヨ甯冮槻/鎾ら槻鍛戒护
*
- * @param device 瑙嗛璁惧
+ * @param device 瑙嗛璁惧
+ * @param setGuard true: SetGuard, false: ResetGuard
*/
- boolean guardCmd(Device device);
+ boolean guardCmd(Device device, String guardCmdStr, SipSubscribe.Event errorEvent);
/**
* 鎶ヨ澶嶄綅鍛戒护
*
- * @param device 瑙嗛璁惧
+ * @param device 瑙嗛璁惧
+ * @param alarmMethod 鎶ヨ鏂瑰紡锛堝彲閫夛級
+ * @param alarmType 鎶ヨ绫诲瀷锛堝彲閫夛級
*/
- boolean alarmCmd(Device device);
+ boolean alarmCmd(Device device, String alarmMethod, String alarmType, SipSubscribe.Event errorEvent);
/**
* 寮哄埗鍏抽敭甯у懡浠�,璁惧鏀跺埌姝ゅ懡浠ゅ簲绔嬪埢鍙戦�佷竴涓狪DR甯�
@@ -140,14 +151,17 @@
* @param device 瑙嗛璁惧
* @param channelId 棰勮閫氶亾
*/
- boolean iFameCmd(Device device,String channelId);
+ boolean iFrameCmd(Device device, String channelId);
/**
* 鐪嬪畧浣嶆帶鍒跺懡浠�
*
- * @param device 瑙嗛璁惧
+ * @param device 瑙嗛璁惧
+ * @param enabled 鐪嬪畧浣嶄娇鑳斤細1 = 寮�鍚紝0 = 鍏抽棴
+ * @param resetTime 鑷姩褰掍綅鏃堕棿闂撮殧锛屽紑鍚湅瀹堜綅鏃朵娇鐢紝鍗曚綅:绉�(s)
+ * @param presetIndex 璋冪敤棰勭疆浣嶇紪鍙凤紝寮�鍚湅瀹堜綅鏃朵娇鐢紝鍙栧�艰寖鍥�0~255
*/
- boolean homePositionCmd(Device device);
+ boolean homePositionCmd(Device device, String channelId, String enabled, String resetTime, String presetIndex, SipSubscribe.Event errorEvent);
/**
* 璁惧閰嶇疆鍛戒护
@@ -156,13 +170,24 @@
*/
boolean deviceConfigCmd(Device device);
+ /**
+ * 璁惧閰嶇疆鍛戒护锛歜asicParam
+ *
+ * @param device 瑙嗛璁惧
+ * @param channelId 閫氶亾缂栫爜锛堝彲閫夛級
+ * @param name 璁惧/閫氶亾鍚嶇О锛堝彲閫夛級
+ * @param expiration 娉ㄥ唽杩囨湡鏃堕棿锛堝彲閫夛級
+ * @param heartBeatInterval 蹇冭烦闂撮殧鏃堕棿锛堝彲閫夛級
+ * @param heartBeatCount 蹇冭烦瓒呮椂娆℃暟锛堝彲閫夛級
+ */
+ boolean deviceBasicConfigCmd(Device device, String channelId, String name, String expiration, String heartBeatInterval, String heartBeatCount, SipSubscribe.Event errorEvent);
/**
* 鏌ヨ璁惧鐘舵��
*
* @param device 瑙嗛璁惧
*/
- boolean deviceStatusQuery(Device device);
+ boolean deviceStatusQuery(Device device, SipSubscribe.Event errorEvent);
/**
* 鏌ヨ璁惧淇℃伅
@@ -191,23 +216,33 @@
/**
* 鏌ヨ鎶ヨ淇℃伅
*
- * @param device 瑙嗛璁惧
+ * @param device 瑙嗛璁惧
+ * @param startPriority 鎶ヨ璧峰绾у埆锛堝彲閫夛級
+ * @param endPriority 鎶ヨ缁堟绾у埆锛堝彲閫夛級
+ * @param alarmMethod 鎶ヨ鏂瑰紡鏉′欢锛堝彲閫夛級
+ * @param alarmType 鎶ヨ绫诲瀷
+ * @param startTime 鎶ヨ鍙戠敓璧峰鏃堕棿锛堝彲閫夛級
+ * @param endTime 鎶ヨ鍙戠敓缁堟鏃堕棿锛堝彲閫夛級
+ * @return true = 鍛戒护鍙戦�佹垚鍔�
*/
- boolean alarmInfoQuery(Device device);
+ boolean alarmInfoQuery(Device device, String startPriority, String endPriority, String alarmMethod,
+ String alarmType, String startTime, String endTime, SipSubscribe.Event errorEvent);
/**
* 鏌ヨ璁惧閰嶇疆
*
- * @param device 瑙嗛璁惧
+ * @param device 瑙嗛璁惧
+ * @param channelId 閫氶亾缂栫爜锛堝彲閫夛級
+ * @param configType 閰嶇疆绫诲瀷锛�
*/
- boolean configQuery(Device device);
+ boolean deviceConfigQuery(Device device, String channelId, String configType, SipSubscribe.Event errorEvent);
/**
* 鏌ヨ璁惧棰勭疆浣嶇疆
*
* @param device 瑙嗛璁惧
*/
- boolean presetQuery(Device device);
+ boolean presetQuery(Device device, String channelId, SipSubscribe.Event errorEvent);
/**
* 鏌ヨ绉诲姩璁惧浣嶇疆鏁版嵁
@@ -222,10 +257,26 @@
* @param device 瑙嗛璁惧
* @param expires 璁㈤槄瓒呮椂鏃堕棿锛堝��=0鏃朵负鍙栨秷璁㈤槄锛�
* @param interval 涓婃姤鏃堕棿闂撮殧
+ * @return true = 鍛戒护鍙戦�佹垚鍔�
*/
boolean mobilePositionSubscribe(Device device, int expires, int interval);
/**
+ * 璁㈤槄銆佸彇娑堣闃呮姤璀︿俊鎭�
+ * @param device 瑙嗛璁惧
+ * @param expires 璁㈤槄杩囨湡鏃堕棿锛�0 = 鍙栨秷璁㈤槄锛�
+ * @param startPriority 鎶ヨ璧峰绾у埆锛堝彲閫夛級
+ * @param endPriority 鎶ヨ缁堟绾у埆锛堝彲閫夛級
+ * @param alarmMethods 鎶ヨ鏂瑰紡鏉′欢锛堝彲閫夛級
+ * @param alarmType 鎶ヨ绫诲瀷
+ * @param startTime 鎶ヨ鍙戠敓璧峰鏃堕棿锛堝彲閫夛級
+ * @param endTime 鎶ヨ鍙戠敓缁堟鏃堕棿锛堝彲閫夛級
+ * @return true = 鍛戒护鍙戦�佹垚鍔�
+ */
+ boolean alarmSubscribe(Device device, int expires, String startPriority, String endPriority, String alarmMethod, String alarmType, String startTime, String endTime);
+
+
+ /**
* 閲婃斁rtpserver
* @param device
* @param channelId
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
index b661c5e..c174455 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
@@ -34,6 +34,8 @@
import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommander;
import com.genersoft.iot.vmp.gb28181.transmit.cmd.SIPRequestHeaderProvider;
import com.genersoft.iot.vmp.gb28181.utils.DateUtil;
+import com.genersoft.iot.vmp.gb28181.utils.NumericUtil;
+import com.genersoft.iot.vmp.gb28181.utils.XmlUtil;
/**
* @Description:璁惧鑳藉姏鎺ュ彛锛岀敤浜庡畾涔夎澶囩殑鎺у埗銆佹煡璇㈣兘鍔�
@@ -577,24 +579,89 @@
/**
* 闊宠棰戝綍鍍忔帶鍒�
*
- * @param device 瑙嗛璁惧
- * @param channelId 棰勮閫氶亾
+ * @param device 瑙嗛璁惧
+ * @param channelId 棰勮閫氶亾
+ * @param recordCmdStr 褰曞儚鍛戒护锛歊ecord / StopRecord
*/
@Override
- public boolean recordCmd(Device device, String channelId) {
- // TODO Auto-generated method stub
- return false;
+ public boolean recordCmd(Device device, String channelId, String recordCmdStr, SipSubscribe.Event errorEvent) {
+ try {
+ StringBuffer cmdXml = new StringBuffer(200);
+ cmdXml.append("<?xml version=\"1.0\" ?>\r\n");
+ cmdXml.append("<Control>\r\n");
+ cmdXml.append("<CmdType>DeviceControl</CmdType>\r\n");
+ cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
+ if (XmlUtil.isEmpty(channelId)) {
+ cmdXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
+ } else {
+ cmdXml.append("<DeviceID>" + channelId + "</DeviceID>\r\n");
+ }
+ cmdXml.append("<RecordCmd>" + recordCmdStr + "</RecordCmd>\r\n");
+ cmdXml.append("</Control>\r\n");
+
+ String tm = Long.toString(System.currentTimeMillis());
+ Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, "FromRecord" + tm, null);
+ transmitRequest(device, request, errorEvent);
+ return true;
+ } catch (SipException | ParseException | InvalidArgumentException e) {
+ e.printStackTrace();
+ return false;
+ }
}
/**
+ * 杩滅▼鍚姩鎺у埗鍛戒护
+ *
+ * @param device 瑙嗛璁惧
+ */
+ @Override
+ public boolean teleBootCmd(Device device) {
+ try {
+ StringBuffer cmdXml = new StringBuffer(200);
+ cmdXml.append("<?xml version=\"1.0\" ?>\r\n");
+ cmdXml.append("<Control>\r\n");
+ cmdXml.append("<CmdType>DeviceControl</CmdType>\r\n");
+ cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
+ cmdXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
+ cmdXml.append("<TeleBoot>Boot</TeleBoot>\r\n");
+ cmdXml.append("</Control>\r\n");
+
+ String tm = Long.toString(System.currentTimeMillis());
+ Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, "FromBoot" + tm, null);
+ transmitRequest(device, request);
+ return true;
+ } catch (SipException | ParseException | InvalidArgumentException e) {
+ e.printStackTrace();
+ return false;
+ }
+ }
+
+ /**
* 鎶ヨ甯冮槻/鎾ら槻鍛戒护
*
- * @param device 瑙嗛璁惧
- */
+ * @param device 瑙嗛璁惧
+ * @param guardCmdStr "SetGuard"/"ResetGuard"
+ */
@Override
- public boolean guardCmd(Device device) {
- // TODO Auto-generated method stub
- return false;
+ public boolean guardCmd(Device device, String guardCmdStr, SipSubscribe.Event errorEvent) {
+ try {
+ StringBuffer cmdXml = new StringBuffer(200);
+ cmdXml.append("<?xml version=\"1.0\" ?>\r\n");
+ cmdXml.append("<Control>\r\n");
+ cmdXml.append("<CmdType>DeviceControl</CmdType>\r\n");
+ cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
+ cmdXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
+ cmdXml.append("<GuardCmd>" + guardCmdStr + "</GuardCmd>\r\n");
+ cmdXml.append("</Control>\r\n");
+
+ String tm = Long.toString(System.currentTimeMillis());
+ Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, "FromGuard" + tm, null);
+ transmitRequest(device, request, errorEvent);
+ return true;
+ } catch (SipException | ParseException | InvalidArgumentException e) {
+ e.printStackTrace();
+ return false;
+ }
}
/**
@@ -603,9 +670,37 @@
* @param device 瑙嗛璁惧
*/
@Override
- public boolean alarmCmd(Device device) {
- // TODO Auto-generated method stub
- return false;
+ public boolean alarmCmd(Device device, String alarmMethod, String alarmType, SipSubscribe.Event errorEvent) {
+ try {
+ StringBuffer cmdXml = new StringBuffer(200);
+ cmdXml.append("<?xml version=\"1.0\" ?>\r\n");
+ cmdXml.append("<Control>\r\n");
+ cmdXml.append("<CmdType>DeviceControl</CmdType>\r\n");
+ cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
+ cmdXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
+ cmdXml.append("<AlarmCmd>ResetAlarm</AlarmCmd>\r\n");
+ if (!XmlUtil.isEmpty(alarmMethod) || !XmlUtil.isEmpty(alarmType)) {
+ cmdXml.append("<Info>\r\n");
+ }
+ if (!XmlUtil.isEmpty(alarmMethod)) {
+ cmdXml.append("<AlarmMethod>" + alarmMethod + "</AlarmMethod>\r\n");
+ }
+ if (!XmlUtil.isEmpty(alarmType)) {
+ cmdXml.append("<AlarmType>" + alarmType + "</AlarmType>\r\n");
+ }
+ if (!XmlUtil.isEmpty(alarmMethod) || !XmlUtil.isEmpty(alarmType)) {
+ cmdXml.append("</Info>\r\n");
+ }
+ cmdXml.append("</Control>\r\n");
+
+ String tm = Long.toString(System.currentTimeMillis());
+ Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, "FromAlarm" + tm, null);
+ transmitRequest(device, request, errorEvent);
+ return true;
+ } catch (SipException | ParseException | InvalidArgumentException e) {
+ e.printStackTrace();
+ return false;
+ }
}
/**
@@ -615,20 +710,79 @@
* @param channelId 棰勮閫氶亾
*/
@Override
- public boolean iFameCmd(Device device, String channelId) {
- // TODO Auto-generated method stub
- return false;
+ public boolean iFrameCmd(Device device, String channelId) {
+ try {
+ StringBuffer cmdXml = new StringBuffer(200);
+ cmdXml.append("<?xml version=\"1.0\" ?>\r\n");
+ cmdXml.append("<Control>\r\n");
+ cmdXml.append("<CmdType>DeviceControl</CmdType>\r\n");
+ cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
+ if (XmlUtil.isEmpty(channelId)) {
+ cmdXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
+ } else {
+ cmdXml.append("<DeviceID>" + channelId + "</DeviceID>\r\n");
+ }
+ cmdXml.append("<IFameCmd>Send</IFameCmd>\r\n");
+ cmdXml.append("</Control>\r\n");
+
+ String tm = Long.toString(System.currentTimeMillis());
+ Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, "FromBoot" + tm, null);
+ transmitRequest(device, request);
+ return true;
+ } catch (SipException | ParseException | InvalidArgumentException e) {
+ e.printStackTrace();
+ return false;
+ }
}
/**
* 鐪嬪畧浣嶆帶鍒跺懡浠�
*
- * @param device 瑙嗛璁惧
+ * @param device 瑙嗛璁惧
+ * @param enabled 鐪嬪畧浣嶄娇鑳斤細1 = 寮�鍚紝0 = 鍏抽棴
+ * @param resetTime 鑷姩褰掍綅鏃堕棿闂撮殧锛屽紑鍚湅瀹堜綅鏃朵娇鐢紝鍗曚綅:绉�(s)
+ * @param presetIndex 璋冪敤棰勭疆浣嶇紪鍙凤紝寮�鍚湅瀹堜綅鏃朵娇鐢紝鍙栧�艰寖鍥�0~255
*/
@Override
- public boolean homePositionCmd(Device device) {
- // TODO Auto-generated method stub
- return false;
+ public boolean homePositionCmd(Device device, String channelId, String enabled, String resetTime, String presetIndex, SipSubscribe.Event errorEvent) {
+ try {
+ StringBuffer cmdXml = new StringBuffer(200);
+ cmdXml.append("<?xml version=\"1.0\" ?>\r\n");
+ cmdXml.append("<Control>\r\n");
+ cmdXml.append("<CmdType>DeviceControl</CmdType>\r\n");
+ cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
+ if (XmlUtil.isEmpty(channelId)) {
+ cmdXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
+ } else {
+ cmdXml.append("<DeviceID>" + channelId + "</DeviceID>\r\n");
+ }
+ cmdXml.append("<HomePosition>\r\n");
+ if (NumericUtil.isInteger(enabled) && (!enabled.equals("0"))) {
+ cmdXml.append("<Enabled>1</Enabled>\r\n");
+ if (NumericUtil.isInteger(resetTime)) {
+ cmdXml.append("<ResetTime>" + resetTime + "</ResetTime>\r\n");
+ } else {
+ cmdXml.append("<ResetTime>0</ResetTime>\r\n");
+ }
+ if (NumericUtil.isInteger(presetIndex)) {
+ cmdXml.append("<PresetIndex>" + presetIndex + "</PresetIndex>\r\n");
+ } else {
+ cmdXml.append("<PresetIndex>0</PresetIndex>\r\n");
+ }
+ } else {
+ cmdXml.append("<Enabled>0</Enabled>\r\n");
+ }
+ cmdXml.append("</HomePosition>\r\n");
+ cmdXml.append("</Control>\r\n");
+
+ String tm = Long.toString(System.currentTimeMillis());
+ Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, "FromGuard" + tm, null);
+ transmitRequest(device, request, errorEvent);
+ return true;
+ } catch (SipException | ParseException | InvalidArgumentException e) {
+ e.printStackTrace();
+ return false;
+ }
}
/**
@@ -643,14 +797,87 @@
}
/**
+ * 璁惧閰嶇疆鍛戒护锛歜asicParam
+ *
+ * @param device 瑙嗛璁惧
+ * @param channelId 閫氶亾缂栫爜锛堝彲閫夛級
+ * @param name 璁惧/閫氶亾鍚嶇О锛堝彲閫夛級
+ * @param expiration 娉ㄥ唽杩囨湡鏃堕棿锛堝彲閫夛級
+ * @param heartBeatInterval 蹇冭烦闂撮殧鏃堕棿锛堝彲閫夛級
+ * @param heartBeatCount 蹇冭烦瓒呮椂娆℃暟锛堝彲閫夛級
+ */
+ @Override
+ public boolean deviceBasicConfigCmd(Device device, String channelId, String name, String expiration,
+ String heartBeatInterval, String heartBeatCount, SipSubscribe.Event errorEvent) {
+ try {
+ StringBuffer cmdXml = new StringBuffer(200);
+ cmdXml.append("<?xml version=\"1.0\" ?>\r\n");
+ cmdXml.append("<Control>\r\n");
+ cmdXml.append("<CmdType>DeviceConfig</CmdType>\r\n");
+ cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
+ if (XmlUtil.isEmpty(channelId)) {
+ cmdXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
+ } else {
+ cmdXml.append("<DeviceID>" + channelId + "</DeviceID>\r\n");
+ }
+ cmdXml.append("<BasicParam>\r\n");
+ if (!XmlUtil.isEmpty(name)) {
+ cmdXml.append("<Name>" + name + "</Name>\r\n");
+ }
+ if (NumericUtil.isInteger(expiration)) {
+ if (Integer.valueOf(expiration) > 0) {
+ cmdXml.append("<Expiration>" + expiration + "</Expiration>\r\n");
+ }
+ }
+ if (NumericUtil.isInteger(heartBeatInterval)) {
+ if (Integer.valueOf(heartBeatInterval) > 0) {
+ cmdXml.append("<HeartBeatInterval>" + heartBeatInterval + "</HeartBeatInterval>\r\n");
+ }
+ }
+ if (NumericUtil.isInteger(heartBeatCount)) {
+ if (Integer.valueOf(heartBeatCount) > 0) {
+ cmdXml.append("<HeartBeatCount>" + heartBeatCount + "</HeartBeatCount>\r\n");
+ }
+ }
+ cmdXml.append("</BasicParam>\r\n");
+ cmdXml.append("</Control>\r\n");
+
+ String tm = Long.toString(System.currentTimeMillis());
+ Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, "FromConfig" + tm, null);
+ transmitRequest(device, request, errorEvent);
+ return true;
+ } catch (SipException | ParseException | InvalidArgumentException e) {
+ e.printStackTrace();
+ return false;
+ }
+ }
+
+ /**
* 鏌ヨ璁惧鐘舵��
*
* @param device 瑙嗛璁惧
*/
@Override
- public boolean deviceStatusQuery(Device device) {
- // TODO Auto-generated method stub
- return false;
+ public boolean deviceStatusQuery(Device device, SipSubscribe.Event errorEvent) {
+ try {
+ StringBuffer catalogXml = new StringBuffer(200);
+ catalogXml.append("<?xml version=\"1.0\" encoding=\"GB2312\"?>\r\n");
+ catalogXml.append("<Query>\r\n");
+ catalogXml.append("<CmdType>DeviceStatus</CmdType>\r\n");
+ catalogXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
+ catalogXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
+ catalogXml.append("</Query>\r\n");
+
+ String tm = Long.toString(System.currentTimeMillis());
+ Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), null, "FromStatus" + tm, null);
+
+ transmitRequest(device, request, errorEvent);
+ return true;
+
+ } catch (SipException | ParseException | InvalidArgumentException e) {
+ e.printStackTrace();
+ return false;
+ }
}
/**
@@ -748,23 +975,86 @@
/**
* 鏌ヨ鎶ヨ淇℃伅
*
- * @param device 瑙嗛璁惧
- */
+ * @param device 瑙嗛璁惧
+ * @param startPriority 鎶ヨ璧峰绾у埆锛堝彲閫夛級
+ * @param endPriority 鎶ヨ缁堟绾у埆锛堝彲閫夛級
+ * @param alarmMethods 鎶ヨ鏂瑰紡鏉′欢锛堝彲閫夛級
+ * @param alarmType 鎶ヨ绫诲瀷
+ * @param startTime 鎶ヨ鍙戠敓璧峰鏃堕棿锛堝彲閫夛級
+ * @param endTime 鎶ヨ鍙戠敓缁堟鏃堕棿锛堝彲閫夛級
+ * @return true = 鍛戒护鍙戦�佹垚鍔�
+ */
@Override
- public boolean alarmInfoQuery(Device device) {
- // TODO Auto-generated method stub
- return false;
+ public boolean alarmInfoQuery(Device device, String startPriority, String endPriority, String alarmMethod, String alarmType,
+ String startTime, String endTime, SipSubscribe.Event errorEvent) {
+ try {
+ StringBuffer cmdXml = new StringBuffer(200);
+ cmdXml.append("<?xml version=\"1.0\" ?>\r\n");
+ cmdXml.append("<Query>\r\n");
+ cmdXml.append("<CmdType>Alarm</CmdType>\r\n");
+ cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
+ cmdXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
+ if (!XmlUtil.isEmpty(startPriority)) {
+ cmdXml.append("<StartAlarmPriority>" + startPriority + "</StartAlarmPriority>\r\n");
+ }
+ if (!XmlUtil.isEmpty(endPriority)) {
+ cmdXml.append("<EndAlarmPriority>" + endPriority + "</EndAlarmPriority>\r\n");
+ }
+ if (!XmlUtil.isEmpty(alarmMethod)) {
+ cmdXml.append("<AlarmMethod>" + alarmMethod + "</AlarmMethod>\r\n");
+ }
+ if (!XmlUtil.isEmpty(alarmType)) {
+ cmdXml.append("<AlarmType>" + alarmType + "</AlarmType>\r\n");
+ }
+ if (!XmlUtil.isEmpty(startTime)) {
+ cmdXml.append("<StartAlarmTime>" + startTime + "</StartAlarmTime>\r\n");
+ }
+ if (!XmlUtil.isEmpty(endTime)) {
+ cmdXml.append("<EndAlarmTime>" + endTime + "</EndAlarmTime>\r\n");
+ }
+ cmdXml.append("</Query>\r\n");
+
+ String tm = Long.toString(System.currentTimeMillis());
+ Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, "FromAlarm" + tm, null);
+ transmitRequest(device, request, errorEvent);
+ return true;
+ } catch (SipException | ParseException | InvalidArgumentException e) {
+ e.printStackTrace();
+ return false;
+ }
}
/**
* 鏌ヨ璁惧閰嶇疆
*
- * @param device 瑙嗛璁惧
- */
+ * @param device 瑙嗛璁惧
+ * @param channelId 閫氶亾缂栫爜锛堝彲閫夛級
+ * @param configType 閰嶇疆绫诲瀷锛�
+ */
@Override
- public boolean configQuery(Device device) {
- // TODO Auto-generated method stub
- return false;
+ public boolean deviceConfigQuery(Device device, String channelId, String configType, SipSubscribe.Event errorEvent) {
+ try {
+ StringBuffer cmdXml = new StringBuffer(200);
+ cmdXml.append("<?xml version=\"1.0\" ?>\r\n");
+ cmdXml.append("<Query>\r\n");
+ cmdXml.append("<CmdType>ConfigDownload</CmdType>\r\n");
+ cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
+ if (XmlUtil.isEmpty(channelId)) {
+ cmdXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
+ } else {
+ cmdXml.append("<DeviceID>" + channelId + "</DeviceID>\r\n");
+ }
+ cmdXml.append("<ConfigType>" + configType + "</ConfigType>\r\n");
+ cmdXml.append("</Query>\r\n");
+
+ String tm = Long.toString(System.currentTimeMillis());
+ Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, "FromConfig" + tm, null);
+ transmitRequest(device, request, errorEvent);
+ return true;
+ } catch (SipException | ParseException | InvalidArgumentException e) {
+ e.printStackTrace();
+ return false;
+ }
}
/**
@@ -773,9 +1063,28 @@
* @param device 瑙嗛璁惧
*/
@Override
- public boolean presetQuery(Device device) {
- // TODO Auto-generated method stub
- return false;
+ public boolean presetQuery(Device device, String channelId, SipSubscribe.Event errorEvent) {
+ try {
+ StringBuffer cmdXml = new StringBuffer(200);
+ cmdXml.append("<?xml version=\"1.0\" ?>\r\n");
+ cmdXml.append("<Query>\r\n");
+ cmdXml.append("<CmdType>PresetQuery</CmdType>\r\n");
+ cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
+ if (XmlUtil.isEmpty(channelId)) {
+ cmdXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
+ } else {
+ cmdXml.append("<DeviceID>" + channelId + "</DeviceID>\r\n");
+ }
+ cmdXml.append("</Query>\r\n");
+
+ String tm = Long.toString(System.currentTimeMillis());
+ Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, "FromConfig" + tm, null);
+ transmitRequest(device, request, errorEvent);
+ return true;
+ } catch (SipException | ParseException | InvalidArgumentException e) {
+ e.printStackTrace();
+ return false;
+ }
}
/**
@@ -813,6 +1122,7 @@
* @param device 瑙嗛璁惧
* @param expires 璁㈤槄瓒呮椂鏃堕棿
* @param interval 涓婃姤鏃堕棿闂撮殧
+ * @return true = 鍛戒护鍙戦�佹垚鍔�
*/
public boolean mobilePositionSubscribe(Device device, int expires, int interval) {
try {
@@ -828,7 +1138,60 @@
subscribePostitionXml.append("</Query>\r\n");
String tm = Long.toString(System.currentTimeMillis());
- Request request = headerProvider.createSubscribeRequest(device, subscribePostitionXml.toString(), "viaTagPos" + tm, "fromTagPos" + tm, null, expires, "Position;id=" + tm.substring(tm.length() - 4));
+ Request request = headerProvider.createSubscribeRequest(device, subscribePostitionXml.toString(), "viaTagPos" + tm, "fromTagPos" + tm, null, expires, "presence" ); //Position;id=" + tm.substring(tm.length() - 4));
+ transmitRequest(device, request);
+
+ return true;
+
+ } catch ( NumberFormatException | ParseException | InvalidArgumentException | SipException e) {
+ e.printStackTrace();
+ return false;
+ }
+ }
+
+ /**
+ * 璁㈤槄銆佸彇娑堣闃呮姤璀︿俊鎭�
+ *
+ * @param device 瑙嗛璁惧
+ * @param expires 璁㈤槄杩囨湡鏃堕棿锛�0 = 鍙栨秷璁㈤槄锛�
+ * @param startPriority 鎶ヨ璧峰绾у埆锛堝彲閫夛級
+ * @param endPriority 鎶ヨ缁堟绾у埆锛堝彲閫夛級
+ * @param alarmMethod 鎶ヨ鏂瑰紡鏉′欢锛堝彲閫夛級
+ * @param alarmType 鎶ヨ绫诲瀷
+ * @param startTime 鎶ヨ鍙戠敓璧峰鏃堕棿锛堝彲閫夛級
+ * @param endTime 鎶ヨ鍙戠敓缁堟鏃堕棿锛堝彲閫夛級
+ * @return true = 鍛戒护鍙戦�佹垚鍔�
+ */
+ public boolean alarmSubscribe(Device device, int expires, String startPriority, String endPriority, String alarmMethod, String alarmType, String startTime, String endTime) {
+ try {
+ StringBuffer cmdXml = new StringBuffer(200);
+ cmdXml.append("<?xml version=\"1.0\" encoding=\"GB2312\"?>\r\n");
+ cmdXml.append("<Query>\r\n");
+ cmdXml.append("<CmdType>Alarm</CmdType>\r\n");
+ cmdXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
+ cmdXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
+ if (!XmlUtil.isEmpty(startPriority)) {
+ cmdXml.append("<StartAlarmPriority>" + startPriority + "</StartAlarmPriority>\r\n");
+ }
+ if (!XmlUtil.isEmpty(endPriority)) {
+ cmdXml.append("<EndAlarmPriority>" + endPriority + "</EndAlarmPriority>\r\n");
+ }
+ if (!XmlUtil.isEmpty(alarmMethod)) {
+ cmdXml.append("<AlarmMethod>" + alarmMethod + "</AlarmMethod>\r\n");
+ }
+ if (!XmlUtil.isEmpty(alarmType)) {
+ cmdXml.append("<AlarmType>" + alarmType + "</AlarmType>\r\n");
+ }
+ if (!XmlUtil.isEmpty(startTime)) {
+ cmdXml.append("<StartAlarmTime>" + startTime + "</StartAlarmTime>\r\n");
+ }
+ if (!XmlUtil.isEmpty(endTime)) {
+ cmdXml.append("<EndAlarmTime>" + endTime + "</EndAlarmTime>\r\n");
+ }
+ cmdXml.append("</Query>\r\n");
+
+ String tm = Long.toString(System.currentTimeMillis());
+ Request request = headerProvider.createSubscribeRequest(device, cmdXml.toString(), "viaTagPos" + tm, "fromTagPos" + tm, null, expires, "presence" );
transmitRequest(device, request);
return true;
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 1c7c775..c865ad3 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
@@ -10,6 +10,7 @@
import javax.sip.message.Request;
import javax.sip.message.Response;
+import com.alibaba.fastjson.JSONObject;
import com.genersoft.iot.vmp.common.StreamInfo;
import com.genersoft.iot.vmp.common.VideoManagerConstants;
import com.genersoft.iot.vmp.conf.UserSetup;
@@ -78,9 +79,12 @@
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_DEVICE_STATUS = "DeviceStatus";
+ private static final String MESSAGE_DEVICE_STATUS = "DeviceStatus";
+ private static final String MESSAGE_DEVICE_CONTROL = "DeviceControl";
+ private static final String MESSAGE_DEVICE_CONFIG = "DeviceConfig";
private static final String MESSAGE_MOBILE_POSITION = "MobilePosition";
// private static final String MESSAGE_MOBILE_POSITION_INTERVAL = "Interval";
+ private static final String MESSAGE_PRESET_QUERY = "PresetQuery";
/**
* 澶勭悊MESSAGE璇锋眰
@@ -99,12 +103,22 @@
processMessageKeepAlive(evt);
} else if (MESSAGE_CONFIG_DOWNLOAD.equals(cmd)) {
logger.info("鎺ユ敹鍒癈onfigDownload娑堟伅");
+ processMessageConfigDownload(evt);
} else if (MESSAGE_CATALOG.equals(cmd)) {
logger.info("鎺ユ敹鍒癈atalog娑堟伅");
processMessageCatalogList(evt);
} else if (MESSAGE_DEVICE_INFO.equals(cmd)) {
logger.info("鎺ユ敹鍒癉eviceInfo娑堟伅");
processMessageDeviceInfo(evt);
+ } else if (MESSAGE_DEVICE_STATUS.equals(cmd)) {
+ logger.info("鎺ユ敹鍒癉eviceStatus娑堟伅");
+ processMessageDeviceStatus(evt);
+ } else if (MESSAGE_DEVICE_CONTROL.equals(cmd)) {
+ logger.info("鎺ユ敹鍒癉eviceControl娑堟伅");
+ processMessageDeviceControl(evt);
+ } else if (MESSAGE_DEVICE_CONFIG.equals(cmd)) {
+ logger.info("鎺ユ敹鍒癉eviceConfig娑堟伅");
+ processMessageDeviceConfig(evt);
} else if (MESSAGE_ALARM.equals(cmd)) {
logger.info("鎺ユ敹鍒癆larm娑堟伅");
processMessageAlarm(evt);
@@ -117,6 +131,9 @@
} else if (MESSAGE_MOBILE_POSITION.equals(cmd)) {
logger.info("鎺ユ敹鍒癕obilePosition娑堟伅");
processMessageMobilePosition(evt);
+ } else if (MESSAGE_PRESET_QUERY.equals(cmd)) {
+ logger.info("鎺ユ敹鍒癙resetQuery娑堟伅");
+ processMessagePresetQuery(evt);
} else {
logger.info("鎺ユ敹鍒版秷鎭細" + cmd);
responseAck(evt);
@@ -133,7 +150,6 @@
*/
private void processMessageMobilePosition(RequestEvent evt) {
try {
- //鍥炲 200 OK
Element rootElement = getRootElement(evt);
MobilePosition mobilePosition = new MobilePosition();
Element deviceIdElement = rootElement.element("DeviceID");
@@ -174,12 +190,7 @@
storager.clearMobilePositionsByDeviceId(deviceId);
}
storager.insertMobilePosition(mobilePosition);
- // List<MobilePosition> all= storager.queryMobilePositions(deviceId, "2021-01-23T00:00:00", "2021-02-28T23:59:59");
- // all= storager.queryMobilePositions(deviceId, null, "2021-01-24T23:59:59");
- // all= storager.queryMobilePositions(deviceId, "2021-01-24T00:00:00", null);
- // //logger.debug(all.toString());
- // MobilePosition mp = storager.queryLatestPosition(deviceId);
- // logger.debug("鏈�鏂颁綅缃細" + mp.getLongitude() + ", " + mp.getLatitude());
+ //鍥炲 200 OK
responseAck(evt);
} catch (DocumentException | SipException | InvalidArgumentException | ParseException e) {
e.printStackTrace();
@@ -187,7 +198,169 @@
}
/**
- * 鏀跺埌deviceInfo璁惧淇℃伅璇锋眰 澶勭悊
+ * 澶勭悊DeviceStatus璁惧鐘舵�丮essage
+ *
+ * @param evt
+ */
+ 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);
+
+ if (offLineDetector.isOnline(deviceId)) {
+ publisher.onlineEventPublish(deviceId, VideoManagerConstants.EVENT_ONLINE_KEEPLIVE);
+ } else {
+ }
+ }
+ } catch (ParseException | SipException | InvalidArgumentException | DocumentException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 澶勭悊DeviceControl璁惧鐘舵�丮essage
+ *
+ * @param evt
+ */
+ private void processMessageDeviceControl(RequestEvent evt) {
+ try {
+ Element rootElement = getRootElement(evt);
+ String deviceId = XmlUtil.getText(rootElement, "DeviceID");
+ String result = XmlUtil.getText(rootElement, "Result");
+ // 鍥炲200 OK
+ responseAck(evt);
+ if (!XmlUtil.isEmpty(result)) {
+ // 姝ゅ鏄鏈钩鍙板彂鍑篋eviceControl鎸囦护鐨勫簲绛�
+ 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_DEVICECONTROL);
+ msg.setData(json);
+ deferredResultHolder.invokeResult(msg);
+ } else {
+ // 姝ゅ鏄笂绾у彂鍑虹殑DeviceControl鎸囦护
+ }
+ } catch (ParseException | SipException | InvalidArgumentException | DocumentException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 澶勭悊DeviceConfig璁惧鐘舵�丮essage
+ *
+ * @param evt
+ */
+ private void processMessageDeviceConfig(RequestEvent evt) {
+ try {
+ Element rootElement = getRootElement(evt);
+ String deviceId = XmlUtil.getText(rootElement, "DeviceID");
+ String result = XmlUtil.getText(rootElement, "Result");
+ // 鍥炲200 OK
+ responseAck(evt);
+ //if (!XmlUtil.isEmpty(result)) {
+ // 姝ゅ鏄鏈钩鍙板彂鍑篋eviceControl鎸囦护鐨勫簲绛�
+ 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_DEVICECONFIG);
+ msg.setData(json);
+ deferredResultHolder.invokeResult(msg);
+ // } else {
+ // // 姝ゅ鏄笂绾у彂鍑虹殑DeviceConfig鎸囦护
+ //}
+ } catch (ParseException | SipException | InvalidArgumentException | DocumentException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 澶勭悊ConfigDownload璁惧鐘舵�丮essage
+ *
+ * @param evt
+ */
+ private void processMessageConfigDownload(RequestEvent evt) {
+ try {
+ Element rootElement = getRootElement(evt);
+ String deviceId = XmlUtil.getText(rootElement, "DeviceID");
+ String result = XmlUtil.getText(rootElement, "Result");
+ // 鍥炲200 OK
+ responseAck(evt);
+ //if (!XmlUtil.isEmpty(result)) {
+ // 姝ゅ鏄鏈钩鍙板彂鍑篋eviceControl鎸囦护鐨勫簲绛�
+ 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_CONFIGDOWNLOAD);
+ msg.setData(json);
+ deferredResultHolder.invokeResult(msg);
+ // } else {
+ // // 姝ゅ鏄笂绾у彂鍑虹殑DeviceConfig鎸囦护
+ //}
+ } catch (ParseException | SipException | InvalidArgumentException | DocumentException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 澶勭悊PresetQuery棰勭疆浣嶅垪琛∕essage
+ *
+ * @param evt
+ */
+ private void processMessagePresetQuery(RequestEvent evt) {
+ try {
+ Element rootElement = getRootElement(evt);
+ String deviceId = XmlUtil.getText(rootElement, "DeviceID");
+ String result = XmlUtil.getText(rootElement, "Result");
+ // 鍥炲200 OK
+ responseAck(evt);
+ if (rootElement.getName().equals("Response")) {// !XmlUtil.isEmpty(result)) {
+ // 姝ゅ鏄鏈钩鍙板彂鍑篋eviceControl鎸囦护鐨勫簲绛�
+ 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_PRESETQUERY);
+ msg.setData(json);
+ deferredResultHolder.invokeResult(msg);
+ } else {
+ // 姝ゅ鏄笂绾у彂鍑虹殑DeviceControl鎸囦护
+ }
+ } catch (ParseException | SipException | InvalidArgumentException | DocumentException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 澶勭悊DeviceInfo璁惧淇℃伅Message
*
* @param evt
*/
@@ -354,56 +527,72 @@
Element rootElement = getRootElement(evt);
Element deviceIdElement = rootElement.element("DeviceID");
String deviceId = deviceIdElement.getText().toString();
+ // 鍥炲200 OK
+ responseAck(evt);
Device device = storager.queryVideoDevice(deviceId);
if (device == null) {
return;
}
- DeviceAlarm deviceAlarm = new DeviceAlarm();
- deviceAlarm.setDeviceId(deviceId);
- deviceAlarm.setAlarmPriority(XmlUtil.getText(rootElement, "AlarmPriority"));
- deviceAlarm.setAlarmMethod(XmlUtil.getText(rootElement, "AlarmMethod"));
- deviceAlarm.setAlarmTime(XmlUtil.getText(rootElement, "AlarmTime"));
- if (XmlUtil.getText(rootElement, "AlarmDescription") == null) {
- deviceAlarm.setAlarmDescription("");
- } else {
- deviceAlarm.setAlarmDescription(XmlUtil.getText(rootElement, "AlarmDescription"));
- }
- if (NumericUtil.isDouble(XmlUtil.getText(rootElement, "Longitude"))) {
- deviceAlarm.setLongitude(Double.parseDouble(XmlUtil.getText(rootElement, "Longitude")));
- } else {
- deviceAlarm.setLongitude(0.00);
- }
- if (NumericUtil.isDouble(XmlUtil.getText(rootElement, "Latitude"))) {
- deviceAlarm.setLatitude(Double.parseDouble(XmlUtil.getText(rootElement, "Latitude")));
- } else {
- deviceAlarm.setLatitude(0.00);
- }
- if ( deviceAlarm.getAlarmMethod().equals("4")) {
- MobilePosition mobilePosition = new MobilePosition();
- mobilePosition.setDeviceId(deviceAlarm.getDeviceId());
- mobilePosition.setTime(deviceAlarm.getAlarmTime());
- mobilePosition.setLongitude(deviceAlarm.getLongitude());
- mobilePosition.setLatitude(deviceAlarm.getLatitude());
- mobilePosition.setReportSource("GPS Alarm");
- BaiduPoint bp = new BaiduPoint();
- bp = GpsUtil.Wgs84ToBd09(String.valueOf(mobilePosition.getLongitude()), String.valueOf(mobilePosition.getLatitude()));
- logger.info("鐧惧害鍧愭爣锛�" + bp.getBdLng() + ", " + bp.getBdLat());
- mobilePosition.setGeodeticSystem("BD-09");
- mobilePosition.setCnLng(bp.getBdLng());
- mobilePosition.setCnLat(bp.getBdLat());
- if (!userSetup.getSavePositionHistory()) {
- storager.clearMobilePositionsByDeviceId(deviceId);
+ if (rootElement.getName().equals("Notify")) { // 澶勭悊鎶ヨ閫氱煡
+ DeviceAlarm deviceAlarm = new DeviceAlarm();
+ deviceAlarm.setDeviceId(deviceId);
+ deviceAlarm.setAlarmPriority(XmlUtil.getText(rootElement, "AlarmPriority"));
+ deviceAlarm.setAlarmMethod(XmlUtil.getText(rootElement, "AlarmMethod"));
+ deviceAlarm.setAlarmTime(XmlUtil.getText(rootElement, "AlarmTime"));
+ if (XmlUtil.getText(rootElement, "AlarmDescription") == null) {
+ deviceAlarm.setAlarmDescription("");
+ } else {
+ deviceAlarm.setAlarmDescription(XmlUtil.getText(rootElement, "AlarmDescription"));
}
- storager.insertMobilePosition(mobilePosition);
- }
- // TODO: 闇�瑕佸疄鐜板瓨鍌ㄦ姤璀︿俊鎭�佹姤璀﹀垎绫�
-
- // 鍥炲200 OK
- responseAck(evt);
- if (offLineDetector.isOnline(deviceId)) {
- publisher.deviceAlarmEventPublish(deviceAlarm);
+ if (NumericUtil.isDouble(XmlUtil.getText(rootElement, "Longitude"))) {
+ deviceAlarm.setLongitude(Double.parseDouble(XmlUtil.getText(rootElement, "Longitude")));
+ } else {
+ deviceAlarm.setLongitude(0.00);
+ }
+ if (NumericUtil.isDouble(XmlUtil.getText(rootElement, "Latitude"))) {
+ deviceAlarm.setLatitude(Double.parseDouble(XmlUtil.getText(rootElement, "Latitude")));
+ } else {
+ deviceAlarm.setLatitude(0.00);
+ }
+
+ if (!XmlUtil.isEmpty(deviceAlarm.getAlarmMethod())) {
+ if ( deviceAlarm.getAlarmMethod().equals("4")) {
+ MobilePosition mobilePosition = new MobilePosition();
+ mobilePosition.setDeviceId(deviceAlarm.getDeviceId());
+ mobilePosition.setTime(deviceAlarm.getAlarmTime());
+ mobilePosition.setLongitude(deviceAlarm.getLongitude());
+ mobilePosition.setLatitude(deviceAlarm.getLatitude());
+ mobilePosition.setReportSource("GPS Alarm");
+ BaiduPoint bp = new BaiduPoint();
+ bp = GpsUtil.Wgs84ToBd09(String.valueOf(mobilePosition.getLongitude()), String.valueOf(mobilePosition.getLatitude()));
+ logger.info("鐧惧害鍧愭爣锛�" + bp.getBdLng() + ", " + bp.getBdLat());
+ mobilePosition.setGeodeticSystem("BD-09");
+ mobilePosition.setCnLng(bp.getBdLng());
+ mobilePosition.setCnLat(bp.getBdLat());
+ if (!userSetup.getSavePositionHistory()) {
+ storager.clearMobilePositionsByDeviceId(deviceId);
+ }
+ storager.insertMobilePosition(mobilePosition);
+ }
+ }
+ // TODO: 闇�瑕佸疄鐜板瓨鍌ㄦ姤璀︿俊鎭�佹姤璀﹀垎绫�
+
+ if (offLineDetector.isOnline(deviceId)) {
+ publisher.deviceAlarmEventPublish(deviceAlarm);
+ }
+ } else if (rootElement.getName().equals("Response")) { // 澶勭悊鎶ヨ鏌ヨ鍝嶅簲
+ 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_ALARM);
+ msg.setData(json);
+ deferredResultHolder.invokeResult(msg);
}
} catch (DocumentException | SipException | InvalidArgumentException | ParseException e) {
// } catch (DocumentException e) {
@@ -435,7 +624,7 @@
}
/***
- * 鏀跺埌catalog璁惧鐩綍鍒楄〃璇锋眰 澶勭悊 TODO 杩囨湡鏃堕棿鏆傛椂鍐欐180绉掞紝鍚庣画涓嶥eferredResult瓒呮椂鏃堕棿淇濇寔涓�鑷�
+ * 澶勭悊RecordInfo璁惧褰曞儚鍒楄〃Message璇锋眰 TODO 杩囨湡鏃堕棿鏆傛椂鍐欐180绉掞紝鍚庣画涓嶥eferredResult瓒呮椂鏃堕棿淇濇寔涓�鑷�
*
* @param evt
*/
@@ -522,12 +711,9 @@
// 2銆佹湁褰曞儚鏁版嵁锛屼笖绗竴娆″嵆鏀跺埌瀹屾暣鏁版嵁锛岃繑鍥炲搷搴旀暟鎹紝鏃爎edis鎿嶄綔
// 3銆佹湁褰曞儚鏁版嵁锛屽湪瓒呮椂鏃堕棿鍐呮敹鍒板娆″寘缁勮鍚庢暟閲忚冻澶燂紝杩斿洖鏁版嵁
- // 瀵硅褰曡繘琛屾帓搴�
RequestMessage msg = new RequestMessage();
msg.setDeviceId(deviceId);
msg.setType(DeferredResultHolder.CALLBACK_CMD_RECORDINFO);
- // // 鑷劧椤哄簭鎺掑簭, 鍏冪礌杩涜鍗囧簭鎺掑垪
- // recordInfo.getRecordList().sort(Comparator.naturalOrder());
msg.setData(recordInfo);
deferredResultHolder.invokeResult(msg);
logger.info("澶勭悊瀹屾垚锛岃繑鍥炵粨鏋�");
--
Gitblit v1.8.0