44 lines
734 B
Go
44 lines
734 B
Go
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...)
|
|
}
|
|
}
|
|
}
|