mirror of
https://github.com/meshcore-dev/meshcore.js.git
synced 2026-04-20 22:13:49 +00:00
43 lines
1,021 B
JavaScript
43 lines
1,021 B
JavaScript
|
|
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;
|