UNPKG

netkitty

Version:
83 lines (82 loc) 2.77 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.PipeClientSocket = void 0; const events_1 = __importDefault(require("events")); const PipeMessage_1 = require("./PipeMessage"); const PipeMessageHandler_1 = require("./PipeMessageHandler"); const SocketDownError_1 = require("../../errors/SocketDownError"); class PipeClientSocket extends events_1.default { #id; #connection; #connected; /** * ClientId */ get id() { return this.#id; } /** * Is client socket connected */ get connected() { return this.#connected; } constructor(options) { super(); this.actions = {}; this.#id = options.id; this.#connection = options.connection; this.actions = options.actions ? options.actions : {}; this.#connected = true; this.#connection .on('error', (err) => this.emit('error', err)) .once('close', () => { this.#connected = false; this.emit('disconnect'); this.removeAllListeners(); }); this.pipeMessageHandler = new PipeMessageHandler_1.PipeMessageHandler(this, this.#connection); } /** * Invoke client side action * @param act * @param args */ async invoke(act, ...args) { return new Promise((resolve, reject) => { const pipeMessage = new PipeMessage_1.PipeMessage(); pipeMessage.type = PipeMessage_1.PipeMessageType.REQUEST; pipeMessage.payload = [act, ...args]; this.once(pipeMessage.messageId, (resultOrError) => resultOrError instanceof Error ? reject(resultOrError) : resolve(resultOrError)); if (!this.connected) { this.removeAllListeners(pipeMessage.messageId); return reject(new SocketDownError_1.SocketDownError('Socket is down')); } this.#connection.send(pipeMessage.serialize()); }); } /** * Notify event to pipe client * @param event * @param args */ notify(event, ...args) { const pipeMessage = new PipeMessage_1.PipeMessage(); pipeMessage.type = PipeMessage_1.PipeMessageType.EVENT; pipeMessage.payload = [event, ...args]; if (this.connected) this.#connection.send(pipeMessage.serialize()); } on(eventName, listener) { super.on(eventName, listener); return this; } once(eventName, listener) { super.once(eventName, listener); return this; } } exports.PipeClientSocket = PipeClientSocket;