Browse Source

完善目录订阅

pull/243/head
648540858 3 years ago
parent
commit
f559e6a395
  1. 4
      src/main/java/com/genersoft/iot/vmp/conf/ThreadPoolTaskConfig.java
  2. 31
      src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java
  3. 2
      src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java

4
src/main/java/com/genersoft/iot/vmp/conf/ThreadPoolTaskConfig.java

@ -8,7 +8,7 @@ import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.ThreadPoolExecutor;
@Configuration @Configuration
@EnableAsync @EnableAsync(proxyTargetClass = true)
public class ThreadPoolTaskConfig { public class ThreadPoolTaskConfig {
/** /**
@ -36,7 +36,7 @@ public class ThreadPoolTaskConfig {
/** /**
* 线程池名前缀 * 线程池名前缀
*/ */
private static final String threadNamePrefix = "hdl-uhi-service-"; private static final String threadNamePrefix = "wvp-sip-handle-";
@Bean("taskExecutor") // bean的名称,默认为首字母小写的方法名 @Bean("taskExecutor") // bean的名称,默认为首字母小写的方法名
public ThreadPoolTaskExecutor taskExecutor() { public ThreadPoolTaskExecutor taskExecutor() {

31
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java

@ -230,8 +230,6 @@ public class NotifyRequestProcessor extends SIPRequestProcessorParent implements
String deviceId = SipUtils.getUserIdFromFromHeader(fromHeader); String deviceId = SipUtils.getUserIdFromFromHeader(fromHeader);
Element rootElement = getRootElement(evt); Element rootElement = getRootElement(evt);
Element deviceIdElement = rootElement.element("DeviceID");
String channelId = deviceIdElement.getText();
Device device = storager.queryVideoDevice(deviceId); Device device = storager.queryVideoDevice(deviceId);
if (device == null) { if (device == null) {
return; return;
@ -254,22 +252,23 @@ public class NotifyRequestProcessor extends SIPRequestProcessorParent implements
continue; continue;
} }
Element eventElement = itemDevice.element("Event"); Element eventElement = itemDevice.element("Event");
DeviceChannel channel = channelContentHander(itemDevice);
switch (eventElement.getText().toUpperCase()) { switch (eventElement.getText().toUpperCase()) {
case "ON" : // 上线 case "ON" : // 上线
logger.info("收到来自设备【{}】的通道上线【{}】通知", device.getDeviceId(), channelId); logger.info("收到来自设备【{}】的通道【{}】上线通知", device.getDeviceId(), channel.getChannelId());
storager.deviceChannelOnline(deviceId, channelId); storager.deviceChannelOnline(deviceId, channel.getChannelId());
// 回复200 OK // 回复200 OK
responseAck(evt, Response.OK); responseAck(evt, Response.OK);
break; break;
case "OFF" : // 离线 case "OFF" : // 离线
logger.info("收到来自设备【{}】的通道离线【{}】通知", device.getDeviceId(), channelId); logger.info("收到来自设备【{}】的通道【{}】离线通知", device.getDeviceId(), channel.getChannelId());
storager.deviceChannelOffline(deviceId, channelId); storager.deviceChannelOffline(deviceId, channel.getChannelId());
// 回复200 OK // 回复200 OK
responseAck(evt, Response.OK); responseAck(evt, Response.OK);
break; break;
case "VLOST" : // 视频丢失 case "VLOST" : // 视频丢失
logger.info("收到来自设备【{}】的通道视频丢失【{}】通知", device.getDeviceId(), channelId); logger.info("收到来自设备【{}】的通道【{}】视频丢失通知", device.getDeviceId(), channel.getChannelId());
storager.deviceChannelOffline(deviceId, channelId); storager.deviceChannelOffline(deviceId, channel.getChannelId());
// 回复200 OK // 回复200 OK
responseAck(evt, Response.OK); responseAck(evt, Response.OK);
break; break;
@ -278,19 +277,17 @@ public class NotifyRequestProcessor extends SIPRequestProcessorParent implements
responseAck(evt, Response.OK); responseAck(evt, Response.OK);
break; break;
case "ADD" : // 增加 case "ADD" : // 增加
logger.info("收到来自设备【{}】的增加通道【{}】通知", device.getDeviceId(), channelId); logger.info("收到来自设备【{}】的增加通道【{}】通知", device.getDeviceId(), channel.getChannelId());
DeviceChannel deviceChannel = channelContentHander(itemDevice, channelId); storager.updateChannel(deviceId, channel);
storager.updateChannel(deviceId, deviceChannel);
responseAck(evt, Response.OK); responseAck(evt, Response.OK);
break; break;
case "DEL" : // 删除 case "DEL" : // 删除
logger.info("收到来自设备【{}】的删除通道【{}】通知", device.getDeviceId(), channelId); logger.info("收到来自设备【{}】的删除通道【{}】通知", device.getDeviceId(), channel.getChannelId());
storager.delChannel(deviceId, channelId); storager.delChannel(deviceId, channel.getChannelId());
responseAck(evt, Response.OK); responseAck(evt, Response.OK);
break; break;
case "UPDATE" : // 更新 case "UPDATE" : // 更新
logger.info("收到来自设备【{}】的更新通道【{}】通知", device.getDeviceId(), channelId); logger.info("收到来自设备【{}】的更新通道【{}】通知", device.getDeviceId(), channel.getChannelId());
DeviceChannel channel = channelContentHander(itemDevice, channelId);
storager.updateChannel(deviceId, channel); storager.updateChannel(deviceId, channel);
responseAck(evt, Response.OK); responseAck(evt, Response.OK);
break; break;
@ -316,13 +313,15 @@ public class NotifyRequestProcessor extends SIPRequestProcessorParent implements
} }
} }
public DeviceChannel channelContentHander(Element itemDevice, String channelId){ public DeviceChannel channelContentHander(Element itemDevice){
Element channdelNameElement = itemDevice.element("Name"); Element channdelNameElement = itemDevice.element("Name");
String channelName = channdelNameElement != null ? channdelNameElement.getTextTrim().toString() : ""; String channelName = channdelNameElement != null ? channdelNameElement.getTextTrim().toString() : "";
Element statusElement = itemDevice.element("Status"); Element statusElement = itemDevice.element("Status");
String status = statusElement != null ? statusElement.getTextTrim().toString() : "ON"; String status = statusElement != null ? statusElement.getTextTrim().toString() : "ON";
DeviceChannel deviceChannel = new DeviceChannel(); DeviceChannel deviceChannel = new DeviceChannel();
deviceChannel.setName(channelName); deviceChannel.setName(channelName);
Element channdelIdElement = itemDevice.element("DeviceID");
String channelId = channdelIdElement != null ? channdelIdElement.getTextTrim().toString() : "";
deviceChannel.setChannelId(channelId); deviceChannel.setChannelId(channelId);
// ONLINE OFFLINE HIKVISION DS-7716N-E4 NVR的兼容性处理 // ONLINE OFFLINE HIKVISION DS-7716N-E4 NVR的兼容性处理
if (status.equals("ON") || status.equals("On") || status.equals("ONLINE")) { if (status.equals("ON") || status.equals("On") || status.equals("ONLINE")) {

2
src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java

@ -47,7 +47,7 @@ public class DeviceServiceImpl implements IDeviceService {
if (device == null || device.getSubscribeCycleForCatalog() < 0) { if (device == null || device.getSubscribeCycleForCatalog() < 0) {
return false; return false;
} }
logger.info("移除目录订阅【{}】", device.getDeviceId()); logger.info("移除目录订阅: {}", device.getDeviceId());
dynamicTask.stopCron(device.getDeviceId()); dynamicTask.stopCron(device.getDeviceId());
device.setSubscribeCycleForCatalog(0); device.setSubscribeCycleForCatalog(0);
sipCommander.catalogSubscribe(device, null, null); sipCommander.catalogSubscribe(device, null, null);

Loading…
Cancel
Save