package events const ( eventsBufferSize = 1000 ) // An EventCache buffers events for a Fireable // All events are cached. Filtering happens on Flush type EventCache struct { evsw Fireable events []eventInfo } // Create a new EventCache with an EventSwitch as backend func NewEventCache(evsw Fireable) *EventCache { return &EventCache{ evsw: evsw, events: make([]eventInfo, eventsBufferSize), } } // a cached event type eventInfo struct { event string msg interface{} } // Cache an event to be fired upon finality. func (evc *EventCache) FireEvent(event string, msg interface{}) { // append to list evc.events = append(evc.events, eventInfo{event, msg}) } // Fire events by running evsw.FireEvent on all cached events. Blocks. // Clears cached events func (evc *EventCache) Flush() { for _, ei := range evc.events { evc.evsw.FireEvent(ei.event, ei.msg) } evc.events = make([]eventInfo, eventsBufferSize) }