io-syncify
Version:
跨进程、跨服务器之间通信同步化
41 lines (40 loc) • 1.78 kB
JavaScript
;
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;