eazy-pomelo
Version:
NetEase Pomelo Of EazyGame OEM
110 lines (92 loc) • 3.17 kB
JavaScript
var logger = require('pomelo-logger').getLogger('pomelo', __filename);
var utils = require('../util/utils');
var Constants = require('../util/constants');
var MasterWatchdog = require('../master/watchdog');
module.exports = function(opts, consoleService) {
return new Module(opts, consoleService);
};
module.exports.moduleId = Constants.KEYWORDS.MASTER_WATCHER;
var Module = function(opts, consoleService) {
this.app = opts.app;
this.service = consoleService;
this.id = this.app.getServerId();
this.watchdog = new MasterWatchdog(this.app, this.service);
this.service.on('register', onServerAdd.bind(null, this));
this.service.on('disconnect', onServerLeave.bind(null, this));
this.service.on('reconnect', onServerReconnect.bind(null, this));
};
// ----------------- bind methods -------------------------
var onServerAdd = function(module, record) {
logger.debug('masterwatcher receive add server event, with server: %j', record);
if(!record || record.type === 'client' || !record.serverType) {
return;
}
module.watchdog.addServer(record);
};
var onServerReconnect = function(module, record) {
logger.debug('masterwatcher receive reconnect server event, with server: %j', record);
if(!record || record.type === 'client' || !record.serverType) {
logger.warn('onServerReconnect receive wrong message: %j', record);
return;
}
module.watchdog.reconnectServer(record);
};
var onServerLeave = function(module, id, type) {
logger.debug('masterwatcher receive remove server event, with server: %s, type: %s', id, type);
if(!id) {
logger.warn('onServerLeave receive server id is empty.');
return;
}
if(type !== 'client') {
module.watchdog.removeServer(id);
}
};
// ----------------- module methods -------------------------
Module.prototype.start = function(cb) {
utils.invokeCallback(cb);
};
Module.prototype.masterHandler = function(agent, msg, cb) {
if(!msg) {
logger.warn('masterwatcher receive empty message.');
return;
}
var func = masterMethods[msg.action];
if(!func) {
logger.info('masterwatcher unknown action: %j', msg.action);
return;
}
func(this, agent, msg, cb);
};
// ----------------- monitor request methods -------------------------
var subscribe = function(module, agent, msg, cb) {
if(!msg) {
utils.invokeCallback(cb, new Error('masterwatcher subscribe empty message.'));
return;
}
module.watchdog.subscribe(msg.id);
utils.invokeCallback(cb, null, module.watchdog.query());
};
var unsubscribe = function(module, agent, msg, cb) {
if(!msg) {
utils.invokeCallback(cb, new Error('masterwatcher unsubscribe empty message.'));
return;
}
module.watchdog.unsubscribe(msg.id);
utils.invokeCallback(cb);
};
var query = function(module, agent, msg, cb) {
utils.invokeCallback(cb, null, module.watchdog.query());
};
var record = function(module, agent, msg) {
if(!msg) {
utils.invokeCallback(cb, new Error('masterwatcher record empty message.'));
return;
}
module.watchdog.record(msg.id);
};
var masterMethods = {
'subscribe': subscribe,
'unsubscribe': unsubscribe,
'query': query,
'record': record
};