UNPKG

@sex-pomelo/sex-pomelo

Version:

[![NPM version][npm-image-pomelo]][npm-url-pomelo] [![NPM version][npm-image-down]][npm-url-pomelo]

62 lines (50 loc) 1.57 kB
"use strict"; const utils = require('../util/utils'); let ServiceDirect = function(app, opts) { if (!(this instanceof ServiceDirect)) { return new ServiceDirect(app, opts); } opts = opts || {}; this.app = app; }; module.exports = ServiceDirect; ServiceDirect.prototype.schedule = function(reqId, route, msg, recvs, opts, cb) { opts = opts || {}; if(opts.type === 'broadcast') { doBroadcast(this, msg, opts.userOptions); } else { doBatchPush(this, msg, recvs); } if(cb) { process.nextTick(function() { utils.invokeCallback(cb); }); } }; let doBroadcast = function(self, msg, opts) { let channelService = self.app.get('channelService'); let sessionService = self.app.get('sessionService'); if(opts.binded) { sessionService.forEachBindedSession(function(session) { if(channelService.broadcastFilter && !channelService.broadcastFilter(session, msg, opts.filterParam)) { return; } sessionService.sendMessageByUid(session.uid, msg); }); } else { sessionService.forEachSession(function(session) { if(channelService.broadcastFilter && !channelService.broadcastFilter(session, msg, opts.filterParam)) { return; } sessionService.sendMessage(session.id, msg); }); } }; let doBatchPush = function(self, msg, recvs) { let sessionService = self.app.get('sessionService'); for(let i=0, l=recvs.length; i<l; i++) { sessionService.sendMessage(recvs[i], msg); } };