1 | ;
|
2 |
|
3 | var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray');
|
4 |
|
5 | var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
|
6 |
|
7 | var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray');
|
8 |
|
9 | var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
|
10 |
|
11 | var _toArray2 = require('babel-runtime/helpers/toArray');
|
12 |
|
13 | var _toArray3 = _interopRequireDefault(_toArray2);
|
14 |
|
15 | var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');
|
16 |
|
17 | var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
|
18 |
|
19 | var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
|
20 |
|
21 | var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
|
22 |
|
23 | var _createClass2 = require('babel-runtime/helpers/createClass');
|
24 |
|
25 | var _createClass3 = _interopRequireDefault(_createClass2);
|
26 |
|
27 | var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
|
28 |
|
29 | var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
|
30 |
|
31 | var _get4 = require('babel-runtime/helpers/get');
|
32 |
|
33 | var _get5 = _interopRequireDefault(_get4);
|
34 |
|
35 | var _inherits2 = require('babel-runtime/helpers/inherits');
|
36 |
|
37 | var _inherits3 = _interopRequireDefault(_inherits2);
|
38 |
|
39 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
40 |
|
41 | var Promise = require('bluebird');
|
42 | var _ = require('lodash');
|
43 | var hasBinary = require('has-binary');
|
44 |
|
45 | var _require = require('events');
|
46 |
|
47 | var EventEmitter = _require.EventEmitter;
|
48 |
|
49 | var 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 |
|
170 | module.exports = SocketIOClusterBus;
|
171 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9Tb2NrZXRJT0NsdXN0ZXJCdXMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxJQUFNLFVBQVUsUUFBUSxVQUFSLENBQWhCO0FBQ0EsSUFBTSxJQUFJLFFBQVEsUUFBUixDQUFWO0FBQ0EsSUFBTSxZQUFZLFFBQVEsWUFBUixDQUFsQjs7ZUFDeUIsUUFBUSxRQUFSLEM7O0lBQWpCLFksWUFBQSxZOztJQUVGLGtCOzs7QUFFSiw4QkFBYSxNQUFiLEVBQXFCLE9BQXJCLEVBQThCO0FBQUE7O0FBQUE7O0FBRTVCLFVBQUssTUFBTCxHQUFjLE1BQWQ7QUFDQSxVQUFLLE9BQUwsR0FBZSxPQUFmO0FBQ0EsVUFBSyxPQUFMLEdBQWUsYUFBZjtBQUNBLFVBQUssYUFBTCxHQUFxQixDQUFFLGlCQUFGLEVBQ0UsZ0JBREYsRUFFRSx1QkFGRixDQUFyQjtBQUdBLFVBQUssS0FBTCxHQUFhLENBQUUsQ0FBRixFQUFLLENBQUwsQ0FBYjtBQUNBLFVBQUssYUFBTDtBQVQ0QjtBQVU3Qjs7Ozs2QkFFUztBQUFBOztBQUNSLGFBQU8sUUFBUSxZQUFSLENBQXFCLGNBQU07QUFDaEMsZUFBTyxPQUFLLE9BQUwsQ0FBYSxHQUFiLENBQWlCLE9BQUssTUFBTCxDQUFZLFdBQTdCLEVBQTBDLE9BQUssT0FBL0MsRUFBd0QsRUFBeEQsQ0FBUDtBQUNELE9BRk0sQ0FBUDtBQUdEOzs7MkNBRXVCLEUsRUFBSSxRLEVBQVU7QUFDcEMsaUNBQXlCLEVBQXpCLFNBQStCLFFBQS9CO0FBQ0Q7OzttQ0FFZSxFLEVBQUksSSxFQUFNO0FBQ3hCLGNBQVEsRUFBUjtBQUNFLGFBQUssZ0JBQUw7QUFBQSw2Q0FDaUMsSUFEakM7O0FBQUEsY0FDTyxFQURQO0FBQUEsY0FDVyxRQURYOztBQUFBLGNBQ3dCLEtBRHhCOztBQUVFLGNBQUksTUFBTSxLQUFLLHNCQUFMLENBQTRCLEVBQTVCLEVBQWdDLFFBQWhDLENBQVY7QUFDQSxpQkFBTyxDQUFDLEdBQUQsRUFBTSxLQUFOLENBQVA7QUFDRjtBQUNFLGlCQUFPLENBQUMsRUFBRCxFQUFLLElBQUwsQ0FBUDtBQU5KO0FBUUQ7O0FBRUQ7Ozs7eUJBQ00sRSxFQUFhO0FBQUEsd0NBQU4sSUFBTTtBQUFOLFlBQU07QUFBQTs7QUFDakIsVUFBSSxRQUFTLEVBQVQsU0FBZ0IsSUFBaEIsQ0FBSjtBQUNBLFVBQUksU0FBUyxFQUFFLE1BQU8sVUFBVSxJQUFWLElBQWtCLENBQWxCLEdBQXNCLENBQS9CLEVBQW1DLFVBQW5DLEVBQWI7QUFDQSxVQUFJLE9BQU8sRUFBRSxPQUFPLENBQUUsS0FBSyxPQUFQLENBQVQsRUFBWDtBQUNBLGFBQU8sS0FBSyxPQUFMLENBQWEsU0FBYixDQUF1QixNQUF2QixFQUErQixJQUEvQixFQUFxQyxLQUFyQyxDQUFQO0FBQ0Q7Ozs2QkFFUyxNLEVBQVE7QUFBQSxnREFDSSxPQUFPLElBRFg7O0FBQUEsVUFDWCxFQURXOztBQUFBLFVBQ0osSUFESTs7QUFFaEIsVUFBSSxFQUFFLFFBQUYsQ0FBVyxLQUFLLGFBQWhCLEVBQStCLEVBQS9CLENBQUosRUFBd0M7QUFBQTs7QUFBQSw4QkFDbkIsS0FBSyxjQUFMLENBQW9CLEVBQXBCLEVBQXdCLElBQXhCLENBRG1COztBQUFBOztBQUFBLFlBQ2pDLEdBRGlDO0FBQUEsWUFDNUIsS0FENEI7O0FBRXRDLGdKQUFrQixHQUFsQiwwQ0FBMEIsS0FBMUI7QUFDRCxPQUhELE1BR087QUFBQTs7QUFDTCxnSkFBa0IsRUFBbEIsMENBQXlCLElBQXpCO0FBQ0Q7QUFDRjs7O2tDQUVjLE0sRUFBUSxJLEVBQU07QUFDM0IsVUFBSSxlQUFlLEVBQUUsT0FBRixDQUFVLEtBQUssS0FBZixFQUFzQixLQUFLLE9BQTNCLEtBQXVDLENBQTFEO0FBQ0EsVUFBSSxZQUFZLEVBQUUsT0FBRixDQUFVLEtBQUssS0FBZixFQUFzQixPQUFPLElBQTdCLEtBQXNDLENBQXREO0FBQ0EsVUFBSSxnQkFBZ0IsU0FBcEIsRUFBK0I7QUFDN0IsYUFBSyxRQUFMLENBQWMsTUFBZDtBQUNEO0FBQ0Y7O0FBRUQ7Ozs7b0NBQ2lCO0FBQ2YsVUFBSSxnQkFBZ0IsS0FBSyxhQUFMLENBQW1CLElBQW5CLENBQXdCLElBQXhCLENBQXBCO0FBQ0EsVUFBSSxVQUFVLEtBQUssT0FBbkI7QUFDQSxVQUFJLE9BQU8sS0FBSyxPQUFMLENBQWEsU0FBeEI7QUFDQSxjQUFRLFNBQVIsR0FBb0IsWUFBbUI7QUFBQSwyQ0FBTixJQUFNO0FBQU4sY0FBTTtBQUFBOztBQUNyQyx1Q0FBaUIsSUFBakI7QUFDQSxhQUFLLEtBQUwsQ0FBVyxPQUFYLEVBQW9CLElBQXBCO0FBQ0QsT0FIRDtBQUlEOzs7RUF0RThCLFk7O0FBMEVqQyxPQUFPLE9BQVAsR0FBaUIsa0JBQWpCIiwiZmlsZSI6IlNvY2tldElPQ2x1c3RlckJ1cy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBQcm9taXNlID0gcmVxdWlyZSgnYmx1ZWJpcmQnKVxuY29uc3QgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpXG5jb25zdCBoYXNCaW5hcnkgPSByZXF1aXJlKCdoYXMtYmluYXJ5JylcbmNvbnN0IHsgRXZlbnRFbWl0dGVyIH0gPSByZXF1aXJlKCdldmVudHMnKVxuXG5jbGFzcyBTb2NrZXRJT0NsdXN0ZXJCdXMgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuXG4gIGNvbnN0cnVjdG9yIChzZXJ2ZXIsIGFkYXB0ZXIpIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5zZXJ2ZXIgPSBzZXJ2ZXJcbiAgICB0aGlzLmFkYXB0ZXIgPSBhZGFwdGVyXG4gICAgdGhpcy5jaGFubmVsID0gJ2NsdXN0ZXI6YnVzJ1xuICAgIHRoaXMuaW50ZW5hbEV2ZW50cyA9IFsgJ3Jvb21MZWF2ZVNvY2tldCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAnc29ja2V0Um9vbUxlZnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rpc2Nvbm5lY3RVc2VyU29ja2V0cycgXVxuICAgIHRoaXMudHlwZXMgPSBbIDIsIDUgXVxuICAgIHRoaXMuaW5qZWN0QnVzSG9vaygpXG4gIH1cblxuICBsaXN0ZW4gKCkge1xuICAgIHJldHVybiBQcm9taXNlLmZyb21DYWxsYmFjayhjYiA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5hZGFwdGVyLmFkZCh0aGlzLnNlcnZlci5pbnN0YW5jZVVJRCwgdGhpcy5jaGFubmVsLCBjYilcbiAgICB9KVxuICB9XG5cbiAgbWFrZVNvY2tldFJvb21MZWZ0TmFtZSAoaWQsIHJvb21OYW1lKSB7XG4gICAgcmV0dXJuIGBzb2NrZXRSb29tTGVmdDoke2lkfToke3Jvb21OYW1lfWBcbiAgfVxuXG4gIG1lcmdlRXZlbnROYW1lIChldiwgYXJncykge1xuICAgIHN3aXRjaCAoZXYpIHtcbiAgICAgIGNhc2UgJ3NvY2tldFJvb21MZWZ0JzpcbiAgICAgICAgbGV0IFtpZCwgcm9vbU5hbWUsIC4uLm5hcmdzXSA9IGFyZ3NcbiAgICAgICAgbGV0IG5ldiA9IHRoaXMubWFrZVNvY2tldFJvb21MZWZ0TmFtZShpZCwgcm9vbU5hbWUpXG4gICAgICAgIHJldHVybiBbbmV2LCBuYXJnc11cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBbZXYsIGFyZ3NdXG4gICAgfVxuICB9XG5cbiAgLy8gVE9ETzogVXNlIGFuIEFQSSBmcm9tIHNvY2tldC5pbyBpZih3aGVuKSBpdCB3aWxsIGJlIGF2YWlsYWJsZS5cbiAgZW1pdCAoZXYsIC4uLmFyZ3MpIHtcbiAgICBsZXQgZGF0YSA9IFsgZXYsIC4uLmFyZ3MgXVxuICAgIGxldCBwYWNrZXQgPSB7IHR5cGU6IChoYXNCaW5hcnkoYXJncykgPyA1IDogMiksIGRhdGEgfVxuICAgIGxldCBvcHRzID0geyByb29tczogWyB0aGlzLmNoYW5uZWwgXSB9XG4gICAgcmV0dXJuIHRoaXMuYWRhcHRlci5icm9hZGNhc3QocGFja2V0LCBvcHRzLCBmYWxzZSlcbiAgfVxuXG4gIG9uUGFja2V0IChwYWNrZXQpIHtcbiAgICBsZXQgW2V2LCAuLi5hcmdzXSA9IHBhY2tldC5kYXRhXG4gICAgaWYgKF8uaW5jbHVkZXModGhpcy5pbnRlbmFsRXZlbnRzLCBldikpIHtcbiAgICAgIGxldCBbbmV2LCBuYXJnc10gPSB0aGlzLm1lcmdlRXZlbnROYW1lKGV2LCBhcmdzKVxuICAgICAgcmV0dXJuIHN1cGVyLmVtaXQobmV2LCAuLi5uYXJncylcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHN1cGVyLmVtaXQoZXYsIC4uLmFyZ3MpXG4gICAgfVxuICB9XG5cbiAgYnJvYWRjYXN0SG9vayAocGFja2V0LCBvcHRzKSB7XG4gICAgbGV0IGlzQnVzQ2Fobm5lbCA9IF8uaW5kZXhPZihvcHRzLnJvb21zLCB0aGlzLmNoYW5uZWwpID49IDBcbiAgICBsZXQgaXNCdXNUeXBlID0gXy5pbmRleE9mKHRoaXMudHlwZXMsIHBhY2tldC50eXBlKSA+PSAwXG4gICAgaWYgKGlzQnVzQ2Fobm5lbCAmJiBpc0J1c1R5cGUpIHtcbiAgICAgIHRoaXMub25QYWNrZXQocGFja2V0KVxuICAgIH1cbiAgfVxuXG4gIC8vIFRPRE86IFVzZSBhbiBBUEkgZnJvbSBzb2NrZXQuaW8gaWYod2hlbikgaXQgd2lsbCBiZSBhdmFpbGFibGUuXG4gIGluamVjdEJ1c0hvb2sgKCkge1xuICAgIGxldCBicm9hZGNhc3RIb29rID0gdGhpcy5icm9hZGNhc3RIb29rLmJpbmQodGhpcylcbiAgICBsZXQgYWRhcHRlciA9IHRoaXMuYWRhcHRlclxuICAgIGxldCBvcmlnID0gdGhpcy5hZGFwdGVyLmJyb2FkY2FzdFxuICAgIGFkYXB0ZXIuYnJvYWRjYXN0ID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgIGJyb2FkY2FzdEhvb2soLi4uYXJncylcbiAgICAgIG9yaWcuYXBwbHkoYWRhcHRlciwgYXJncylcbiAgICB9XG4gIH1cblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNvY2tldElPQ2x1c3RlckJ1c1xuIl19 |
\ | No newline at end of file |