UNPKG

sdg-admin

Version:

pomelo sdg admin plugin

149 lines 11 kB
"use strict"; /** * 接受monitor和client的request/notify,向monitor发送request/notify, * master不会向client发出request/notify,只会针对client的request进行response */ Object.defineProperty(exports, "__esModule", { value: true }); exports.MasterAgent = void 0; const tslib_1 = require("tslib"); const lodash_1 = tslib_1.__importDefault(require("lodash")); const socket_io_1 = require("socket.io"); const events_1 = require("events"); const __1 = require(".."); const masterSocket_1 = require("./masterSocket"); const constants_1 = require("../util/constants"); class MasterAgent extends events_1.EventEmitter { constructor(consoleService, opts) { super(); this.consoleService = consoleService; this.sockets = {}; this.servers = {}; this.port = opts.port; this.timeout = opts.timeout || constants_1.DEFAULT_PARAM.TIMEOUT; } async start() { console.log('master start'); const server = new socket_io_1.Server(this.port); server.on('connect', this.socketEvents.bind(this)); } set(moduleId, value) { this.consoleService.set(moduleId, value); } get(moduleId) { return this.consoleService.get(moduleId); } getServerByType(type) { return lodash_1.default.keys(this.servers).map(k => this.servers[k]).filter(s => s.type === type); } /** * 发送消息到指定monitor * @param id * @param msg */ async sendMsgById(id, msg) { if (!this.servers[id]) throw `none server found by ${id}`; return this.doSend(this.servers[id].socket, msg); } /** * 发送消息到某类monitor * @param type * @param msg */ async sendMsgByServerType(type, msg) { return this.toServers(msg, this.getServerByType(type)); } /** * 发送消息到所有monitor * @param msg */ async sendMsg2AllServer(msg) { return this.toServers(msg, lodash_1.default.values(this.servers)); } /** * 绑定事件 * @param socket */ socketEvents(socket) { console.log('[MasterAgent] new connect'); const masterSocket = new masterSocket_1.MasterSocket(this, socket); this.sockets[socket.id] = socket; socket.on('error', (err) => { console.error(`[${socket.id}] error for`, err); this.removeServer(socket); this.emit('error', err); }); socket.on('disconnect', (reason) => { console.warn(`[${socket.id}] disconnect for`, reason); this.removeServer(socket); this.emit('disconnect', masterSocket.info); }); socket.on(__1.ESocketEvent.MONITOR, async (msg, cb) => { try { const res = await masterSocket.onMonitor(msg); cb && cb(null, res); } catch (e) { cb && cb(e); } }); socket.on(__1.ESocketEvent.CLIENT, async (msg, cb) => { try { const res = await masterSocket.onClient(msg); cb && cb(null, res); } catch (e) { cb && cb(e); } }); socket.on(__1.ESocketEvent.REGISTER, async (msg, cb) => { const valid = await masterSocket.onRegister(msg); if (!valid) return cb('bad'); // 认证通过,注册在线server this.emit(__1.ESocketEvent.REGISTER, msg); if (msg.type) { this.addServer(Object.assign(Object.assign({}, msg), { socket })); } cb(null); }); } addServer(server) { this.servers[server.id] = server; } removeServer(socket) { lodash_1.default.forOwn(this.servers, s => { if (s.socket.id === socket.id) delete this.servers[s.id]; }); delete this.sockets[socket.id]; } /** * 批量发送消息 * @param msg * @param servers */ async toServers(msg, servers) { const res = {}; for (const s of servers) { try { res[s.id] = await this.doSend(s.socket, msg); } catch (e) { res[s.id] = {}; } } return res; } async doSend(socket, msg) { return new Promise((resolve, reject) => { const to = setTimeout(() => reject(`[MasterAgent] request time out for ${this.timeout}`), this.timeout); socket.emit(__1.ESocketEvent.MONITOR, msg, (err, res) => { clearTimeout(to); err ? reject(err) : resolve(res); }); }); } } exports.MasterAgent = MasterAgent; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFzdGVyQWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWFzdGVyL21hc3RlckFnZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O0dBR0c7Ozs7QUFFSCw0REFBdUI7QUFDdkIseUNBQTJDO0FBQzNDLG1DQUFzQztBQUV0QywwQkFBcUc7QUFDckcsaURBQThDO0FBRTlDLGlEQUFrRDtBQUVsRCxNQUFhLFdBQVksU0FBUSxxQkFBWTtJQU0zQyxZQUFtQixjQUE4QixFQUFFLElBQXNCO1FBQ3ZFLEtBQUssRUFBRSxDQUFDO1FBRFMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBSDFDLFlBQU8sR0FBOEIsRUFBRSxDQUFDO1FBQ3hDLFlBQU8sR0FBb0MsRUFBRSxDQUFDO1FBSW5ELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUkseUJBQWEsQ0FBQyxPQUFPLENBQUM7SUFDdkQsQ0FBQztJQUVNLEtBQUssQ0FBQyxLQUFLO1FBQ2hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDNUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxrQkFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxNQUFNLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFTSxHQUFHLENBQUMsUUFBZ0IsRUFBRSxLQUFjO1FBQ3pDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQ00sR0FBRyxDQUFDLFFBQWdCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFD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