UNPKG

11.4 kBJavaScriptView Raw
1'use strict';
2
3var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray');
4
5var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
6
7var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray');
8
9var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
10
11var _toArray2 = require('babel-runtime/helpers/toArray');
12
13var _toArray3 = _interopRequireDefault(_toArray2);
14
15var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');
16
17var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
18
19var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
20
21var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
22
23var _createClass2 = require('babel-runtime/helpers/createClass');
24
25var _createClass3 = _interopRequireDefault(_createClass2);
26
27var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
28
29var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
30
31var _get4 = require('babel-runtime/helpers/get');
32
33var _get5 = _interopRequireDefault(_get4);
34
35var _inherits2 = require('babel-runtime/helpers/inherits');
36
37var _inherits3 = _interopRequireDefault(_inherits2);
38
39function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
40
41var Promise = require('bluebird');
42var _ = require('lodash');
43var hasBinary = require('has-binary');
44
45var _require = require('events');
46
47var EventEmitter = _require.EventEmitter;
48
49var SocketIOClusterBus = function (_EventEmitter) {
50 (0, _inherits3.default)(SocketIOClusterBus, _EventEmitter);
51
52 function SocketIOClusterBus(server, adapter) {
53 (0, _classCallCheck3.default)(this, SocketIOClusterBus);
54
55 var _this = (0, _possibleConstructorReturn3.default)(this, (0, _getPrototypeOf2.default)(SocketIOClusterBus).call(this));
56
57 _this.server = server;
58 _this.adapter = adapter;
59 _this.channel = 'cluster:bus';
60 _this.intenalEvents = ['roomLeaveSocket', 'socketRoomLeft', 'disconnectUserSockets'];
61 _this.types = [2, 5];
62 _this.injectBusHook();
63 return _this;
64 }
65
66 (0, _createClass3.default)(SocketIOClusterBus, [{
67 key: 'listen',
68 value: function listen() {
69 var _this2 = this;
70
71 return Promise.fromCallback(function (cb) {
72 return _this2.adapter.add(_this2.server.instanceUID, _this2.channel, cb);
73 });
74 }
75 }, {
76 key: 'makeSocketRoomLeftName',
77 value: function makeSocketRoomLeftName(id, roomName) {
78 return 'socketRoomLeft:' + id + ':' + roomName;
79 }
80 }, {
81 key: 'mergeEventName',
82 value: function mergeEventName(ev, args) {
83 switch (ev) {
84 case 'socketRoomLeft':
85 var _args = (0, _toArray3.default)(args);
86
87 var id = _args[0];
88 var roomName = _args[1];
89
90 var nargs = _args.slice(2);
91
92 var nev = this.makeSocketRoomLeftName(id, roomName);
93 return [nev, nargs];
94 default:
95 return [ev, args];
96 }
97 }
98
99 // TODO: Use an API from socket.io if(when) it will be available.
100
101 }, {
102 key: 'emit',
103 value: function emit(ev) {
104 for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
105 args[_key - 1] = arguments[_key];
106 }
107
108 var data = [ev].concat(args);
109 var packet = { type: hasBinary(args) ? 5 : 2, data: data };
110 var opts = { rooms: [this.channel] };
111 return this.adapter.broadcast(packet, opts, false);
112 }
113 }, {
114 key: 'onPacket',
115 value: function onPacket(packet) {
116 var _packet$data = (0, _toArray3.default)(packet.data);
117
118 var ev = _packet$data[0];
119
120 var args = _packet$data.slice(1);
121
122 if (_.includes(this.intenalEvents, ev)) {
123 var _get2;
124
125 var _mergeEventName = this.mergeEventName(ev, args);
126
127 var _mergeEventName2 = (0, _slicedToArray3.default)(_mergeEventName, 2);
128
129 var nev = _mergeEventName2[0];
130 var nargs = _mergeEventName2[1];
131
132 return (_get2 = (0, _get5.default)((0, _getPrototypeOf2.default)(SocketIOClusterBus.prototype), 'emit', this)).call.apply(_get2, [this, nev].concat((0, _toConsumableArray3.default)(nargs)));
133 } else {
134 var _get3;
135
136 return (_get3 = (0, _get5.default)((0, _getPrototypeOf2.default)(SocketIOClusterBus.prototype), 'emit', this)).call.apply(_get3, [this, ev].concat((0, _toConsumableArray3.default)(args)));
137 }
138 }
139 }, {
140 key: 'broadcastHook',
141 value: function broadcastHook(packet, opts) {
142 var isBusCahnnel = _.indexOf(opts.rooms, this.channel) >= 0;
143 var isBusType = _.indexOf(this.types, packet.type) >= 0;
144 if (isBusCahnnel && isBusType) {
145 this.onPacket(packet);
146 }
147 }
148
149 // TODO: Use an API from socket.io if(when) it will be available.
150
151 }, {
152 key: 'injectBusHook',
153 value: function injectBusHook() {
154 var broadcastHook = this.broadcastHook.bind(this);
155 var adapter = this.adapter;
156 var orig = this.adapter.broadcast;
157 adapter.broadcast = function () {
158 for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
159 args[_key2] = arguments[_key2];
160 }
161
162 broadcastHook.apply(undefined, args);
163 orig.apply(adapter, args);
164 };
165 }
166 }]);
167 return SocketIOClusterBus;
168}(EventEmitter);
169
170module.exports = SocketIOClusterBus;
171//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9Tb2NrZXRJT0NsdXN0ZXJCdXMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxJQUFNLFVBQVUsUUFBUSxVQUFSLENBQWhCO0FBQ0EsSUFBTSxJQUFJLFFBQVEsUUFBUixDQUFWO0FBQ0EsSUFBTSxZQUFZLFFBQVEsWUFBUixDQUFsQjs7ZUFDeUIsUUFBUSxRQUFSLEM7O0lBQWpCLFksWUFBQSxZOztJQUVGLGtCOzs7QUFFSiw4QkFBYSxNQUFiLEVBQXFCLE9BQXJCLEVBQThCO0FBQUE7O0FBQUE7O0FBRTVCLFVBQUssTUFBTCxHQUFjLE1BQWQ7QUFDQSxVQUFLLE9BQUwsR0FBZSxPQUFmO0FBQ0EsVUFBSyxPQUFMLEdBQWUsYUFBZjtBQUNBLFVBQUssYUFBTCxHQUFxQixDQUFFLGlCQUFGLEVBQ0UsZ0JBREYsRUFFRSx1QkFGRixDQUFyQjtBQUdBLFVBQUssS0FBTCxHQUFhLENBQUUsQ0FBRixFQUFLLENBQUwsQ0FBYjtBQUNBLFVBQUssYUFBTDtBQVQ0QjtBQVU3Qjs7Ozs2QkFFUztBQUFBOztBQUNSLGFBQU8sUUFBUSxZQUFSLENBQXFCLGNBQU07QUFDaEMsZUFBTyxPQUFLLE9BQUwsQ0FBYSxHQUFiLENBQWlCLE9BQUssTUFBTCxDQUFZLFdBQTdCLEVBQTBDLE9BQUssT0FBL0MsRUFBd0QsRUFBeEQsQ0FBUDtBQUNELE9BRk0sQ0FBUDtBQUdEOzs7MkNBRXVCLEUsRUFBSSxRLEVBQVU7QUFDcEMsaUNBQXlCLEVBQXpCLFNBQStCLFFBQS9CO0FBQ0Q7OzttQ0FFZSxFLEVBQUksSSxFQUFNO0FBQ3hCLGNBQVEsRUFBUjtBQUNFLGFBQUssZ0JBQUw7QUFBQSw2Q0FDaUMsSUFEakM7O0FBQUEsY0FDTyxFQURQO0FBQUEsY0FDVyxRQURYOztBQUFBLGNBQ3dCLEtBRHhCOztBQUVFLGNBQUksTUFBTSxLQUFLLHNCQUFMLENBQTRCLEVBQTVCLEVBQWdDLFFBQWhDLENBQVY7QUFDQSxpQkFBTyxDQUFDLEdBQUQsRUFBTSxLQUFOLENBQVA7QUFDRjtBQUNFLGlCQUFPLENBQUMsRUFBRCxFQUFLLElBQUwsQ0FBUDtBQU5KO0FBUUQ7O0FBRUQ7Ozs7eUJBQ00sRSxFQUFhO0FBQUEsd0NBQU4sSUFBTTtBQUFOLFlBQU07QUFBQTs7QUFDakIsVUFBSSxRQUFTLEVBQVQsU0FBZ0IsSUFBaEIsQ0FBSjtBQUNBLFVBQUksU0FBUyxFQUFFLE1BQU8sVUFBVSxJQUFWLElBQWtCLENBQWxCLEdBQXNCLENBQS9CLEVBQW1DLFVBQW5DLEVBQWI7QUFDQSxVQUFJLE9BQU8sRUFBRSxPQUFPLENBQUUsS0FBSyxPQUFQLENBQVQsRUFBWDtBQUNBLGFBQU8sS0FBSyxPQUFMLENBQWEsU0FBYixDQUF1QixNQUF2QixFQUErQixJQUEvQixFQUFxQyxLQUFyQyxDQUFQO0FBQ0Q7Ozs2QkFFUyxNLEVBQVE7QUFBQSxnREFDSSxPQUFPLElBRFg7O0FBQUEsVUFDWCxFQURXOztBQUFBLFVBQ0osSUFESTs7QUFFaEIsVUFBSSxFQUFFLFFBQUYsQ0FBVyxLQUFLLGFBQWhCLEVBQStCLEVBQS9CLENBQUosRUFBd0M7QUFBQTs7QUFBQSw4QkFDbkIsS0FBSyxjQUFMLENBQW9CLEVBQXBCLEVBQXdCLElBQXhCLENBRG1COztBQUFBOztBQUFBLFlBQ2pDLEdBRGlDO0FBQUEsWUFDNUIsS0FENEI7O0FBRXRDLGdKQUFrQixHQUFsQiwwQ0FBMEIsS0FBMUI7QUFDRCxPQUhELE1BR087QUFBQTs7QUFDTCxnSkFBa0IsRUFBbEIsMENBQXlCLElBQXpCO0FBQ0Q7QUFDRjs7O2tDQUVjLE0sRUFBUSxJLEVBQU07QUFDM0IsVUFBSSxlQUFlLEVBQUUsT0FBRixDQUFVLEtBQUssS0FBZixFQUFzQixLQUFLLE9BQTNCLEtBQXVDLENBQTFEO0FBQ0EsVUFBSSxZQUFZLEVBQUUsT0FBRixDQUFVLEtBQUssS0FBZixFQUFzQixPQUFPLElBQTdCLEtBQXNDLENBQXREO0FBQ0EsVUFBSSxnQkFBZ0IsU0FBcEIsRUFBK0I7QUFDN0IsYUFBSyxRQUFMLENBQWMsTUFBZDtBQUNEO0FBQ0Y7O0FBRUQ7Ozs7b0NBQ2lCO0FBQ2YsVUFBSSxnQkFBZ0IsS0FBSyxhQUFMLENBQW1CLElBQW5CLENBQXdCLElBQXhCLENBQXBCO0FBQ0EsVUFBSSxVQUFVLEtBQUssT0FBbkI7QUFDQSxVQUFJLE9BQU8sS0FBSyxPQUFMLENBQWEsU0FBeEI7QUFDQSxjQUFRLFNBQVIsR0FBb0IsWUFBbUI7QUFBQSwyQ0FBTixJQUFNO0FBQU4sY0FBTTtBQUFBOztBQUNyQyx1Q0FBaUIsSUFBakI7QUFDQSxhQUFLLEtBQUwsQ0FBVyxPQUFYLEVBQW9CLElBQXBCO0FBQ0QsT0FIRDtBQUlEOzs7RUF0RThCLFk7O0FBMEVqQyxPQUFPLE9BQVAsR0FBaUIsa0JBQWpCIiwiZmlsZSI6IlNvY2tldElPQ2x1c3RlckJ1cy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBQcm9taXNlID0gcmVxdWlyZSgnYmx1ZWJpcmQnKVxuY29uc3QgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpXG5jb25zdCBoYXNCaW5hcnkgPSByZXF1aXJlKCdoYXMtYmluYXJ5JylcbmNvbnN0IHsgRXZlbnRFbWl0dGVyIH0gPSByZXF1aXJlKCdldmVudHMnKVxuXG5jbGFzcyBTb2NrZXRJT0NsdXN0ZXJCdXMgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuXG4gIGNvbnN0cnVjdG9yIChzZXJ2ZXIsIGFkYXB0ZXIpIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5zZXJ2ZXIgPSBzZXJ2ZXJcbiAgICB0aGlzLmFkYXB0ZXIgPSBhZGFwdGVyXG4gICAgdGhpcy5jaGFubmVsID0gJ2NsdXN0ZXI6YnVzJ1xuICAgIHRoaXMuaW50ZW5hbEV2ZW50cyA9IFsgJ3Jvb21MZWF2ZVNvY2tldCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAnc29ja2V0Um9vbUxlZnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rpc2Nvbm5lY3RVc2VyU29ja2V0cycgXVxuICAgIHRoaXMudHlwZXMgPSBbIDIsIDUgXVxuICAgIHRoaXMuaW5qZWN0QnVzSG9vaygpXG4gIH1cblxuICBsaXN0ZW4gKCkge1xuICAgIHJldHVybiBQcm9taXNlLmZyb21DYWxsYmFjayhjYiA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5hZGFwdGVyLmFkZCh0aGlzLnNlcnZlci5pbnN0YW5jZVVJRCwgdGhpcy5jaGFubmVsLCBjYilcbiAgICB9KVxuICB9XG5cbiAgbWFrZVNvY2tldFJvb21MZWZ0TmFtZSAoaWQsIHJvb21OYW1lKSB7XG4gICAgcmV0dXJuIGBzb2NrZXRSb29tTGVmdDoke2lkfToke3Jvb21OYW1lfWBcbiAgfVxuXG4gIG1lcmdlRXZlbnROYW1lIChldiwgYXJncykge1xuICAgIHN3aXRjaCAoZXYpIHtcbiAgICAgIGNhc2UgJ3NvY2tldFJvb21MZWZ0JzpcbiAgICAgICAgbGV0IFtpZCwgcm9vbU5hbWUsIC4uLm5hcmdzXSA9IGFyZ3NcbiAgICAgICAgbGV0IG5ldiA9IHRoaXMubWFrZVNvY2tldFJvb21MZWZ0TmFtZShpZCwgcm9vbU5hbWUpXG4gICAgICAgIHJldHVybiBbbmV2LCBuYXJnc11cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBbZXYsIGFyZ3NdXG4gICAgfVxuICB9XG5cbiAgLy8gVE9ETzogVXNlIGFuIEFQSSBmcm9tIHNvY2tldC5pbyBpZih3aGVuKSBpdCB3aWxsIGJlIGF2YWlsYWJsZS5cbiAgZW1pdCAoZXYsIC4uLmFyZ3MpIHtcbiAgICBsZXQgZGF0YSA9IFsgZXYsIC4uLmFyZ3MgXVxuICAgIGxldCBwYWNrZXQgPSB7IHR5cGU6IChoYXNCaW5hcnkoYXJncykgPyA1IDogMiksIGRhdGEgfVxuICAgIGxldCBvcHRzID0geyByb29tczogWyB0aGlzLmNoYW5uZWwgXSB9XG4gICAgcmV0dXJuIHRoaXMuYWRhcHRlci5icm9hZGNhc3QocGFja2V0LCBvcHRzLCBmYWxzZSlcbiAgfVxuXG4gIG9uUGFja2V0IChwYWNrZXQpIHtcbiAgICBsZXQgW2V2LCAuLi5hcmdzXSA9IHBhY2tldC5kYXRhXG4gICAgaWYgKF8uaW5jbHVkZXModGhpcy5pbnRlbmFsRXZlbnRzLCBldikpIHtcbiAgICAgIGxldCBbbmV2LCBuYXJnc10gPSB0aGlzLm1lcmdlRXZlbnROYW1lKGV2LCBhcmdzKVxuICAgICAgcmV0dXJuIHN1cGVyLmVtaXQobmV2LCAuLi5uYXJncylcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHN1cGVyLmVtaXQoZXYsIC4uLmFyZ3MpXG4gICAgfVxuICB9XG5cbiAgYnJvYWRjYXN0SG9vayAocGFja2V0LCBvcHRzKSB7XG4gICAgbGV0IGlzQnVzQ2Fobm5lbCA9IF8uaW5kZXhPZihvcHRzLnJvb21zLCB0aGlzLmNoYW5uZWwpID49IDBcbiAgICBsZXQgaXNCdXNUeXBlID0gXy5pbmRleE9mKHRoaXMudHlwZXMsIHBhY2tldC50eXBlKSA+PSAwXG4gICAgaWYgKGlzQnVzQ2Fobm5lbCAmJiBpc0J1c1R5cGUpIHtcbiAgICAgIHRoaXMub25QYWNrZXQocGFja2V0KVxuICAgIH1cbiAgfVxuXG4gIC8vIFRPRE86IFVzZSBhbiBBUEkgZnJvbSBzb2NrZXQuaW8gaWYod2hlbikgaXQgd2lsbCBiZSBhdmFpbGFibGUuXG4gIGluamVjdEJ1c0hvb2sgKCkge1xuICAgIGxldCBicm9hZGNhc3RIb29rID0gdGhpcy5icm9hZGNhc3RIb29rLmJpbmQodGhpcylcbiAgICBsZXQgYWRhcHRlciA9IHRoaXMuYWRhcHRlclxuICAgIGxldCBvcmlnID0gdGhpcy5hZGFwdGVyLmJyb2FkY2FzdFxuICAgIGFkYXB0ZXIuYnJvYWRjYXN0ID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgIGJyb2FkY2FzdEhvb2soLi4uYXJncylcbiAgICAgIG9yaWcuYXBwbHkoYWRhcHRlciwgYXJncylcbiAgICB9XG4gIH1cblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNvY2tldElPQ2x1c3RlckJ1c1xuIl19
\No newline at end of file