redis-smq
Version:
A high-performance, reliable, and scalable message queue for Node.js.
42 lines • 1.45 kB
JavaScript
import { EventBus } from './event-bus.js';
import { InternalEventBus } from './internal-event-bus.js';
import { eventRoutingPolicies } from './event-routing-policies.js';
import { EEventTarget } from './types/event-bus.js';
export class EventMultiplexer {
static instance = null;
eventBus;
internalBus;
constructor() {
this.eventBus = EventBus.getInstance();
this.internalBus = InternalEventBus.getInstance();
}
static getInstance() {
if (!EventMultiplexer.instance) {
EventMultiplexer.instance = new EventMultiplexer();
}
return EventMultiplexer.instance;
}
static publish(event, ...args) {
const instance = EventMultiplexer.getInstance();
instance.publish(event, ...args);
}
static shutdown(cb) {
EventMultiplexer.instance = null;
cb();
}
getTargetFor(event) {
return eventRoutingPolicies[event] ?? EEventTarget.USER;
}
publish(event, ...args) {
const target = this.getTargetFor(event);
if (this.eventBus &&
(target === EEventTarget.USER || target === EEventTarget.BOTH)) {
if (this.eventBus.isRunning())
this.eventBus.emit(event, ...args);
}
if (target === EEventTarget.SYSTEM || target === EEventTarget.BOTH) {
this.internalBus.emit(event, ...args);
}
}
}
//# sourceMappingURL=event-multiplexer.js.map