| | |
| | | package com.genersoft.iot.vmp.gb28181.event.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 org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.context.ApplicationListener; |
| | |
| | | |
| | | import javax.sip.ClientTransaction; |
| | | import javax.sip.address.SipURI; |
| | | import javax.sip.header.CallIdHeader; |
| | | import javax.sip.header.ToHeader; |
| | | import javax.sip.message.Request; |
| | | |
| | | /** |
| | |
| | | if (device == null) { |
| | | return; |
| | | } |
| | | deviceService.offline(device.getDeviceId()); |
| | | deviceService.offline(device.getDeviceId(), "等待消息超时"); |
| | | } |
| | | |
| | | } |
| | |
| | | |
| | | for (Device device : deviceList) { |
| | | if (deviceService.expire(device)){ |
| | | deviceService.offline(device.getDeviceId()); |
| | | deviceService.offline(device.getDeviceId(), "注册已过期"); |
| | | }else { |
| | | deviceService.online(device); |
| | | } |
| | |
| | | deviceService.online(device); |
| | | } else { |
| | | logger.info("[注销成功] deviceId: {}->{}" ,deviceId, requestAddress); |
| | | deviceService.offline(deviceId); |
| | | deviceService.offline(deviceId, "主动注销"); |
| | | } |
| | | } catch (SipException | NoSuchAlgorithmException | ParseException e) { |
| | | e.printStackTrace(); |
| | |
| | | // 刷新过期任务 |
| | | 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); |
| | | |
| | | } |
| | | |
| | |
| | | package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.cmd; |
| | | |
| | | 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.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.RequestMessage; |
| | | import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent; |
| | |
| | | import javax.sip.SipException; |
| | | import javax.sip.message.Response; |
| | | import java.text.ParseException; |
| | | import java.util.Objects; |
| | | |
| | | @Component |
| | | public class DeviceStatusResponseMessageHandler extends SIPRequestProcessorParent implements InitializingBean, IMessageHandler { |
| | |
| | | if ("ONLINE".equalsIgnoreCase(text.trim())) { |
| | | deviceService.online(device); |
| | | }else { |
| | | deviceService.offline(device.getDeviceId()); |
| | | deviceService.offline(device.getDeviceId(), "设备状态查询结果:" + text.trim()); |
| | | } |
| | | RequestMessage msg = new RequestMessage(); |
| | | msg.setKey(DeferredResultHolder.CALLBACK_CMD_DEVICESTATUS + device.getDeviceId()); |
| | |
| | | * 设备下线 |
| | | * @param deviceId 设备编号 |
| | | */ |
| | | void offline(String deviceId); |
| | | void offline(String deviceId, String reason); |
| | | |
| | | /** |
| | | * 添加目录订阅 |
| | |
| | | // 刷新过期任务 |
| | | String registerExpireTaskKey = VideoManagerConstants.REGISTER_EXPIRE_TASK_KEY_PREFIX + device.getDeviceId(); |
| | | // 如果第一次注册那么必须在60 * 3时间内收到一个心跳,否则设备离线 |
| | | dynamicTask.startDelay(registerExpireTaskKey, ()-> offline(device.getDeviceId()), device.getKeepaliveIntervalTime() * 1000 * 3); |
| | | dynamicTask.startDelay(registerExpireTaskKey, ()-> offline(device.getDeviceId(), "首次注册后未能收到心跳"), device.getKeepaliveIntervalTime() * 1000 * 3); |
| | | } |
| | | |
| | | @Override |
| | | public void offline(String deviceId) { |
| | | logger.error("[设备离线], device:{}", deviceId); |
| | | public void offline(String deviceId, String reason) { |
| | | logger.error("[设备离线],{}, device:{}", reason, deviceId); |
| | | Device device = deviceMapper.getDeviceByDeviceId(deviceId); |
| | | if (device == null) { |
| | | return; |