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