7 "github.com/iotbzh/xds-agent/lib/xaapiv1"
10 // EventDef Definition on one event
11 type EventDef struct {
15 // Events Hold registered events per context
18 eventsMap map[string]*EventDef
21 // NewEvents creates an instance of Events
22 func NewEvents(ctx *Context) *Events {
23 evMap := make(map[string]*EventDef)
24 for _, ev := range xaapiv1.EVTAllList {
25 evMap[ev] = &EventDef{
26 sids: make(map[string]int),
35 // GetList returns the list of all supported events
36 func (e *Events) GetList() []string {
37 return xaapiv1.EVTAllList
40 // Register Used by a client/session to register to a specific (or all) event(s)
41 func (e *Events) Register(evName, sessionID string) error {
42 evs := xaapiv1.EVTAllList
43 if evName != xaapiv1.EVTAll {
44 if _, ok := e.eventsMap[evName]; !ok {
45 return fmt.Errorf("Unsupported event type name")
47 evs = []string{evName}
49 for _, ev := range evs {
50 e.eventsMap[ev].sids[sessionID]++
55 // UnRegister Used by a client/session to unregister event(s)
56 func (e *Events) UnRegister(evName, sessionID string) error {
57 evs := xaapiv1.EVTAllList
58 if evName != xaapiv1.EVTAll {
59 if _, ok := e.eventsMap[evName]; !ok {
60 return fmt.Errorf("Unsupported event type name")
62 evs = []string{evName}
64 for _, ev := range evs {
65 if _, exist := e.eventsMap[ev].sids[sessionID]; exist {
66 delete(e.eventsMap[ev].sids, sessionID)
73 // Emit Used to manually emit an event
74 func (e *Events) Emit(evName string, data interface{},fromSid string) error {
77 if _, ok := e.eventsMap[evName]; !ok {
78 return fmt.Errorf("Unsupported event type")
82 e.Log.Debugf("Emit Event %s: %v", evName, data)
86 evm := e.eventsMap[evName]
87 for sid := range evm.sids {
88 so := e.webServer.sessions.IOSocketGet(sid)
91 firstErr = fmt.Errorf("IOSocketGet return nil (SID=%v)", sid)
95 msg := xaapiv1.EventMsg{
96 Time: time.Now().String(),
97 FromSessionID: fromSid,
101 e.Log.Debugf("Emit Event %s: %v", evName, sid)
102 if err := (*so).Emit(evName, msg); err != nil {
103 e.Log.Errorf("WS Emit %v error : %v", evName, err)