123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- 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
- };
|