| package apid |
| |
| type EventSelector string |
| |
| type Event interface{} |
| |
| type EventHandler interface { |
| Handle(event Event) |
| } |
| |
| type EventHandlerFunc func(event Event) |
| |
| type EventsService interface { |
| // Publish an event to the selector. |
| // It will send a copy of the delivered event to the returned channel, after all listeners have responded to the event. |
| // Call "Emit()" for non-blocking, "<-Emit()" for blocking. |
| Emit(selector EventSelector, event Event) chan Event |
| |
| // publish an event to the selector, call the passed handler when all listeners have responded to the event |
| EmitWithCallback(selector EventSelector, event Event, handler EventHandlerFunc) |
| |
| // when an event matching selector occurs, run the provided handler |
| Listen(selector EventSelector, handler EventHandler) |
| |
| // when an event matching selector occurs, run the provided handler function |
| ListenFunc(selector EventSelector, handler EventHandlerFunc) |
| |
| // when an event matching selector occurs, run the provided handler function and stop listening |
| ListenOnceFunc(selector EventSelector, handler EventHandlerFunc) |
| |
| // remove a listener |
| StopListening(selector EventSelector, handler EventHandler) |
| |
| // shut it down |
| Close() |
| } |
| |
| const EventDeliveredSelector EventSelector = "event delivered" |
| |
| type EventDeliveryEvent struct { |
| Description string |
| Selector EventSelector |
| Event Event |
| Count int |
| } |
| |
| // use reflect.DeepEqual to compare this type |
| type PluginsInitializedEvent struct { |
| Description string |
| // using slice member will make the type "PluginsInitializedEvent" uncomparable |
| Plugins []PluginData |
| ApidVersion string |
| } |
| |
| type PluginData struct { |
| Name string |
| Version string |
| ExtraData map[string]interface{} |
| } |