648540858
2022-09-01 03d6ad289baddf8feed64ffca5f1b13828bea710
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
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.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 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);
    }
 
}