pomelo
Version:
Pomelo is a fast, scalable game server framework for [node.js](http://nodejs.org). It provides the basic development framework and many related components, including libraries and tools. Pomelo is also suitable for real-time web applications; its distri
84 lines (75 loc) • 2.34 kB
JavaScript
/**
* Component for monitor.
* Load and start monitor client.
*/
var logger = require('pomelo-logger').getLogger('pomelo', __filename);
var admin = require('pomelo-admin');
var moduleUtil = require('../util/moduleUtil');
var utils = require('../util/utils');
var Constants = require('../util/constants');
var Monitor = function(app, opts) {
opts = opts || {};
this.app = app;
this.serverInfo = app.getCurServer();
this.masterInfo = app.getMaster();
this.modules = [];
this.closeWatcher = opts.closeWatcher;
this.monitorConsole = admin.createMonitorConsole({
id: this.serverInfo.id,
type: this.app.getServerType(),
host: this.masterInfo.host,
port: this.masterInfo.port,
info: this.serverInfo,
env: this.app.get(Constants.RESERVED.ENV),
authServer: app.get('adminAuthServerMonitor') // auth server function
});
};
module.exports = Monitor;
Monitor.prototype.start = function(cb) {
moduleUtil.registerDefaultModules(false, this.app, this.closeWatcher);
this.startConsole(cb);
};
Monitor.prototype.startConsole = function(cb) {
moduleUtil.loadModules(this, this.monitorConsole);
var self = this;
this.monitorConsole.start(function(err) {
if (err) {
utils.invokeCallback(cb, err);
return;
}
moduleUtil.startModules(self.modules, function(err) {
utils.invokeCallback(cb, err);
return;
});
});
this.monitorConsole.on('error', function(err) {
if(!!err) {
logger.error('monitorConsole encounters with error: %j', err.stack);
return;
}
});
};
Monitor.prototype.stop = function(cb) {
this.monitorConsole.stop();
this.modules = [];
process.nextTick(function() {
utils.invokeCallback(cb);
});
};
// monitor reconnect to master
Monitor.prototype.reconnect = function(masterInfo) {
var self = this;
this.stop(function() {
self.monitorConsole = admin.createMonitorConsole({
id: self.serverInfo.id,
type: self.app.getServerType(),
host: masterInfo.host,
port: masterInfo.port,
info: self.serverInfo,
env: self.app.get(Constants.RESERVED.ENV)
});
self.startConsole(function() {
logger.info('restart modules for server : %j finish.', self.app.serverId);
});
});
};