direct.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. var utils = require('../util/utils');
  2. var Service = function(app, opts) {
  3. if (!(this instanceof Service)) {
  4. return new Service(app, opts);
  5. }
  6. opts = opts || {};
  7. this.app = app;
  8. };
  9. module.exports = Service;
  10. Service.prototype.schedule = function(reqId, route, msg, recvs, opts, cb) {
  11. opts = opts || {};
  12. if(opts.type === 'broadcast') {
  13. doBroadcast(this, msg, opts.userOptions);
  14. } else {
  15. doBatchPush(this, msg, recvs);
  16. }
  17. if(cb) {
  18. process.nextTick(function() {
  19. utils.invokeCallback(cb);
  20. });
  21. }
  22. };
  23. var doBroadcast = function(self, msg, opts) {
  24. var channelService = self.app.get('channelService');
  25. var sessionService = self.app.get('sessionService');
  26. if(opts.binded) {
  27. sessionService.forEachBindedSession(function(session) {
  28. if(channelService.broadcastFilter &&
  29. !channelService.broadcastFilter(session, msg, opts.filterParam)) {
  30. return;
  31. }
  32. sessionService.sendMessageByUid(session.uid, msg);
  33. });
  34. } else {
  35. sessionService.forEachSession(function(session) {
  36. if(channelService.broadcastFilter &&
  37. !channelService.broadcastFilter(session, msg, opts.filterParam)) {
  38. return;
  39. }
  40. sessionService.sendMessage(session.id, msg);
  41. });
  42. }
  43. };
  44. var doBatchPush = function(self, msg, recvs) {
  45. var sessionService = self.app.get('sessionService');
  46. for(var i=0, l=recvs.length; i<l; i++) {
  47. sessionService.sendMessage(recvs[i], msg);
  48. }
  49. };