UNPKG

io-syncify

Version:

跨进程、跨服务器之间通信同步化

41 lines (40 loc) 1.78 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.InputSyncify = void 0; const Message_1 = require("./Message"); const sleep_1 = require("./sleep"); /** * 输入同步化 */ class InputSyncify { constructor(outputMessageReceiver, inputMessageSender) { this.inputMessageSender = inputMessageSender; this.outputMessageReceiver = outputMessageReceiver; this.outputMessageReceiver.receive(); } /** * 输入消息 * @param {Message} message 消息 * @param {number} timeout 超时时长,默认60000毫秒 */ async input(message, timeout) { return new Promise(async (resolve) => { try { // console.log(Date.now(), 'output message receive once', message.id, this.outputMessageReceiver.eventEmitter.listenerCount(message.id), this.outputMessageReceiver.eventEmitter.eventNames()); this.outputMessageReceiver.eventEmitter.once(message.id, function (response) { // console.log(Date.now(), 'receive output message', response.toJsonArrayString()); resolve(response); }); // console.log(Date.now(), 'send input message', message.toJsonArrayString()); await this.inputMessageSender.send(message); await sleep_1.sleep(timeout !== null && timeout !== void 0 ? timeout : 60000); this.outputMessageReceiver.eventEmitter.removeAllListeners(message.id); resolve(new Message_1.Message(message.id, 'TIMEOUT', Date.now())); } catch (_a) { resolve(new Message_1.Message(message.id, 'ERROR', Date.now())); } }); } } exports.InputSyncify = InputSyncify;