setup events

This commit is contained in:
liamcottle 2025-02-11 22:07:10 +13:00
parent 6f2d4ce1f7
commit feb149ad35
5 changed files with 65 additions and 15 deletions

42
src/events.js Normal file
View file

@ -0,0 +1,42 @@
class EventEmitter {
constructor() {
this.eventListenersMap = new Map();
}
on(event, callback) {
// create list of listeners for event if it doesn't exist
if(!this.eventListenersMap.has(event)){
this.eventListenersMap.set(event, []);
}
// add listener for event
this.eventListenersMap.get(event).push(callback);
}
off(event, callback) {
// remove callback from listeners for this event
if(this.eventListenersMap.has(event)){
const callbacks = this.eventListenersMap.get(event).filter(cb => cb !== callback);
this.eventListenersMap.set(event, callbacks);
}
}
emit(event, ...data) {
// invoke each listener for this event
if(this.eventListenersMap.has(event)){
for(const eventListener of this.eventListenersMap.get(event)){
setTimeout(() => eventListener(...data), 0);
}
}
}
}
export default EventEmitter;