routeros_dns/static/js/mbus.mjs
2026-02-25 14:19:06 +01:00

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 }))
}
}