7 "github.com/iotbzh/xds-agent/lib/apiv1"
10 var _EVTAllList = []string{
11 apiv1.EVTServerConfig,
13 apiv1.EVTProjectDelete,
14 apiv1.EVTProjectChange,
17 // EventDef Definition on one event
18 type EventDef struct {
22 // Events Hold registered events per context
25 eventsMap map[string]*EventDef
28 // NewEvents creates an instance of Events
29 func NewEvents(ctx *Context) *Events {
30 evMap := make(map[string]*EventDef)
31 for _, ev := range _EVTAllList {
32 evMap[ev] = &EventDef{
33 sids: make(map[string]int),
42 // GetList returns the list of all supported events
43 func (e *Events) GetList() []string {
47 // Register Used by a client/session to register to a specific (or all) event(s)
48 func (e *Events) Register(evName, sessionID string) error {
50 if evName != apiv1.EVTAll {
51 if _, ok := e.eventsMap[evName]; !ok {
52 return fmt.Errorf("Unsupported event type name")
54 evs = []string{evName}
56 for _, ev := range evs {
57 e.eventsMap[ev].sids[sessionID]++
62 // UnRegister Used by a client/session to unregister event(s)
63 func (e *Events) UnRegister(evName, sessionID string) error {
65 if evName != apiv1.EVTAll {
66 if _, ok := e.eventsMap[evName]; !ok {
67 return fmt.Errorf("Unsupported event type name")
69 evs = []string{evName}
71 for _, ev := range evs {
72 if _, exist := e.eventsMap[ev].sids[sessionID]; exist {
73 delete(e.eventsMap[ev].sids, sessionID)
80 // Emit Used to manually emit an event
81 func (e *Events) Emit(evName string, data interface{}) error {
84 if _, ok := e.eventsMap[evName]; !ok {
85 return fmt.Errorf("Unsupported event type")
89 e.Log.Debugf("Emit Event %s: %v", evName, data)
93 evm := e.eventsMap[evName]
94 for sid := range evm.sids {
95 so := e.webServer.sessions.IOSocketGet(sid)
98 firstErr = fmt.Errorf("IOSocketGet return nil")
102 msg := apiv1.EventMsg{
103 Time: time.Now().String(),
107 if err := (*so).Emit(apiv1.EventTypePrefix+evName, msg); err != nil {
108 e.Log.Errorf("WS Emit %v error : %v", apiv1.EventTypePrefix+evName, err)