diff --git a/events/EventEmitter.go b/events/EventEmitter.go new file mode 100644 index 0000000..f51b8fe --- /dev/null +++ b/events/EventEmitter.go @@ -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...) + } + } +}