@tendrock/lib
Version:
A lib under the Tendrock system for Minecraft Bedrock Script API
43 lines (42 loc) • 1.53 kB
JavaScript
import { EventSignal } from "./EventSignal";
import { SetMap } from "@tenolib/map";
export class EventBus {
constructor() {
this._eventSignalMap = new Map();
this.callbackSetMap = new SetMap();
}
registerSignal(eventType) {
const eventSignal = new EventSignal(this, eventType);
this._eventSignalMap.set(eventType, eventSignal);
return eventSignal;
}
subscribe(eventType, callback) {
const eventSignal = this._getEventSignal(eventType);
this.callbackSetMap.addValue(eventSignal, callback);
}
unsubscribe(eventType, callback) {
const eventSignal = this._getEventSignal(eventType);
this.callbackSetMap.deleteValue(eventSignal, callback);
}
_getEventSignal(eventTypeOrSignal) {
if (typeof eventTypeOrSignal !== "string") {
return eventTypeOrSignal;
}
const eventSignal = this._eventSignalMap.get(eventTypeOrSignal);
if (!eventSignal) {
throw new Error(`Event type ${eventTypeOrSignal} not registered`);
}
return eventSignal;
}
trigger(eventTypeOrSignal, eventData) {
var _a;
const eventSignal = this._getEventSignal(eventTypeOrSignal);
if (!eventSignal)
return;
(_a = this.callbackSetMap.get(eventSignal)) === null || _a === void 0 ? void 0 : _a.forEach((callback) => {
callback(eventData);
});
}
}
EventBus.Instance = new EventBus();
export const eventBus = EventBus.Instance;