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
66 lines (58 loc) • 2.03 kB
JavaScript
/**
* Remote channel service for frontend server.
* Receive push request from backend servers and push it to clients.
*/
var utils = require('../../../util/utils');
var logger = require('pomelo-logger').getLogger('pomelo', __filename);
module.exports = function(app) {
return new Remote(app);
};
var Remote = function(app) {
this.app = app;
};
/**
* Push message to client by uids.
*
* @param {String} route route string of message
* @param {Object} msg message
* @param {Array} uids user ids that would receive the message
* @param {Object} opts push options
* @param {Function} cb callback function
*/
Remote.prototype.pushMessage = function(route, msg, uids, opts, cb) {
if(!msg){
logger.error('Can not send empty message! route : %j, compressed msg : %j',
route, msg);
utils.invokeCallback(cb, new Error('can not send empty message.'));
return;
}
var connector = this.app.components.__connector__;
var sessionService = this.app.get('sessionService');
var fails = [], sids = [], sessions, j, k;
for(var i=0, l=uids.length; i<l; i++) {
sessions = sessionService.getByUid(uids[i]);
if(!sessions) {
fails.push(uids[i]);
} else {
for(j=0, k=sessions.length; j<k; j++) {
sids.push(sessions[j].id);
}
}
}
logger.debug('[%s] pushMessage uids: %j, msg: %j, sids: %j', this.app.serverId, uids, msg, sids);
connector.send(null, route, msg, sids, opts, function(err) {
utils.invokeCallback(cb, err, fails);
});
};
/**
* Broadcast to all the client connectd with current frontend server.
*
* @param {String} route route string
* @param {Object} msg message
* @param {Boolean} opts broadcast options.
* @param {Function} cb callback function
*/
Remote.prototype.broadcast = function(route, msg, opts, cb) {
var connector = this.app.components.__connector__;
connector.send(null, route, msg, null, opts, cb);
};