sdg-admin
Version:
pomelo sdg admin plugin
149 lines • 11 kB
JavaScript
;
/**
* 接受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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