29 lines
697 B
JavaScript
29 lines
697 B
JavaScript
export class MessageBus {
|
|
constructor() {
|
|
this.bus = new EventTarget()
|
|
this.counter = 0
|
|
this.fnmap = new Map()
|
|
}
|
|
|
|
subscribe(eventName, fn) {
|
|
this.counter++
|
|
this.bus.addEventListener(eventName, fn)
|
|
this.fnmap.set(this.counter, { eventName, fn })
|
|
return this.counter
|
|
}
|
|
|
|
unsubscribe(mappedID) {
|
|
const mapped = this.fnmap.get(mappedID)
|
|
if (mapped === undefined) {
|
|
console.warn('unsubscribe, no such mapped ID', mappedID)
|
|
return
|
|
}
|
|
this.fnmap.delete(mappedID)
|
|
this.bus.removeEventListener(mapped.eventName, mapped.fn)
|
|
}
|
|
|
|
dispatch(eventName, data) {
|
|
console.debug('mbus', eventName, data)
|
|
this.bus.dispatchEvent(new CustomEvent(eventName, { detail: data }))
|
|
}
|
|
}
|