https://github.com/tendermint/tendermint
Raw File
Tip revision: b240917223075ce7d66c847e17290aac90d5e7a3 authored by tycho garen on 18 August 2021, 13:35:31 UTC
updates
Tip revision: b240917
event_cache.go
package events

// 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,
	}
}

// a cached event
type eventInfo struct {
	event string
	data  EventData
}

// Cache an event to be fired upon finality.
func (evc *EventCache) FireEvent(event string, data EventData) {
	// append to list (go will grow our backing array exponentially)
	evc.events = append(evc.events, eventInfo{event, data})
}

// 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.data)
	}
	// Clear the buffer, since we only add to it with append it's safe to just set it to nil and maybe safe an allocation
	evc.events = nil
}
back to top