| package com.genersoft.iot.vmp.gb28181.event;  | 
|   | 
| import com.genersoft.iot.vmp.gb28181.bean.*;  | 
| import com.genersoft.iot.vmp.gb28181.event.device.RequestTimeoutEvent;  | 
| import com.genersoft.iot.vmp.gb28181.event.platformKeepaliveExpire.PlatformKeepaliveExpireEvent;  | 
| import com.genersoft.iot.vmp.gb28181.event.platformNotRegister.PlatformCycleRegisterEvent;  | 
| import com.genersoft.iot.vmp.gb28181.event.platformNotRegister.PlatformNotRegisterEvent;  | 
| import com.genersoft.iot.vmp.gb28181.event.record.RecordEndEvent;  | 
| import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;  | 
| import com.genersoft.iot.vmp.media.zlm.event.ZLMOfflineEvent;  | 
| import com.genersoft.iot.vmp.media.zlm.event.ZLMOnlineEvent;  | 
| import org.springframework.beans.factory.annotation.Autowired;  | 
| import org.springframework.context.ApplicationEventPublisher;  | 
| import org.springframework.stereotype.Component;  | 
|   | 
| import com.genersoft.iot.vmp.gb28181.event.alarm.AlarmEvent;  | 
|   | 
| import javax.sip.TimeoutEvent;  | 
| import java.util.ArrayList;  | 
| import java.util.HashSet;  | 
| import java.util.List;  | 
| import java.util.Set;  | 
|   | 
| /**      | 
|  * @description:Event事件通知推送器,支持推送在线事件、离线事件  | 
|  * @author: swwheihei  | 
|  * @date:   2020年5月6日 上午11:30:50       | 
|  */  | 
| @Component  | 
| public class EventPublisher {  | 
|   | 
|     @Autowired  | 
|     private ApplicationEventPublisher applicationEventPublisher;  | 
|   | 
|     /**  | 
|      * 平台心跳到期事件  | 
|      * @param platformGbId  | 
|      */  | 
|     public void platformKeepaliveExpireEventPublish(String platformGbId){  | 
|         PlatformKeepaliveExpireEvent platformNotRegisterEvent = new PlatformKeepaliveExpireEvent(this);  | 
|         platformNotRegisterEvent.setPlatformGbID(platformGbId);  | 
|         applicationEventPublisher.publishEvent(platformNotRegisterEvent);  | 
|     }  | 
|   | 
|     /**  | 
|      * 平台未注册事件  | 
|      * @param platformGbId  | 
|      */  | 
|     public void platformNotRegisterEventPublish(String platformGbId){  | 
|         PlatformNotRegisterEvent platformNotRegisterEvent = new PlatformNotRegisterEvent(this);  | 
|         platformNotRegisterEvent.setPlatformGbID(platformGbId);  | 
|         applicationEventPublisher.publishEvent(platformNotRegisterEvent);  | 
|     }  | 
|   | 
|     /**  | 
|      * 平台周期注册事件  | 
|      * @param paltformGbId  | 
|      */  | 
|     public void platformRegisterCycleEventPublish(String paltformGbId) {  | 
|         PlatformCycleRegisterEvent platformCycleRegisterEvent = new PlatformCycleRegisterEvent(this);  | 
|         platformCycleRegisterEvent.setPlatformGbID(paltformGbId);  | 
|         applicationEventPublisher.publishEvent(platformCycleRegisterEvent);  | 
|     }  | 
|       | 
|     /**  | 
|      * 设备报警事件  | 
|      * @param deviceAlarm  | 
|      */  | 
|     public void deviceAlarmEventPublish(DeviceAlarm deviceAlarm) {  | 
|         AlarmEvent alarmEvent = new AlarmEvent(this);  | 
|         alarmEvent.setAlarmInfo(deviceAlarm);  | 
|         applicationEventPublisher.publishEvent(alarmEvent);  | 
|     }  | 
|   | 
|     public void zlmOfflineEventPublish(String mediaServerId){  | 
|         ZLMOfflineEvent outEvent = new ZLMOfflineEvent(this);  | 
|         outEvent.setMediaServerId(mediaServerId);  | 
|         applicationEventPublisher.publishEvent(outEvent);  | 
|     }  | 
|   | 
|     public void zlmOnlineEventPublish(String mediaServerId) {  | 
|         ZLMOnlineEvent outEvent = new ZLMOnlineEvent(this);  | 
|         outEvent.setMediaServerId(mediaServerId);  | 
|         applicationEventPublisher.publishEvent(outEvent);  | 
|     }  | 
|   | 
|   | 
|     public void catalogEventPublish(String platformId, DeviceChannel deviceChannel, String type) {  | 
|         List<DeviceChannel> deviceChannelList = new ArrayList<>();  | 
|         deviceChannelList.add(deviceChannel);  | 
|         catalogEventPublish(platformId, deviceChannelList, type);  | 
|     }  | 
|   | 
|   | 
|     public void requestTimeOut(TimeoutEvent timeoutEvent) {  | 
|         RequestTimeoutEvent requestTimeoutEvent = new RequestTimeoutEvent(this);  | 
|         requestTimeoutEvent.setTimeoutEvent(timeoutEvent);  | 
|         applicationEventPublisher.publishEvent(requestTimeoutEvent);  | 
|     }  | 
|   | 
|   | 
|     /**  | 
|      *  | 
|      * @param platformId  | 
|      * @param deviceChannels  | 
|      * @param type  | 
|      */  | 
|     public void catalogEventPublish(String platformId, List<DeviceChannel> deviceChannels, String type) {  | 
|         CatalogEvent outEvent = new CatalogEvent(this);  | 
|         List<DeviceChannel> channels = new ArrayList<>();  | 
|         if (deviceChannels.size() > 1) {  | 
|             // 数据去重  | 
|             Set<String> gbIdSet = new HashSet<>();  | 
|             for (DeviceChannel deviceChannel : deviceChannels) {  | 
|                 if (!gbIdSet.contains(deviceChannel.getChannelId())) {  | 
|                     gbIdSet.add(deviceChannel.getChannelId());  | 
|                     channels.add(deviceChannel);  | 
|                 }  | 
|             }  | 
|         }else {  | 
|             channels = deviceChannels;  | 
|         }  | 
|         outEvent.setDeviceChannels(channels);  | 
|         outEvent.setType(type);  | 
|         outEvent.setPlatformId(platformId);  | 
|         applicationEventPublisher.publishEvent(outEvent);  | 
|     }  | 
|   | 
|   | 
|     public void catalogEventPublishForStream(String platformId, List<GbStream> gbStreams, String type) {  | 
|         CatalogEvent outEvent = new CatalogEvent(this);  | 
|         outEvent.setGbStreams(gbStreams);  | 
|         outEvent.setType(type);  | 
|         outEvent.setPlatformId(platformId);  | 
|         applicationEventPublisher.publishEvent(outEvent);  | 
|     }  | 
|   | 
|   | 
|     public void catalogEventPublishForStream(String platformId, GbStream gbStream, String type) {  | 
|         List<GbStream> gbStreamList = new ArrayList<>();  | 
|         gbStreamList.add(gbStream);  | 
|         catalogEventPublishForStream(platformId, gbStreamList, type);  | 
|     }  | 
|   | 
|     public void recordEndEventPush(RecordInfo recordInfo) {  | 
|         RecordEndEvent outEvent = new RecordEndEvent(this);  | 
|         outEvent.setRecordInfo(recordInfo);  | 
|         applicationEventPublisher.publishEvent(outEvent);  | 
|     }  | 
|   | 
| }  |