优化异常处理以及级联设备状态查询
This commit is contained in:
@@ -937,8 +937,6 @@ public class SIPCommander implements ISIPCommander {
|
||||
catalogXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
|
||||
catalogXml.append("</Query>\r\n");
|
||||
|
||||
|
||||
|
||||
Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
|
||||
|
||||
sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent);
|
||||
|
||||
@@ -16,6 +16,7 @@ import com.genersoft.iot.vmp.service.bean.GPSMsgInfo;
|
||||
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
|
||||
import com.genersoft.iot.vmp.storager.dao.dto.PlatformRegisterInfo;
|
||||
import com.genersoft.iot.vmp.utils.DateUtil;
|
||||
import com.genersoft.iot.vmp.utils.GitUtil;
|
||||
import gov.nist.javax.sip.message.MessageFactoryImpl;
|
||||
import gov.nist.javax.sip.message.SIPRequest;
|
||||
import org.slf4j.Logger;
|
||||
@@ -65,6 +66,9 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
|
||||
@Autowired
|
||||
private DynamicTask dynamicTask;
|
||||
|
||||
@Autowired
|
||||
private GitUtil gitUtil;
|
||||
|
||||
@Override
|
||||
public void register(ParentPlatform parentPlatform, SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent) throws InvalidArgumentException, ParseException, SipException {
|
||||
register(parentPlatform, null, null, errorEvent, okEvent, false, true);
|
||||
@@ -266,6 +270,9 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
|
||||
|
||||
String callId = request.getCallIdHeader().getCallId();
|
||||
|
||||
logger.info("[命令发送] 国标级联{} 目录查询回复: 共{}条,已发送{}条", parentPlatform.getServerGBId(),
|
||||
channels.size(), Math.min(index + parentPlatform.getCatalogGroup(), channels.size()));
|
||||
logger.debug(catalogXml);
|
||||
if (sendAfterResponse) {
|
||||
// 默认按照收到200回复后发送下一条, 如果超时收不到回复,就以30毫秒的间隔直接发送。
|
||||
dynamicTask.startDelay(timeoutTaskKey, ()->{
|
||||
@@ -317,17 +324,22 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
|
||||
if (parentPlatform == null) {
|
||||
return;
|
||||
}
|
||||
String deviceId = device == null ? parentPlatform.getDeviceGBId() : device.getDeviceId();
|
||||
String deviceName = device == null ? parentPlatform.getName() : device.getName();
|
||||
String manufacturer = device == null ? "WVP-28181-PRO" : device.getManufacturer();
|
||||
String model = device == null ? "platform" : device.getModel();
|
||||
String firmware = device == null ? gitUtil.getBuildVersion() : device.getFirmware();
|
||||
String characterSet = parentPlatform.getCharacterSet();
|
||||
StringBuffer deviceInfoXml = new StringBuffer(600);
|
||||
deviceInfoXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\"?>\r\n");
|
||||
deviceInfoXml.append("<Response>\r\n");
|
||||
deviceInfoXml.append("<CmdType>DeviceInfo</CmdType>\r\n");
|
||||
deviceInfoXml.append("<SN>" +sn + "</SN>\r\n");
|
||||
deviceInfoXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
|
||||
deviceInfoXml.append("<DeviceName>" + device.getName() + "</DeviceName>\r\n");
|
||||
deviceInfoXml.append("<Manufacturer>" + device.getManufacturer() + "</Manufacturer>\r\n");
|
||||
deviceInfoXml.append("<Model>" + device.getModel() + "</Model>\r\n");
|
||||
deviceInfoXml.append("<Firmware>" + device.getFirmware() + "</Firmware>\r\n");
|
||||
deviceInfoXml.append("<DeviceID>" + deviceId + "</DeviceID>\r\n");
|
||||
deviceInfoXml.append("<DeviceName>" + deviceName + "</DeviceName>\r\n");
|
||||
deviceInfoXml.append("<Manufacturer>" + manufacturer + "</Manufacturer>\r\n");
|
||||
deviceInfoXml.append("<Model>" + model + "</Model>\r\n");
|
||||
deviceInfoXml.append("<Firmware>" + firmware + "</Firmware>\r\n");
|
||||
deviceInfoXml.append("<Result>OK</Result>\r\n");
|
||||
deviceInfoXml.append("</Response>\r\n");
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@ public abstract class SIPRequestProcessorParent {
|
||||
try {
|
||||
return SipFactory.getInstance().createHeaderFactory();
|
||||
} catch (PeerUnavailableException e) {
|
||||
e.printStackTrace();
|
||||
logger.error("未处理的异常 ", e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@@ -54,7 +54,7 @@ public abstract class SIPRequestProcessorParent {
|
||||
try {
|
||||
return SipFactory.getInstance().createMessageFactory();
|
||||
} catch (PeerUnavailableException e) {
|
||||
e.printStackTrace();
|
||||
logger.error("未处理的异常 ", e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -406,12 +406,8 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
||||
}, 60 * 1000);
|
||||
responseSdpAck(request, content.toString(), platform);
|
||||
|
||||
} catch (SipException e) {
|
||||
e.printStackTrace();
|
||||
} catch (InvalidArgumentException e) {
|
||||
e.printStackTrace();
|
||||
} catch (ParseException e) {
|
||||
e.printStackTrace();
|
||||
} catch (SipException | InvalidArgumentException | ParseException e) {
|
||||
logger.error("[命令发送失败] 国标级联 回复SdpAck", e);
|
||||
}
|
||||
};
|
||||
SipSubscribe.Event errorEvent = ((event) -> {
|
||||
@@ -420,7 +416,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
||||
Response response = getMessageFactory().createResponse(event.statusCode, evt.getRequest());
|
||||
sipSender.transmitRequest(request.getLocalAddress().getHostAddress(), response);
|
||||
} catch (ParseException | SipException e) {
|
||||
e.printStackTrace();
|
||||
logger.error("未处理的异常 ", e);
|
||||
}
|
||||
});
|
||||
sendRtpItem.setApp("rtp");
|
||||
@@ -531,7 +527,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
||||
} catch (SdpParseException e) {
|
||||
logger.error("sdp解析错误", e);
|
||||
} catch (SdpException e) {
|
||||
e.printStackTrace();
|
||||
logger.error("未处理的异常 ", e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -686,11 +682,11 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
||||
mediaListManager.removedChannelOnlineEventLister(gbStream.getApp(), gbStream.getStream());
|
||||
responseAck(request, Response.REQUEST_TIMEOUT); // 超时
|
||||
} catch (SipException e) {
|
||||
e.printStackTrace();
|
||||
logger.error("未处理的异常 ", e);
|
||||
} catch (InvalidArgumentException e) {
|
||||
e.printStackTrace();
|
||||
logger.error("未处理的异常 ", e);
|
||||
} catch (ParseException e) {
|
||||
e.printStackTrace();
|
||||
logger.error("未处理的异常 ", e);
|
||||
}
|
||||
}, userSetting.getPlatformPlayTimeout());
|
||||
// 添加监听
|
||||
@@ -709,11 +705,11 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
||||
try {
|
||||
responseAck(request, Response.BUSY_HERE);
|
||||
} catch (SipException e) {
|
||||
e.printStackTrace();
|
||||
logger.error("未处理的异常 ", e);
|
||||
} catch (InvalidArgumentException e) {
|
||||
e.printStackTrace();
|
||||
logger.error("未处理的异常 ", e);
|
||||
} catch (ParseException e) {
|
||||
e.printStackTrace();
|
||||
logger.error("未处理的异常 ", e);
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -771,11 +767,11 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
||||
try {
|
||||
responseAck(request, Response.BUSY_HERE);
|
||||
} catch (SipException e) {
|
||||
e.printStackTrace();
|
||||
logger.error("未处理的异常 ", e);
|
||||
} catch (InvalidArgumentException e) {
|
||||
e.printStackTrace();
|
||||
logger.error("未处理的异常 ", e);
|
||||
} catch (ParseException e) {
|
||||
e.printStackTrace();
|
||||
logger.error("未处理的异常 ", e);
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -851,11 +847,11 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
||||
try {
|
||||
return responseSdpAck(request, content.toString(), platform);
|
||||
} catch (SipException e) {
|
||||
e.printStackTrace();
|
||||
logger.error("未处理的异常 ", e);
|
||||
} catch (InvalidArgumentException e) {
|
||||
e.printStackTrace();
|
||||
logger.error("未处理的异常 ", e);
|
||||
} catch (ParseException e) {
|
||||
e.printStackTrace();
|
||||
logger.error("未处理的异常 ", e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -93,7 +93,7 @@ public class NotifyRequestProcessor extends SIPRequestProcessorParent implements
|
||||
try {
|
||||
responseAck((SIPRequest) evt.getRequest(), Response.OK, null, null);
|
||||
}catch (SipException | InvalidArgumentException | ParseException e) {
|
||||
e.printStackTrace();
|
||||
logger.error("未处理的异常 ", e);
|
||||
}
|
||||
boolean runed = !taskQueue.isEmpty();
|
||||
taskQueue.offer(new HandlerCatchData(evt, null, null));
|
||||
@@ -225,7 +225,7 @@ public class NotifyRequestProcessor extends SIPRequestProcessorParent implements
|
||||
jsonObject.put("speed", mobilePosition.getSpeed());
|
||||
redisCatchStorage.sendMobilePositionMsg(jsonObject);
|
||||
} catch (DocumentException e) {
|
||||
e.printStackTrace();
|
||||
logger.error("未处理的异常 ", e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -335,7 +335,7 @@ public class NotifyRequestProcessor extends SIPRequestProcessorParent implements
|
||||
publisher.deviceAlarmEventPublish(deviceAlarm);
|
||||
}
|
||||
} catch (DocumentException e) {
|
||||
e.printStackTrace();
|
||||
logger.error("未处理的异常 ", e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -428,7 +428,7 @@ public class NotifyRequestProcessor extends SIPRequestProcessorParent implements
|
||||
}
|
||||
}
|
||||
} catch (DocumentException e) {
|
||||
e.printStackTrace();
|
||||
logger.error("未处理的异常 ", e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -185,7 +185,7 @@ public class RegisterRequestProcessor extends SIPRequestProcessorParent implemen
|
||||
deviceService.offline(deviceId, "主动注销");
|
||||
}
|
||||
} catch (SipException | NoSuchAlgorithmException | ParseException e) {
|
||||
e.printStackTrace();
|
||||
logger.error("未处理的异常 ", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -96,7 +96,7 @@ public class SubscribeRequestProcessor extends SIPRequestProcessorParent impleme
|
||||
sipSender.transmitRequest(request.getLocalAddress().getHostAddress(), response);
|
||||
}
|
||||
} catch (ParseException | SipException | InvalidArgumentException | DocumentException e) {
|
||||
e.printStackTrace();
|
||||
logger.error("未处理的异常 ", e);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -149,7 +149,7 @@ public class SubscribeRequestProcessor extends SIPRequestProcessorParent impleme
|
||||
}
|
||||
|
||||
} catch (SipException | InvalidArgumentException | ParseException e) {
|
||||
e.printStackTrace();
|
||||
logger.error("未处理的异常 ", e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -195,7 +195,7 @@ public class SubscribeRequestProcessor extends SIPRequestProcessorParent impleme
|
||||
subscribeHolder.putCatalogSubscribe(platformId, subscribeInfo);
|
||||
}
|
||||
} catch (SipException | InvalidArgumentException | ParseException e) {
|
||||
e.printStackTrace();
|
||||
logger.error("未处理的异常 ", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -186,9 +186,13 @@ public class AlarmNotifyMessageHandler extends SIPRequestProcessorParent impleme
|
||||
// 发送给平台的报警信息。 发送redis通知
|
||||
logger.info("[发送给平台的报警信息]内容:{}", JSONObject.toJSONString(deviceAlarm));
|
||||
AlarmChannelMessage alarmChannelMessage = new AlarmChannelMessage();
|
||||
alarmChannelMessage.setAlarmSn(Integer.parseInt(deviceAlarm.getAlarmMethod()));
|
||||
if (deviceAlarm.getAlarmMethod() != null) {
|
||||
alarmChannelMessage.setAlarmSn(Integer.parseInt(deviceAlarm.getAlarmMethod()));
|
||||
}
|
||||
alarmChannelMessage.setAlarmDescription(deviceAlarm.getAlarmDescription());
|
||||
alarmChannelMessage.setAlarmType(Integer.parseInt(deviceAlarm.getAlarmType()));
|
||||
if (deviceAlarm.getAlarmType() != null) {
|
||||
alarmChannelMessage.setAlarmType(Integer.parseInt(deviceAlarm.getAlarmType()));
|
||||
}
|
||||
alarmChannelMessage.setGbId(channelId);
|
||||
redisCatchStorage.sendAlarmMsg(alarmChannelMessage);
|
||||
continue;
|
||||
@@ -204,6 +208,7 @@ public class AlarmNotifyMessageHandler extends SIPRequestProcessorParent impleme
|
||||
publisher.deviceAlarmEventPublish(deviceAlarm);
|
||||
}
|
||||
}catch (Exception e) {
|
||||
logger.error("未处理的异常 ", e);
|
||||
logger.warn("[收到报警通知] 发现未处理的异常, {}\r\n{}",e.getMessage(), evt.getRequest());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -149,9 +149,10 @@ public class MobilePositionNotifyMessageHandler extends SIPRequestProcessorParen
|
||||
redisCatchStorage.sendMobilePositionMsg(jsonObject);
|
||||
|
||||
} catch (DocumentException e) {
|
||||
e.printStackTrace();
|
||||
logger.error("未处理的异常 ", e);
|
||||
} catch (Exception e) {
|
||||
logger.warn("[移动位置通知] 发现未处理的异常, {}\r\n{}",e.getMessage(), evt.getRequest());
|
||||
logger.warn("[移动位置通知] 发现未处理的异常, \r\n{}", evt.getRequest());
|
||||
logger.error("[移动位置通知] 异常内容: ", e);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -60,17 +60,24 @@ public class DeviceInfoQueryMessageHandler extends SIPRequestProcessorParent imp
|
||||
return;
|
||||
}
|
||||
String sn = rootElement.element("SN").getText();
|
||||
|
||||
/*根据WVP原有的数据结构,设备和通道是分开放置,设备信息都是存放在设备表里,通道表里的设备信息不可作为真实信息处理
|
||||
大部分NVR/IPC设备对他的通道信息实现都是返回默认的值没有什么参考价值。NVR/IPC通道我们统一使用设备表的设备信息来作为返回。
|
||||
我们这里使用查询数据库的方式来实现这个设备信息查询的功能,在其他地方对设备信息更新达到正确的目的。*/
|
||||
|
||||
String channelId = getText(rootElement, "DeviceID");
|
||||
Device device = storager.queryDeviceInfoByPlatformIdAndChannelId(parentPlatform.getServerGBId(), channelId);
|
||||
if (device ==null){
|
||||
logger.error("[平台没有该通道的使用权限]:platformId"+parentPlatform.getServerGBId()+" deviceID:"+channelId);
|
||||
return;
|
||||
// 查询这是通道id还是设备id
|
||||
Device device = null;
|
||||
// 如果id指向平台的国标编号,那么就是查询平台的信息
|
||||
if (!parentPlatform.getDeviceGBId().equals(channelId)) {
|
||||
device = storager.queryDeviceInfoByPlatformIdAndChannelId(parentPlatform.getServerGBId(), channelId);
|
||||
if (device ==null){
|
||||
logger.error("[平台没有该通道的使用权限]:platformId"+parentPlatform.getServerGBId()+" deviceID:"+channelId);
|
||||
return;
|
||||
}
|
||||
}
|
||||
try {
|
||||
cmderFroPlatform.deviceInfoResponse(parentPlatform,device, sn, fromHeader.getTag());
|
||||
cmderFroPlatform.deviceInfoResponse(parentPlatform, device, sn, fromHeader.getTag());
|
||||
} catch (SipException | InvalidArgumentException | ParseException e) {
|
||||
logger.error("[命令发送失败] 国标级联 DeviceInfo查询回复: {}", e.getMessage());
|
||||
}
|
||||
|
||||
@@ -131,7 +131,8 @@ public class CatalogResponseMessageHandler extends SIPRequestProcessorParent imp
|
||||
|
||||
}
|
||||
}catch (Exception e) {
|
||||
logger.warn("[收到通道] 发现未处理的异常, {}\r\n{}",e.getMessage(), evt.getRequest());
|
||||
logger.warn("[收到通道] 发现未处理的异常, \r\n{}", evt.getRequest());
|
||||
logger.error("[收到通道] 异常内容: ", e);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -142,7 +142,7 @@ public class MobilePositionResponseMessageHandler extends SIPRequestProcessorPar
|
||||
}
|
||||
|
||||
} catch (DocumentException e) {
|
||||
e.printStackTrace();
|
||||
logger.error("未处理的异常 ", e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -150,7 +150,8 @@ public class RecordInfoResponseMessageHandler extends SIPRequestProcessorParent
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
logger.error("[国标录像] 发现未处理的异常, "+e.getMessage(), e);
|
||||
logger.error("[国标录像] 发现未处理的异常, \r\n{}", evt.getRequest());
|
||||
logger.error("[国标录像] 异常内容: ", e);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user