648540858
3 years ago
31 changed files with 948 additions and 91 deletions
@ -0,0 +1,58 @@ |
|||||
|
package com.genersoft.iot.vmp.gb28181.event.subscribe.catalog; |
||||
|
|
||||
|
import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; |
||||
|
import com.genersoft.iot.vmp.gb28181.bean.GbStream; |
||||
|
import org.springframework.context.ApplicationEvent; |
||||
|
|
||||
|
import java.util.List; |
||||
|
|
||||
|
public class CatalogEvent extends ApplicationEvent { |
||||
|
public CatalogEvent(Object source) { |
||||
|
super(source); |
||||
|
} |
||||
|
|
||||
|
public static final String ON = "ON"; // 上线
|
||||
|
public static final String OFF = "OFF"; // 离线
|
||||
|
public static final String VLOST = "VLOST"; // 视频丢失
|
||||
|
public static final String DEFECT = "DEFECT"; // 故障
|
||||
|
public static final String ADD = "ADD"; // 增加
|
||||
|
public static final String DEL = "DEL"; // 删除
|
||||
|
public static final String UPDATE = "UPDATE"; // 更新
|
||||
|
|
||||
|
private List<DeviceChannel> deviceChannels; |
||||
|
private List<GbStream> gbStreams; |
||||
|
private String type; |
||||
|
private String platformId; |
||||
|
|
||||
|
public List<DeviceChannel> getDeviceChannels() { |
||||
|
return deviceChannels; |
||||
|
} |
||||
|
|
||||
|
public void setDeviceChannels(List<DeviceChannel> deviceChannels) { |
||||
|
this.deviceChannels = deviceChannels; |
||||
|
} |
||||
|
|
||||
|
public String getType() { |
||||
|
return type; |
||||
|
} |
||||
|
|
||||
|
public void setType(String type) { |
||||
|
this.type = type; |
||||
|
} |
||||
|
|
||||
|
public String getPlatformId() { |
||||
|
return platformId; |
||||
|
} |
||||
|
|
||||
|
public void setPlatformId(String platformId) { |
||||
|
this.platformId = platformId; |
||||
|
} |
||||
|
|
||||
|
public List<GbStream> getGbStreams() { |
||||
|
return gbStreams; |
||||
|
} |
||||
|
|
||||
|
public void setGbStreams(List<GbStream> gbStreams) { |
||||
|
this.gbStreams = gbStreams; |
||||
|
} |
||||
|
} |
@ -0,0 +1,167 @@ |
|||||
|
package com.genersoft.iot.vmp.gb28181.event.subscribe.catalog; |
||||
|
|
||||
|
import com.genersoft.iot.vmp.common.VideoManagerConstants; |
||||
|
import com.genersoft.iot.vmp.conf.SipConfig; |
||||
|
import com.genersoft.iot.vmp.conf.UserSetup; |
||||
|
import com.genersoft.iot.vmp.gb28181.bean.*; |
||||
|
import com.genersoft.iot.vmp.gb28181.event.SipSubscribe; |
||||
|
import com.genersoft.iot.vmp.gb28181.event.platformNotRegister.PlatformNotRegisterEvent; |
||||
|
import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform; |
||||
|
import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory; |
||||
|
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; |
||||
|
import com.genersoft.iot.vmp.service.IGbStreamService; |
||||
|
import com.genersoft.iot.vmp.service.IMediaServerService; |
||||
|
import com.genersoft.iot.vmp.storager.IRedisCatchStorage; |
||||
|
import com.genersoft.iot.vmp.storager.IVideoManagerStorager; |
||||
|
import org.slf4j.Logger; |
||||
|
import org.slf4j.LoggerFactory; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.context.ApplicationListener; |
||||
|
import org.springframework.stereotype.Component; |
||||
|
|
||||
|
import java.util.*; |
||||
|
|
||||
|
/** |
||||
|
* catalog事件 |
||||
|
*/ |
||||
|
@Component |
||||
|
public class CatalogEventLister implements ApplicationListener<CatalogEvent> { |
||||
|
|
||||
|
private final static Logger logger = LoggerFactory.getLogger(CatalogEventLister.class); |
||||
|
|
||||
|
@Autowired |
||||
|
private IVideoManagerStorager storager; |
||||
|
@Autowired |
||||
|
private IRedisCatchStorage redisCatchStorage; |
||||
|
@Autowired |
||||
|
private IMediaServerService mediaServerService; |
||||
|
|
||||
|
@Autowired |
||||
|
private SIPCommanderFroPlatform sipCommanderFroPlatform; |
||||
|
|
||||
|
@Autowired |
||||
|
private ZLMRTPServerFactory zlmrtpServerFactory; |
||||
|
|
||||
|
@Autowired |
||||
|
private SipConfig config; |
||||
|
|
||||
|
@Autowired |
||||
|
private UserSetup userSetup; |
||||
|
|
||||
|
@Autowired |
||||
|
private IGbStreamService gbStreamService; |
||||
|
|
||||
|
@Override |
||||
|
public void onApplicationEvent(CatalogEvent event) { |
||||
|
SubscribeInfo subscribe = null; |
||||
|
ParentPlatform parentPlatform = null; |
||||
|
|
||||
|
Map<String, List<ParentPlatform>> parentPlatformMap = new HashMap<>(); |
||||
|
if (event.getPlatformId() != null) { |
||||
|
parentPlatform = storager.queryParentPlatByServerGBId(event.getPlatformId()); |
||||
|
String key = VideoManagerConstants.SIP_SUBSCRIBE_PREFIX + userSetup.getServerId() + "_Catalog_" + event.getPlatformId(); |
||||
|
subscribe = redisCatchStorage.getSubscribe(key); |
||||
|
}else { |
||||
|
// 获取所用订阅
|
||||
|
List<String> platforms = redisCatchStorage.getAllSubscribePlatform(); |
||||
|
if (event.getDeviceChannels() != null) { |
||||
|
if (platforms.size() > 0) { |
||||
|
for (DeviceChannel deviceChannel : event.getDeviceChannels()) { |
||||
|
List<ParentPlatform> parentPlatformsForGB = storager.queryPlatFormListForGBWithGBId(deviceChannel.getChannelId(), platforms); |
||||
|
parentPlatformMap.put(deviceChannel.getChannelId(), parentPlatformsForGB); |
||||
|
} |
||||
|
} |
||||
|
}else if (event.getGbStreams() != null) { |
||||
|
if (platforms.size() > 0) { |
||||
|
for (GbStream gbStream : event.getGbStreams()) { |
||||
|
List<ParentPlatform> parentPlatformsForGB = storager.queryPlatFormListForStreamWithGBId(gbStream.getApp(),gbStream.getStream(), platforms); |
||||
|
parentPlatformMap.put(gbStream.getGbId(), parentPlatformsForGB); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
switch (event.getType()) { |
||||
|
case CatalogEvent.ON: |
||||
|
case CatalogEvent.OFF: |
||||
|
case CatalogEvent.DEL: |
||||
|
|
||||
|
if (parentPlatform != null || subscribe != null) { |
||||
|
List<DeviceChannel> deviceChannelList = new ArrayList<>(); |
||||
|
if (event.getDeviceChannels() != null) { |
||||
|
deviceChannelList.addAll(event.getDeviceChannels()); |
||||
|
} |
||||
|
if (event.getGbStreams().size() > 0){ |
||||
|
for (GbStream gbStream : event.getGbStreams()) { |
||||
|
DeviceChannel deviceChannelByStream = gbStreamService.getDeviceChannelListByStream(gbStream, gbStream.getCatalogId(), parentPlatform.getDeviceGBId()); |
||||
|
deviceChannelList.add(deviceChannelByStream); |
||||
|
} |
||||
|
} |
||||
|
if (deviceChannelList.size() > 0) { |
||||
|
logger.info("[Catalog事件: {}]平台:{},影响通道{}个", event.getType(), event.getPlatformId(), deviceChannelList.size()); |
||||
|
sipCommanderFroPlatform.sendNotifyForCatalogAddOrUpdate(event.getType(), parentPlatform, deviceChannelList, subscribe); |
||||
|
} |
||||
|
}else if (parentPlatformMap.keySet().size() > 0) { |
||||
|
for (String gbId : parentPlatformMap.keySet()) { |
||||
|
List<ParentPlatform> parentPlatforms = parentPlatformMap.get(gbId); |
||||
|
if (parentPlatforms != null && parentPlatforms.size() > 0) { |
||||
|
for (ParentPlatform platform : parentPlatforms) { |
||||
|
logger.info("[Catalog事件: {}]平台:{},影响通道{}", event.getType(), platform.getServerGBId(), gbId); |
||||
|
String key = VideoManagerConstants.SIP_SUBSCRIBE_PREFIX + userSetup.getServerId() + "_Catalog_" + platform.getServerGBId(); |
||||
|
SubscribeInfo subscribeInfo = redisCatchStorage.getSubscribe(key); |
||||
|
List<DeviceChannel> deviceChannelList = new ArrayList<>(); |
||||
|
DeviceChannel deviceChannel = new DeviceChannel(); |
||||
|
deviceChannel.setChannelId(gbId); |
||||
|
deviceChannelList.add(deviceChannel); |
||||
|
sipCommanderFroPlatform.sendNotifyForCatalogOther(event.getType(), platform, deviceChannelList, subscribeInfo); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
break; |
||||
|
case CatalogEvent.VLOST: |
||||
|
break; |
||||
|
case CatalogEvent.DEFECT: |
||||
|
break; |
||||
|
case CatalogEvent.ADD: |
||||
|
case CatalogEvent.UPDATE: |
||||
|
if (parentPlatform != null || subscribe != null) { |
||||
|
List<DeviceChannel> deviceChannelList = new ArrayList<>(); |
||||
|
if (event.getDeviceChannels() != null) { |
||||
|
deviceChannelList.addAll(event.getDeviceChannels()); |
||||
|
} |
||||
|
if (event.getGbStreams().size() > 0){ |
||||
|
for (GbStream gbStream : event.getGbStreams()) { |
||||
|
DeviceChannel deviceChannelByStream = gbStreamService.getDeviceChannelListByStream(gbStream, gbStream.getCatalogId(), parentPlatform.getDeviceGBId()); |
||||
|
deviceChannelList.add(deviceChannelByStream); |
||||
|
} |
||||
|
} |
||||
|
if (deviceChannelList.size() > 0) { |
||||
|
logger.info("[Catalog事件: {}]平台:{},影响通道{}个", event.getType(), event.getPlatformId(), deviceChannelList.size()); |
||||
|
sipCommanderFroPlatform.sendNotifyForCatalogAddOrUpdate(event.getType(), parentPlatform, deviceChannelList, subscribe); |
||||
|
} |
||||
|
}else if (parentPlatformMap.keySet().size() > 0) { |
||||
|
for (String gbId : parentPlatformMap.keySet()) { |
||||
|
List<ParentPlatform> parentPlatforms = parentPlatformMap.get(gbId); |
||||
|
if (parentPlatforms != null && parentPlatforms.size() > 0) { |
||||
|
for (ParentPlatform platform : parentPlatforms) { |
||||
|
logger.info("[Catalog事件: {}]平台:{},影响通道{}", event.getType(), platform.getServerGBId(), gbId); |
||||
|
String key = VideoManagerConstants.SIP_SUBSCRIBE_PREFIX + userSetup.getServerId() + "_Catalog_" + platform.getServerGBId(); |
||||
|
SubscribeInfo subscribeInfo = redisCatchStorage.getSubscribe(key); |
||||
|
List<DeviceChannel> deviceChannelList = new ArrayList<>(); |
||||
|
DeviceChannel deviceChannel = storager.queryChannelInParentPlatform(platform.getServerGBId(), gbId); |
||||
|
deviceChannelList.add(deviceChannel); |
||||
|
GbStream gbStream = storager.queryStreamInParentPlatform(platform.getServerGBId(), gbId); |
||||
|
DeviceChannel deviceChannelByStream = gbStreamService.getDeviceChannelListByStream(gbStream, gbStream.getCatalogId(), platform.getDeviceGBId()); |
||||
|
deviceChannelList.add(deviceChannelByStream); |
||||
|
sipCommanderFroPlatform.sendNotifyForCatalogOther(event.getType(), platform, deviceChannelList, subscribeInfo); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
break; |
||||
|
default: |
||||
|
break; |
||||
|
} |
||||
|
} |
||||
|
} |
Loading…
Reference in new issue