| | |
| | | FromHeader fromHeader = (FromHeader) evt.getRequest().getHeader(FromHeader.NAME); |
| | | String deviceId = SipUtils.getUserIdFromFromHeader(fromHeader); |
| | | |
| | | Element rootElement = getRootElement(evt); |
| | | Device device = redisCatchStorage.getDevice(deviceId); |
| | | if (device == null) { |
| | | if (device == null || device.getOnline() == 0) { |
| | | logger.warn("[收到 目录订阅]:{}, 但是设备已经离线", (device != null ? device.getDeviceId():"" )); |
| | | return; |
| | | } |
| | | if (device != null ) { |
| | | rootElement = getRootElement(evt, device.getCharset()); |
| | | } |
| | | Element rootElement = getRootElement(evt, device.getCharset()); |
| | | Element deviceListElement = rootElement.element("DeviceList"); |
| | | if (deviceListElement == null) { |
| | | return; |
| | |
| | | channel.setDeviceId(device.getDeviceId()); |
| | | logger.info("[收到 目录订阅]:{}/{}", device.getDeviceId(), channel.getChannelId()); |
| | | switch (eventElement.getText().toUpperCase()) { |
| | | case CatalogEvent.ON: // 上线 |
| | | case CatalogEvent.ON: |
| | | // 上线 |
| | | logger.info("收到来自设备【{}】的通道【{}】上线通知", device.getDeviceId(), channel.getChannelId()); |
| | | storager.deviceChannelOnline(deviceId, channel.getChannelId()); |
| | | // 回复200 OK |
| | | responseAck(evt, Response.OK); |
| | | break; |
| | | case CatalogEvent.OFF : // 离线 |
| | | case CatalogEvent.OFF : |
| | | // 离线 |
| | | logger.info("收到来自设备【{}】的通道【{}】离线通知", device.getDeviceId(), channel.getChannelId()); |
| | | storager.deviceChannelOffline(deviceId, channel.getChannelId()); |
| | | // 回复200 OK |
| | | responseAck(evt, Response.OK); |
| | | break; |
| | | case CatalogEvent.VLOST: // 视频丢失 |
| | | case CatalogEvent.VLOST: |
| | | // 视频丢失 |
| | | logger.info("收到来自设备【{}】的通道【{}】视频丢失通知", device.getDeviceId(), channel.getChannelId()); |
| | | storager.deviceChannelOffline(deviceId, channel.getChannelId()); |
| | | // 回复200 OK |
| | | responseAck(evt, Response.OK); |
| | | break; |
| | | case CatalogEvent.DEFECT: // 故障 |
| | | case CatalogEvent.DEFECT: |
| | | // 故障 |
| | | // 回复200 OK |
| | | responseAck(evt, Response.OK); |
| | | break; |
| | | case CatalogEvent.ADD: // 增加 |
| | | case CatalogEvent.ADD: |
| | | // 增加 |
| | | logger.info("收到来自设备【{}】的增加通道【{}】通知", device.getDeviceId(), channel.getChannelId()); |
| | | storager.updateChannel(deviceId, channel); |
| | | responseAck(evt, Response.OK); |
| | | break; |
| | | case CatalogEvent.DEL: // 删除 |
| | | case CatalogEvent.DEL: |
| | | // 删除 |
| | | logger.info("收到来自设备【{}】的删除通道【{}】通知", device.getDeviceId(), channel.getChannelId()); |
| | | storager.delChannel(deviceId, channel.getChannelId()); |
| | | responseAck(evt, Response.OK); |
| | | break; |
| | | case CatalogEvent.UPDATE: // 更新 |
| | | case CatalogEvent.UPDATE: |
| | | // 更新 |
| | | logger.info("收到来自设备【{}】的更新通道【{}】通知", device.getDeviceId(), channel.getChannelId()); |
| | | storager.updateChannel(deviceId, channel); |
| | | responseAck(evt, Response.OK); |
| | |
| | | // 转发变化信息 |
| | | eventPublisher.catalogEventPublish(null, channel, eventElement.getText().toUpperCase()); |
| | | |
| | | } |
| | | |
| | | if (!redisCatchStorage.deviceIsOnline(deviceId)) { |
| | | publisher.onlineEventPublish(device, VideoManagerConstants.EVENT_ONLINE_MESSAGE); |
| | | } |
| | | } |
| | | } catch (DocumentException | SipException | InvalidArgumentException | ParseException e) { |