添加设备离线原因

This commit is contained in:
648540858 2023-03-08 16:57:07 +08:00
parent 7a651ed327
commit fd4fa255e6
7 changed files with 9 additions and 15 deletions

View File

@ -1,7 +1,6 @@
package com.genersoft.iot.vmp.gb28181.event.device; package com.genersoft.iot.vmp.gb28181.event.device;
import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.gb28181.bean.Device;
import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
import com.genersoft.iot.vmp.service.IDeviceService; import com.genersoft.iot.vmp.service.IDeviceService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener; import org.springframework.context.ApplicationListener;
@ -9,8 +8,6 @@ import org.springframework.stereotype.Component;
import javax.sip.ClientTransaction; import javax.sip.ClientTransaction;
import javax.sip.address.SipURI; import javax.sip.address.SipURI;
import javax.sip.header.CallIdHeader;
import javax.sip.header.ToHeader;
import javax.sip.message.Request; import javax.sip.message.Request;
/** /**
@ -34,7 +31,7 @@ public class RequestTimeoutEventImpl implements ApplicationListener<RequestTimeo
if (device == null) { if (device == null) {
return; return;
} }
deviceService.offline(device.getDeviceId()); deviceService.offline(device.getDeviceId(), "等待消息超时");
} }
} }

View File

@ -61,7 +61,7 @@ public class SipRunner implements CommandLineRunner {
for (Device device : deviceList) { for (Device device : deviceList) {
if (deviceService.expire(device)){ if (deviceService.expire(device)){
deviceService.offline(device.getDeviceId()); deviceService.offline(device.getDeviceId(), "注册已过期");
}else { }else {
deviceService.online(device); deviceService.online(device);
} }

View File

@ -182,7 +182,7 @@ public class RegisterRequestProcessor extends SIPRequestProcessorParent implemen
deviceService.online(device); deviceService.online(device);
} else { } else {
logger.info("[注销成功] deviceId: {}->{}" ,deviceId, requestAddress); logger.info("[注销成功] deviceId: {}->{}" ,deviceId, requestAddress);
deviceService.offline(deviceId); deviceService.offline(deviceId, "主动注销");
} }
} catch (SipException | NoSuchAlgorithmException | ParseException e) { } catch (SipException | NoSuchAlgorithmException | ParseException e) {
e.printStackTrace(); e.printStackTrace();

View File

@ -94,7 +94,7 @@ public class KeepaliveNotifyMessageHandler extends SIPRequestProcessorParent imp
// 刷新过期任务 // 刷新过期任务
String registerExpireTaskKey = VideoManagerConstants.REGISTER_EXPIRE_TASK_KEY_PREFIX + device.getDeviceId(); String registerExpireTaskKey = VideoManagerConstants.REGISTER_EXPIRE_TASK_KEY_PREFIX + device.getDeviceId();
// 如果三次心跳失败则设置设备离线 // 如果三次心跳失败则设置设备离线
dynamicTask.startDelay(registerExpireTaskKey, ()-> deviceService.offline(device.getDeviceId()), device.getKeepaliveIntervalTime()*1000*3); dynamicTask.startDelay(registerExpireTaskKey, ()-> deviceService.offline(device.getDeviceId(), "三次心跳失败"), device.getKeepaliveIntervalTime()*1000*3);
} }

View File

@ -1,10 +1,8 @@
package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.cmd; package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.cmd;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import com.genersoft.iot.vmp.common.VideoManagerConstants;
import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.gb28181.bean.Device;
import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform; import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
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.DeferredResultHolder;
import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage; import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent; import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
@ -26,7 +24,6 @@ import javax.sip.RequestEvent;
import javax.sip.SipException; import javax.sip.SipException;
import javax.sip.message.Response; import javax.sip.message.Response;
import java.text.ParseException; import java.text.ParseException;
import java.util.Objects;
@Component @Component
public class DeviceStatusResponseMessageHandler extends SIPRequestProcessorParent implements InitializingBean, IMessageHandler { public class DeviceStatusResponseMessageHandler extends SIPRequestProcessorParent implements InitializingBean, IMessageHandler {
@ -76,7 +73,7 @@ public class DeviceStatusResponseMessageHandler extends SIPRequestProcessorParen
if ("ONLINE".equalsIgnoreCase(text.trim())) { if ("ONLINE".equalsIgnoreCase(text.trim())) {
deviceService.online(device); deviceService.online(device);
}else { }else {
deviceService.offline(device.getDeviceId()); deviceService.offline(device.getDeviceId(), "设备状态查询结果:" + text.trim());
} }
RequestMessage msg = new RequestMessage(); RequestMessage msg = new RequestMessage();
msg.setKey(DeferredResultHolder.CALLBACK_CMD_DEVICESTATUS + device.getDeviceId()); msg.setKey(DeferredResultHolder.CALLBACK_CMD_DEVICESTATUS + device.getDeviceId());

View File

@ -24,7 +24,7 @@ public interface IDeviceService {
* 设备下线 * 设备下线
* @param deviceId 设备编号 * @param deviceId 设备编号
*/ */
void offline(String deviceId); void offline(String deviceId, String reason);
/** /**
* 添加目录订阅 * 添加目录订阅

View File

@ -156,12 +156,12 @@ public class DeviceServiceImpl implements IDeviceService {
// 刷新过期任务 // 刷新过期任务
String registerExpireTaskKey = VideoManagerConstants.REGISTER_EXPIRE_TASK_KEY_PREFIX + device.getDeviceId(); String registerExpireTaskKey = VideoManagerConstants.REGISTER_EXPIRE_TASK_KEY_PREFIX + device.getDeviceId();
// 如果第一次注册那么必须在60 * 3时间内收到一个心跳否则设备离线 // 如果第一次注册那么必须在60 * 3时间内收到一个心跳否则设备离线
dynamicTask.startDelay(registerExpireTaskKey, ()-> offline(device.getDeviceId()), device.getKeepaliveIntervalTime() * 1000 * 3); dynamicTask.startDelay(registerExpireTaskKey, ()-> offline(device.getDeviceId(), "首次注册后未能收到心跳"), device.getKeepaliveIntervalTime() * 1000 * 3);
} }
@Override @Override
public void offline(String deviceId) { public void offline(String deviceId, String reason) {
logger.error("[设备离线] device{}", deviceId); logger.error("[设备离线]{}, device{}", reason, deviceId);
Device device = deviceMapper.getDeviceByDeviceId(deviceId); Device device = deviceMapper.getDeviceByDeviceId(deviceId);
if (device == null) { if (device == null) {
return; return;