UNPKG

netkitty

Version:
72 lines (71 loc) 2.65 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.PipeClient = void 0; const events_1 = __importDefault(require("events")); const socket_ipc_1 = require("socket-ipc"); const PipeMessage_1 = require("./PipeMessage"); const PipeMessageHandler_1 = require("./PipeMessageHandler"); const SocketDownError_1 = require("../../errors/SocketDownError"); class PipeClient extends events_1.default { #connected; get connected() { return this.#connected; } constructor(options) { super(); this.actions = {}; this.id = options.id; this.socketPath = options.socketPath; this.actions = options.actions; this.#connected = true; this.client = new socket_ipc_1.MessageClient({ path: this.socketPath }); this.pipeMessageHandler = new PipeMessageHandler_1.PipeMessageHandler(this, this.client); this.client.on('close', () => this.#connected = false); this.client.start().then(() => { this.client.send(Buffer.from(this.id).toString('base64')); this.emit('ready'); }); } /** * Invoke server 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.client.send(pipeMessage.serialize()); }); } /** * Notify event to pipe server * @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.client.send(pipeMessage.serialize()); } on(eventName, listener) { super.on(eventName, listener); return this; } once(eventName, listener) { super.once(eventName, listener); return this; } } exports.PipeClient = PipeClient;