From 4abeadc6364c760d0b79ca91dc8c060b2616dc23 Mon Sep 17 00:00:00 2001 From: swwheihei <swwheihei@163.com> Date: 星期六, 18 七月 2020 11:37:24 +0800 Subject: [PATCH] 解决无法启动的问题 --- src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java | 124 ++++++++++++++++++++++++++--------------- 1 files changed, 79 insertions(+), 45 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..7038590 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,7 +10,6 @@ import javax.sip.InvalidArgumentException; import javax.sip.RequestEvent; -import javax.sip.ServerTransaction; import javax.sip.SipException; import javax.sip.message.Request; import javax.sip.message.Response; @@ -22,19 +21,18 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; import com.genersoft.iot.vmp.common.VideoManagerConstants; -import com.genersoft.iot.vmp.gb28181.SipLayer; import com.genersoft.iot.vmp.gb28181.bean.Device; 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; import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander; -import com.genersoft.iot.vmp.gb28181.transmit.request.ISIPRequestProcessor; +import com.genersoft.iot.vmp.gb28181.transmit.request.SIPRequestAbstractProcessor; import com.genersoft.iot.vmp.gb28181.utils.DateUtil; import com.genersoft.iot.vmp.gb28181.utils.XmlUtil; import com.genersoft.iot.vmp.storager.IVideoManagerStorager; @@ -42,34 +40,37 @@ /** * @Description:MESSAGE璇锋眰澶勭悊鍣� - * @author: songww + * @author: swwheihei * @date: 2020骞�5鏈�3鏃� 涓嬪崍5:32:41 */ -@Component -public class MessageRequestProcessor implements ISIPRequestProcessor { +public class MessageRequestProcessor extends SIPRequestAbstractProcessor { private final static Logger logger = LoggerFactory.getLogger(MessageRequestProcessor.class); - private ServerTransaction transaction; - - private SipLayer layer; - - @Autowired private SIPCommander cmder; - @Autowired private IVideoManagerStorager storager; - @Autowired private EventPublisher publisher; - @Autowired private RedisUtil redis; - @Autowired private DeferredResultHolder deferredResultHolder; + private DeviceOffLineDetector offLineDetector; + private final static String CACHE_RECORDINFO_KEY = "CACHE_RECORDINFO_"; + + private static final String MESSAGE_KEEP_ALIVE = "Keepalive"; + private static final String MESSAGE_CONFIG_DOWNLOAD = "ConfigDownload"; + private static final String MESSAGE_CATALOG = "Catalog"; + private static final String MESSAGE_DEVICE_INFO = "DeviceInfo"; + 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璇锋眰 @@ -79,30 +80,33 @@ * @param transaction */ @Override - public void process(RequestEvent evt, SipLayer layer, ServerTransaction transaction) { - - this.layer = layer; - 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); + public void process(RequestEvent evt) { + + try { + Element rootElement = getRootElement(evt); + String cmd = XmlUtil.getText(rootElement,"CmdType"); + + if (MESSAGE_KEEP_ALIVE.equals(cmd)) { + logger.info("鎺ユ敹鍒癒eepAlive娑堟伅"); + processMessageKeepAlive(evt); + } else if (MESSAGE_CONFIG_DOWNLOAD.equals(cmd)) { + logger.info("鎺ユ敹鍒癈onfigDownload娑堟伅"); + } 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 +251,13 @@ */ 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"); - transaction.sendResponse(response); - publisher.onlineEventPublish(deviceIdElement.getText(), VideoManagerConstants.EVENT_ONLINE_KEEPLIVE); + String deviceId = XmlUtil.getText(rootElement,"DeviceID"); + if (offLineDetector.isOnline(deviceId)) { + responseAck(evt); + publisher.onlineEventPublish(deviceId, VideoManagerConstants.EVENT_ONLINE_KEEPLIVE); + } else { + } } catch (ParseException | SipException | InvalidArgumentException | DocumentException e) { e.printStackTrace(); } @@ -344,12 +349,41 @@ } } + private void responseAck(RequestEvent evt) throws SipException, InvalidArgumentException, ParseException { + Response response = getMessageFactory().createResponse(Response.OK,evt.getRequest()); + getServerTransaction(evt).sendResponse(response); + } + private Element getRootElement(RequestEvent evt) throws DocumentException { Request request = evt.getRequest(); SAXReader reader = new SAXReader(); - reader.setEncoding("GB2312"); + reader.setEncoding("gbk"); Document xml = reader.read(new ByteArrayInputStream(request.getRawContent())); return xml.getRootElement(); } + public void setCmder(SIPCommander cmder) { + this.cmder = cmder; + } + + public void setStorager(IVideoManagerStorager storager) { + this.storager = storager; + } + + public void setPublisher(EventPublisher publisher) { + this.publisher = publisher; + } + + public void setRedis(RedisUtil redis) { + this.redis = redis; + } + + public void setDeferredResultHolder(DeferredResultHolder deferredResultHolder) { + this.deferredResultHolder = deferredResultHolder; + } + + public void setOffLineDetector(DeviceOffLineDetector offLineDetector) { + this.offLineDetector = offLineDetector; + } + } -- Gitblit v1.8.0