UNPKG

helene

Version:
101 lines 3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ServerChannel = void 0; const utils_1 = require("../utils"); const eventemitter2_1 = require("eventemitter2"); const event_1 = require("./event"); const transports_1 = require("./transports"); const SystemEvents = [ ...Object.values(transports_1.HttpTransportEvents), ...Object.values(utils_1.ServerEvents), ...Object.values(transports_1.WebSocketTransportEvents), ]; class ServerChannel extends eventemitter2_1.EventEmitter2 { channelName; server; clients = new Map(); constructor(channelName) { super({ maxListeners: 1024, }); this.channelName = channelName; this.onAny((event, value) => { if (!this.server.events.has(event) && !SystemEvents.includes(event)) { console.warn('Event Not Registered:', event); } if (this.server.events.has(event)) { const eventObject = this.server.events.get(event); eventObject.handler(this, value); } }); } setServer(server) { this.server = server; } propagate(event, payload) { const eventObject = this.server.events.get(event); if (!eventObject) { console.log('Event Not Registered:', event); return; } const clients = this.clients.get(eventObject.name) ?? new Set(); for (const client of clients) { client?.send(payload); } } defer(event, params) { process.nextTick(() => { this.emit(event, params); }); } /** * Refreshes a method by its identifier. */ refresh(method) { this.emit(utils_1.HeleneEvents.METHOD_REFRESH, method); } /** * Declares a new event. */ addEvent(name, opts) { if (this.server.events.has(name)) { this.server.events.delete(name); } const event = new event_1.Event(name, this.server, this, opts); this.server.events.set(name, event); } addChannelClient(eventName, client) { if (!this.clients.get(eventName)?.add(client)) { this.clients.set(eventName, new Set([client])); } } deleteClientNode(node) { this.clients.forEach(clients => { clients.delete(node); }); } get list() { return Array.from(this.server.events.keys()); } get length() { return this.server.events.size; } get(event) { return this.server.events.get(event); } has(event) { return this.server.events.has(event); } delete(event) { return this.server.events.delete(event); } clear() { this.clients.clear(); } isSubscribed(client, event) { return !!this.clients.get(event.name)?.has(client); } } exports.ServerChannel = ServerChannel; //# sourceMappingURL=server-channel.js.map