Add event emitter
This commit is contained in:
parent
a58d2323e0
commit
1cdf7e2a28
|
@ -0,0 +1,43 @@
|
||||||
|
package events
|
||||||
|
|
||||||
|
type EventCallback func(args ...any)
|
||||||
|
|
||||||
|
type Event struct {
|
||||||
|
Evtn string
|
||||||
|
Callback EventCallback
|
||||||
|
Once bool
|
||||||
|
}
|
||||||
|
|
||||||
|
type EventEmitter struct {
|
||||||
|
Events map[string][]Event
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewEventEmitter() EventEmitter {
|
||||||
|
return EventEmitter{
|
||||||
|
Events: map[string][]Event{},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (evt *EventEmitter) On(evtn string, callback EventCallback) {
|
||||||
|
if evt.Events[evtn] == nil {
|
||||||
|
evt.Events[evtn] = []Event{}
|
||||||
|
}
|
||||||
|
|
||||||
|
evt.Events[evtn] = append(evt.Events[evtn], Event{
|
||||||
|
Evtn: evtn,
|
||||||
|
Callback: callback,
|
||||||
|
Once: false,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (evt *EventEmitter) Emit(evtn string, args ...any) {
|
||||||
|
if evt.Events[evtn] == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, e := range evt.Events[evtn] {
|
||||||
|
if e.Callback != nil {
|
||||||
|
e.Callback(args...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue