34 lines
651 B
Go
34 lines
651 B
Go
|
package tins2020
|
||
|
|
||
|
func NewEvents() *Events {
|
||
|
return &Events{events: map[int]EventInterfaceFn{}}
|
||
|
}
|
||
|
|
||
|
type Events struct {
|
||
|
nextID int
|
||
|
events map[int]EventInterfaceFn
|
||
|
}
|
||
|
|
||
|
type EventHandler interface {
|
||
|
Register(EventFn) int
|
||
|
RegisterItf(EventInterfaceFn) int
|
||
|
Unregister(int)
|
||
|
}
|
||
|
|
||
|
func (h *Events) Notify(state interface{}) {
|
||
|
for _, event := range h.events {
|
||
|
event(state)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (h *Events) Register(fn EventFn) int { return h.RegisterItf(func(interface{}) { fn() }) }
|
||
|
|
||
|
func (h *Events) RegisterItf(fn EventInterfaceFn) int {
|
||
|
id := h.nextID
|
||
|
h.nextID++
|
||
|
h.events[id] = fn
|
||
|
return id
|
||
|
}
|
||
|
|
||
|
func (h *Events) Unregister(id int) { delete(h.events, id) }
|