Add event emitter

This commit is contained in:
Hri7566 2024-07-08 23:35:42 -04:00
parent a58d2323e0
commit 1cdf7e2a28
1 changed files with 43 additions and 0 deletions

43
events/EventEmitter.go Normal file
View File

@ -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...)
}
}
}