UNPKG

netkitty

Version:
96 lines (95 loc) 4.24 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.PipeMessageHandler = void 0; const socket_ipc_1 = require("socket-ipc"); const PipeMessage_1 = require("./PipeMessage"); const events_1 = __importDefault(require("events")); const UnknownPipeMessageTypeError_1 = require("../../errors/UnknownPipeMessageTypeError"); const ActionNotFoundError_1 = require("../../errors/ActionNotFoundError"); class PipeMessageHandler extends events_1.default { #owner; #socket; constructor(owner, socket) { super(); this.#owner = owner; this.#socket = socket; if (this.#socket instanceof socket_ipc_1.MessageConnection) { this.#socket.on('message', (message) => this.onMessageHandler(message)); } else { this.#socket.on('message', (message) => this.onMessageHandler(message)); } } /** * On pipe message handler * @param message * @protected */ onMessageHandler(message) { const pipeMessage = new PipeMessage_1.PipeMessage(message.data); switch (pipeMessage.type) { case PipeMessage_1.PipeMessageType.EVENT: { const args = pipeMessage.payload; const eventName = args.shift(); this.#owner.emit(eventName, ...args); } break; case PipeMessage_1.PipeMessageType.REQUEST: { const args = pipeMessage.payload; const actionName = args.shift(); const action = this.#owner.actions[actionName]; if (action) { action.call(this.#owner, ...args) .then(response => { pipeMessage.type = PipeMessage_1.PipeMessageType.RESPONSE_OK; pipeMessage.payload = response; this.#socket.send(pipeMessage.serialize()); }) .catch((error) => { pipeMessage.type = PipeMessage_1.PipeMessageType.RESPONSE_ERR; pipeMessage.payload = { message: error.message, errno: error.errno, code: error.code }; this.#socket.send(pipeMessage.serialize()); }); } else { pipeMessage.type = PipeMessage_1.PipeMessageType.RESPONSE_ERR; const actionNotFoundError = new ActionNotFoundError_1.ActionNotFoundError(`Action ${actionName} not found`); pipeMessage.payload = { message: actionNotFoundError.message, errno: actionNotFoundError.errno, code: actionNotFoundError.code }; this.#socket.send(pipeMessage.serialize()); } } break; case PipeMessage_1.PipeMessageType.RESPONSE_OK: { this.#owner.emit(pipeMessage.messageId, pipeMessage.payload); } break; case PipeMessage_1.PipeMessageType.RESPONSE_ERR: { const responseError = new Error(); responseError.message = pipeMessage.payload.message; responseError.errno = pipeMessage.payload.errno; responseError.code = pipeMessage.payload.code; this.#owner.emit(pipeMessage.messageId, responseError); } break; default: { this.#owner.emit('error', new UnknownPipeMessageTypeError_1.UnknownPipeMessageTypeError(`Unknown pipe message type ${pipeMessage.type}`)); } } } } exports.PipeMessageHandler = PipeMessageHandler;