From ca5139929b8b5853229ca3d63e2bca1ce82fa0ab Mon Sep 17 00:00:00 2001 From: songww <songww@inspur.com> Date: 星期三, 13 五月 2020 14:55:06 +0800 Subject: [PATCH] 尝试修复catalog获取失败。服务重启后设备未注册仍上报keeplive处理 --- src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java | 68 ++++++++++++++++++++++++---------- 1 files changed, 48 insertions(+), 20 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 9a39d5c..8a7c6cf 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 @@ -30,6 +30,7 @@ import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; import com.genersoft.iot.vmp.gb28181.bean.RecordInfo; import com.genersoft.iot.vmp.gb28181.bean.RecordItem; +import com.genersoft.iot.vmp.gb28181.event.DeviceOffLineDetector; import com.genersoft.iot.vmp.gb28181.event.EventPublisher; import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder; import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage; @@ -69,7 +70,20 @@ @Autowired private DeferredResultHolder deferredResultHolder; + @Autowired + private DeviceOffLineDetector offLineDetector; + private final static String CACHE_RECORDINFO_KEY = "CACHE_RECORDINFO_"; + + private static final String MESSAGE_CATALOG = "Catalog"; + private static final String MESSAGE_DEVICE_INFO = "DeviceInfo"; + private static final String MESSAGE_KEEP_ALIVE = "Keepalive"; + private static final String MESSAGE_ALARM = "Alarm"; + private static final String MESSAGE_RECORD_INFO = "RecordInfo"; +// private static final String MESSAGE_BROADCAST = "Broadcast"; +// private static final String MESSAGE_DEVICE_STATUS = "DeviceStatus"; +// private static final String MESSAGE_MOBILE_POSITION = "MobilePosition"; +// private static final String MESSAGE_MOBILE_POSITION_INTERVAL = "Interval"; /** * 澶勭悊MESSAGE璇锋眰 @@ -85,22 +99,31 @@ this.transaction = transaction; Request request = evt.getRequest(); - - if (new String(request.getRawContent()).contains("<CmdType>Keepalive</CmdType>")) { - logger.info("鎺ユ敹鍒癒eepAlive娑堟伅"); - processMessageKeepAlive(evt); - } else if (new String(request.getRawContent()).contains("<CmdType>Catalog</CmdType>")) { - logger.info("鎺ユ敹鍒癈atalog娑堟伅"); - processMessageCatalogList(evt); - } else if (new String(request.getRawContent()).contains("<CmdType>DeviceInfo</CmdType>")) { - logger.info("鎺ユ敹鍒癉eviceInfo娑堟伅"); - processMessageDeviceInfo(evt); - } else if (new String(request.getRawContent()).contains("<CmdType>Alarm</CmdType>")) { - logger.info("鎺ユ敹鍒癆larm娑堟伅"); - processMessageAlarm(evt); - } else if (new String(request.getRawContent()).contains("<CmdType>RecordInfo</CmdType>")) { - logger.info("鎺ユ敹鍒癛ecordInfo娑堟伅"); - processMessageRecordInfo(evt); + SAXReader reader = new SAXReader(); + Document xml; + try { + xml = reader.read(new ByteArrayInputStream(request.getRawContent())); + Element rootElement = xml.getRootElement(); + String cmd = rootElement.element("CmdType").getStringValue(); + + if (MESSAGE_KEEP_ALIVE.equals(cmd)) { + logger.info("鎺ユ敹鍒癒eepAlive娑堟伅"); + processMessageKeepAlive(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_ALARM.equals(cmd)) { + logger.info("鎺ユ敹鍒癆larm娑堟伅"); + processMessageAlarm(evt); + } else if (MESSAGE_RECORD_INFO.equals(cmd)) { + logger.info("鎺ユ敹鍒癛ecordInfo娑堟伅"); + processMessageRecordInfo(evt); + } + } catch (DocumentException e) { + e.printStackTrace(); } } @@ -247,12 +270,17 @@ */ private void processMessageKeepAlive(RequestEvent evt){ try { - Request request = evt.getRequest(); - Response response = layer.getMessageFactory().createResponse(Response.OK,request); Element rootElement = getRootElement(evt); - Element deviceIdElement = rootElement.element("DeviceID"); + String deviceId = XmlUtil.getText(rootElement,"DeviceID"); + Request request = evt.getRequest(); + Response response = null; + if (offLineDetector.isOnline(deviceId)) { + response = layer.getMessageFactory().createResponse(Response.OK,request); + publisher.onlineEventPublish(deviceId, VideoManagerConstants.EVENT_ONLINE_KEEPLIVE); + } else { + response = layer.getMessageFactory().createResponse(Response.BAD_REQUEST,request); + } transaction.sendResponse(response); - publisher.onlineEventPublish(deviceIdElement.getText(), VideoManagerConstants.EVENT_ONLINE_KEEPLIVE); } catch (ParseException | SipException | InvalidArgumentException | DocumentException e) { e.printStackTrace(); } -- Gitblit v1.8.0