UNPKG

sdg-rpc

Version:

pomelo ts rpc

80 lines 6.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const socket_io_client_1 = require("socket.io-client"); const events_1 = require("events"); const constants_1 = tslib_1.__importDefault(require("../../util/constants")); class SocketClient extends events_1.EventEmitter { constructor(serverInfo, opts) { super(); this.id = serverInfo.id; this.host = serverInfo.host; this.port = serverInfo.port; this.bufferMsg = !!opts.bufferMsg; this.keepalive = opts.keepalive || constants_1.default.DEFAULT_PARAM.KEEPALIVE; this.interval = opts.interval || constants_1.default.DEFAULT_PARAM.INTERVAL; this.timeout = opts.timeout || constants_1.default.DEFAULT_PARAM.CALLBACK_TIMEOUT; this.connected = false; this.closed = false; this.serverId = opts.context.serverId; } connect(cb) { if (this.connected) return cb && cb(new Error('mailbox has already connected.')); this.socket = socket_io_client_1.io(`http://${this.host}:${this.port}`, { query: { serverId: this.serverId }, transports: ['websocket', 'polling'], forceNew: true, reconnection: false }); this.socket.on('connect', () => { console.log(`[rpc][${this.id}]connected`); if (this.connected) return; this.connected = true; cb && cb(); }); this.socket.on('error', (err) => { console.error('rpc socket is error, remote server host: %s, port: %s', this.host, this.port); this.emit('close', this.id); cb && cb(err); }); this.socket.on('disconnect', (reason) => { console.error('rpc socket is disconnect, reason: %s', reason); this.emit('close', this.id); cb && cb(reason); }); } send(msg, cb) { const req = { timeout: false, msg }; const to = this.setCbTimeout(req, cb); this.socket.emit('publish', msg, (err, res) => { if (!req.timeout) { clearTimeout(to); cb(err, res); } }); } close() { if (this.closed) return; this.closed = true; this.connected = false; this.socket.disconnect(); } /** * 设置rpc请求超时 * @param req 保存当前rpc是否超时信息 * @param cb */ setCbTimeout(req, cb) { return setTimeout(() => { req.timeout = true; cb(`[rpc][${this.serverId}] callback timeout for ${this.timeout}ms, [${this.id}] ${this.host}:${this.port}`); }, this.timeout); } } exports.default = SocketClient; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaWVudC9tYWlsYm94ZXMvc2lvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHVEQUE4QztBQUM5QyxtQ0FBc0M7QUFJdEMsNkVBQTZDO0FBRTdDLE1BQXFCLFlBQWEsU0FBUSxxQkFBWTtJQWVwRCxZQUFZLFVBQTBCLEVBQUUsSUFBdUI7UUFDN0QsS0FBSyxFQUFFLENBQUM7UUFFUixJQUFJLENBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO1FBQzVCLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztRQUM1QixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxtQkFBUyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUM7UUFDckUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLG1CQUFTLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQztRQUNsRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksbUJBQVMsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUM7UUFFeEUsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztJQUN4QyxDQUFDO0lBRU0sT0FBTyxDQUFDLEVBQUU7UUFDZixJQUFJLElBQUksQ0FBQyxTQUFTO1lBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLGdDQUFnQyxD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