meshcore.js/src/events.js

43 lines
1,021 B
JavaScript
Raw Normal View History

2025-02-11 22:07:10 +13:00
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;