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 | // from socket.io-protocol v4
|
50 |
|
51 | var EVENT = 2;
|
52 | var BINARY_EVENT = 5;
|
53 |
|
54 | // Instances communication via a socket.io-adapter implementation.
|
55 |
|
56 | var SocketIOClusterBus = function (_EventEmitter) {
|
57 | (0, _inherits3.default)(SocketIOClusterBus, _EventEmitter);
|
58 |
|
59 | function SocketIOClusterBus(server, adapter) {
|
60 | (0, _classCallCheck3.default)(this, SocketIOClusterBus);
|
61 |
|
62 | var _this = (0, _possibleConstructorReturn3.default)(this, (0, _getPrototypeOf2.default)(SocketIOClusterBus).call(this));
|
63 |
|
64 | _this.server = server;
|
65 | _this.adapter = adapter;
|
66 | _this.channel = 'cluster:bus';
|
67 | _this.intenalEvents = ['roomLeaveSocket', 'socketRoomLeft', 'disconnectUserSockets'];
|
68 | _this.types = [EVENT, BINARY_EVENT];
|
69 | _this.injectBusHook();
|
70 | return _this;
|
71 | }
|
72 |
|
73 | (0, _createClass3.default)(SocketIOClusterBus, [{
|
74 | key: 'listen',
|
75 | value: function listen() {
|
76 | var _this2 = this;
|
77 |
|
78 | return Promise.fromCallback(function (cb) {
|
79 | return _this2.adapter.add(_this2.server.instanceUID, _this2.channel, cb);
|
80 | });
|
81 | }
|
82 | }, {
|
83 | key: 'makeSocketRoomLeftName',
|
84 | value: function makeSocketRoomLeftName(id, roomName) {
|
85 | return 'socketRoomLeft:' + id + ':' + roomName;
|
86 | }
|
87 | }, {
|
88 | key: 'mergeEventName',
|
89 | value: function mergeEventName(ev, args) {
|
90 | switch (ev) {
|
91 | case 'socketRoomLeft':
|
92 | var _args = (0, _toArray3.default)(args);
|
93 |
|
94 | var id = _args[0];
|
95 | var roomName = _args[1];
|
96 |
|
97 | var nargs = _args.slice(2);
|
98 |
|
99 | var nev = this.makeSocketRoomLeftName(id, roomName);
|
100 | return [nev, nargs];
|
101 | default:
|
102 | return [ev, args];
|
103 | }
|
104 | }
|
105 |
|
106 | // TODO: Use an API from socket.io if(when) it will be available.
|
107 |
|
108 | }, {
|
109 | key: 'emit',
|
110 | value: function emit(ev) {
|
111 | for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
112 | args[_key - 1] = arguments[_key];
|
113 | }
|
114 |
|
115 | var data = [ev].concat(args);
|
116 | var packet = { type: hasBinary(args) ? BINARY_EVENT : EVENT, data: data };
|
117 | var opts = { rooms: [this.channel] };
|
118 | this.adapter.broadcast(packet, opts, false);
|
119 | }
|
120 | }, {
|
121 | key: 'onPacket',
|
122 | value: function onPacket(packet) {
|
123 | var _packet$data = (0, _toArray3.default)(packet.data);
|
124 |
|
125 | var ev = _packet$data[0];
|
126 |
|
127 | var args = _packet$data.slice(1);
|
128 |
|
129 | if (_.includes(this.intenalEvents, ev)) {
|
130 | var _get2;
|
131 |
|
132 | var _mergeEventName = this.mergeEventName(ev, args);
|
133 |
|
134 | var _mergeEventName2 = (0, _slicedToArray3.default)(_mergeEventName, 2);
|
135 |
|
136 | var nev = _mergeEventName2[0];
|
137 | var nargs = _mergeEventName2[1];
|
138 |
|
139 | return (_get2 = (0, _get5.default)((0, _getPrototypeOf2.default)(SocketIOClusterBus.prototype), 'emit', this)).call.apply(_get2, [this, nev].concat((0, _toConsumableArray3.default)(nargs)));
|
140 | } else {
|
141 | var _get3;
|
142 |
|
143 | return (_get3 = (0, _get5.default)((0, _getPrototypeOf2.default)(SocketIOClusterBus.prototype), 'emit', this)).call.apply(_get3, [this, ev].concat((0, _toConsumableArray3.default)(args)));
|
144 | }
|
145 | }
|
146 | }, {
|
147 | key: 'broadcastHook',
|
148 | value: function broadcastHook(packet, opts) {
|
149 | var isBusCahnnel = _.includes(opts.rooms, this.channel);
|
150 | var isBusType = _.includes(this.types, packet.type);
|
151 | if (isBusCahnnel && isBusType) {
|
152 | this.onPacket(packet);
|
153 | }
|
154 | }
|
155 |
|
156 | // TODO: Use an API from socket.io if(when) it will be available.
|
157 |
|
158 | }, {
|
159 | key: 'injectBusHook',
|
160 | value: function injectBusHook() {
|
161 | var broadcastHook = this.broadcastHook.bind(this);
|
162 | var adapter = this.adapter;
|
163 | var orig = this.adapter.broadcast;
|
164 | adapter.broadcast = function () {
|
165 | for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
166 | args[_key2] = arguments[_key2];
|
167 | }
|
168 |
|
169 | broadcastHook.apply(undefined, args);
|
170 | orig.apply(adapter, args);
|
171 | };
|
172 | }
|
173 | }]);
|
174 | return SocketIOClusterBus;
|
175 | }(EventEmitter);
|
176 |
|
177 | module.exports = SocketIOClusterBus;
|
178 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9Tb2NrZXRJT0NsdXN0ZXJCdXMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxJQUFNLFVBQVUsUUFBUSxVQUFSLENBQWhCO0FBQ0EsSUFBTSxJQUFJLFFBQVEsUUFBUixDQUFWO0FBQ0EsSUFBTSxZQUFZLFFBQVEsWUFBUixDQUFsQjs7ZUFDeUIsUUFBUSxRQUFSLEM7O0lBQWpCLFksWUFBQSxZOztBQUVSOztBQUNBLElBQU0sUUFBUSxDQUFkO0FBQ0EsSUFBTSxlQUFlLENBQXJCOztBQUVBOztJQUNNLGtCOzs7QUFFSiw4QkFBYSxNQUFiLEVBQXFCLE9BQXJCLEVBQThCO0FBQUE7O0FBQUE7O0FBRTVCLFVBQUssTUFBTCxHQUFjLE1BQWQ7QUFDQSxVQUFLLE9BQUwsR0FBZSxPQUFmO0FBQ0EsVUFBSyxPQUFMLEdBQWUsYUFBZjtBQUNBLFVBQUssYUFBTCxHQUFxQixDQUFFLGlCQUFGLEVBQ0UsZ0JBREYsRUFFRSx1QkFGRixDQUFyQjtBQUdBLFVBQUssS0FBTCxHQUFhLENBQUUsS0FBRixFQUFTLFlBQVQsQ0FBYjtBQUNBLFVBQUssYUFBTDtBQVQ0QjtBQVU3Qjs7Ozs2QkFFUztBQUFBOztBQUNSLGFBQU8sUUFBUSxZQUFSLENBQXFCLGNBQU07QUFDaEMsZUFBTyxPQUFLLE9BQUwsQ0FBYSxHQUFiLENBQWlCLE9BQUssTUFBTCxDQUFZLFdBQTdCLEVBQTBDLE9BQUssT0FBL0MsRUFBd0QsRUFBeEQsQ0FBUDtBQUNELE9BRk0sQ0FBUDtBQUdEOzs7MkNBRXVCLEUsRUFBSSxRLEVBQVU7QUFDcEMsaUNBQXlCLEVBQXpCLFNBQStCLFFBQS9CO0FBQ0Q7OzttQ0FFZSxFLEVBQUksSSxFQUFNO0FBQ3hCLGNBQVEsRUFBUjtBQUNFLGFBQUssZ0JBQUw7QUFBQSw2Q0FDaUMsSUFEakM7O0FBQUEsY0FDTyxFQURQO0FBQUEsY0FDVyxRQURYOztBQUFBLGNBQ3dCLEtBRHhCOztBQUVFLGNBQUksTUFBTSxLQUFLLHNCQUFMLENBQTRCLEVBQTVCLEVBQWdDLFFBQWhDLENBQVY7QUFDQSxpQkFBTyxDQUFDLEdBQUQsRUFBTSxLQUFOLENBQVA7QUFDRjtBQUNFLGlCQUFPLENBQUMsRUFBRCxFQUFLLElBQUwsQ0FBUDtBQU5KO0FBUUQ7O0FBRUQ7Ozs7eUJBQ00sRSxFQUFhO0FBQUEsd0NBQU4sSUFBTTtBQUFOLFlBQU07QUFBQTs7QUFDakIsVUFBSSxRQUFTLEVBQVQsU0FBZ0IsSUFBaEIsQ0FBSjtBQUNBLFVBQUksU0FBUyxFQUFFLE1BQU8sVUFBVSxJQUFWLElBQWtCLFlBQWxCLEdBQWlDLEtBQTFDLEVBQWtELFVBQWxELEVBQWI7QUFDQSxVQUFJLE9BQU8sRUFBRSxPQUFPLENBQUUsS0FBSyxPQUFQLENBQVQsRUFBWDtBQUNBLFdBQUssT0FBTCxDQUFhLFNBQWIsQ0FBdUIsTUFBdkIsRUFBK0IsSUFBL0IsRUFBcUMsS0FBckM7QUFDRDs7OzZCQUVTLE0sRUFBUTtBQUFBLGdEQUNJLE9BQU8sSUFEWDs7QUFBQSxVQUNYLEVBRFc7O0FBQUEsVUFDSixJQURJOztBQUVoQixVQUFJLEVBQUUsUUFBRixDQUFXLEtBQUssYUFBaEIsRUFBK0IsRUFBL0IsQ0FBSixFQUF3QztBQUFBOztBQUFBLDhCQUNuQixLQUFLLGNBQUwsQ0FBb0IsRUFBcEIsRUFBd0IsSUFBeEIsQ0FEbUI7O0FBQUE7O0FBQUEsWUFDakMsR0FEaUM7QUFBQSxZQUM1QixLQUQ0Qjs7QUFFdEMsZ0pBQWtCLEdBQWxCLDBDQUEwQixLQUExQjtBQUNELE9BSEQsTUFHTztBQUFBOztBQUNMLGdKQUFrQixFQUFsQiwwQ0FBeUIsSUFBekI7QUFDRDtBQUNGOzs7a0NBRWMsTSxFQUFRLEksRUFBTTtBQUMzQixVQUFJLGVBQWUsRUFBRSxRQUFGLENBQVcsS0FBSyxLQUFoQixFQUF1QixLQUFLLE9BQTVCLENBQW5CO0FBQ0EsVUFBSSxZQUFZLEVBQUUsUUFBRixDQUFXLEtBQUssS0FBaEIsRUFBdUIsT0FBTyxJQUE5QixDQUFoQjtBQUNBLFVBQUksZ0JBQWdCLFNBQXBCLEVBQStCO0FBQzdCLGFBQUssUUFBTCxDQUFjLE1BQWQ7QUFDRDtBQUNGOztBQUVEOzs7O29DQUNpQjtBQUNmLFVBQUksZ0JBQWdCLEtBQUssYUFBTCxDQUFtQixJQUFuQixDQUF3QixJQUF4QixDQUFwQjtBQUNBLFVBQUksVUFBVSxLQUFLLE9BQW5CO0FBQ0EsVUFBSSxPQUFPLEtBQUssT0FBTCxDQUFhLFNBQXhCO0FBQ0EsY0FBUSxTQUFSLEdBQW9CLFlBQW1CO0FBQUEsMkNBQU4sSUFBTTtBQUFOLGNBQU07QUFBQTs7QUFDckMsdUNBQWlCLElBQWpCO0FBQ0EsYUFBSyxLQUFMLENBQVcsT0FBWCxFQUFvQixJQUFwQjtBQUNELE9BSEQ7QUFJRDs7O0VBdEU4QixZOztBQTBFakMsT0FBTyxPQUFQLEdBQWlCLGtCQUFqQiIsImZpbGUiOiJTb2NrZXRJT0NsdXN0ZXJCdXMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxuY29uc3QgUHJvbWlzZSA9IHJlcXVpcmUoJ2JsdWViaXJkJylcbmNvbnN0IF8gPSByZXF1aXJlKCdsb2Rhc2gnKVxuY29uc3QgaGFzQmluYXJ5ID0gcmVxdWlyZSgnaGFzLWJpbmFyeScpXG5jb25zdCB7IEV2ZW50RW1pdHRlciB9ID0gcmVxdWlyZSgnZXZlbnRzJylcblxuLy8gZnJvbSBzb2NrZXQuaW8tcHJvdG9jb2wgdjRcbmNvbnN0IEVWRU5UID0gMlxuY29uc3QgQklOQVJZX0VWRU5UID0gNVxuXG4vLyBJbnN0YW5jZXMgY29tbXVuaWNhdGlvbiB2aWEgYSBzb2NrZXQuaW8tYWRhcHRlciBpbXBsZW1lbnRhdGlvbi5cbmNsYXNzIFNvY2tldElPQ2x1c3RlckJ1cyBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG5cbiAgY29uc3RydWN0b3IgKHNlcnZlciwgYWRhcHRlcikge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLnNlcnZlciA9IHNlcnZlclxuICAgIHRoaXMuYWRhcHRlciA9IGFkYXB0ZXJcbiAgICB0aGlzLmNoYW5uZWwgPSAnY2x1c3RlcjpidXMnXG4gICAgdGhpcy5pbnRlbmFsRXZlbnRzID0gWyAncm9vbUxlYXZlU29ja2V0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICdzb2NrZXRSb29tTGVmdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAnZGlzY29ubmVjdFVzZXJTb2NrZXRzJyBdXG4gICAgdGhpcy50eXBlcyA9IFsgRVZFTlQsIEJJTkFSWV9FVkVOVCBdXG4gICAgdGhpcy5pbmplY3RCdXNIb29rKClcbiAgfVxuXG4gIGxpc3RlbiAoKSB7XG4gICAgcmV0dXJuIFByb21pc2UuZnJvbUNhbGxiYWNrKGNiID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmFkYXB0ZXIuYWRkKHRoaXMuc2VydmVyLmluc3RhbmNlVUlELCB0aGlzLmNoYW5uZWwsIGNiKVxuICAgIH0pXG4gIH1cblxuICBtYWtlU29ja2V0Um9vbUxlZnROYW1lIChpZCwgcm9vbU5hbWUpIHtcbiAgICByZXR1cm4gYHNvY2tldFJvb21MZWZ0OiR7aWR9OiR7cm9vbU5hbWV9YFxuICB9XG5cbiAgbWVyZ2VFdmVudE5hbWUgKGV2LCBhcmdzKSB7XG4gICAgc3dpdGNoIChldikge1xuICAgICAgY2FzZSAnc29ja2V0Um9vbUxlZnQnOlxuICAgICAgICBsZXQgW2lkLCByb29tTmFtZSwgLi4ubmFyZ3NdID0gYXJnc1xuICAgICAgICBsZXQgbmV2ID0gdGhpcy5tYWtlU29ja2V0Um9vbUxlZnROYW1lKGlkLCByb29tTmFtZSlcbiAgICAgICAgcmV0dXJuIFtuZXYsIG5hcmdzXVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFtldiwgYXJnc11cbiAgICB9XG4gIH1cblxuICAvLyBUT0RPOiBVc2UgYW4gQVBJIGZyb20gc29ja2V0LmlvIGlmKHdoZW4pIGl0IHdpbGwgYmUgYXZhaWxhYmxlLlxuICBlbWl0IChldiwgLi4uYXJncykge1xuICAgIGxldCBkYXRhID0gWyBldiwgLi4uYXJncyBdXG4gICAgbGV0IHBhY2tldCA9IHsgdHlwZTogKGhhc0JpbmFyeShhcmdzKSA/IEJJTkFSWV9FVkVOVCA6IEVWRU5UKSwgZGF0YSB9XG4gICAgbGV0IG9wdHMgPSB7IHJvb21zOiBbIHRoaXMuY2hhbm5lbCBdIH1cbiAgICB0aGlzLmFkYXB0ZXIuYnJvYWRjYXN0KHBhY2tldCwgb3B0cywgZmFsc2UpXG4gIH1cblxuICBvblBhY2tldCAocGFja2V0KSB7XG4gICAgbGV0IFtldiwgLi4uYXJnc10gPSBwYWNrZXQuZGF0YVxuICAgIGlmIChfLmluY2x1ZGVzKHRoaXMuaW50ZW5hbEV2ZW50cywgZXYpKSB7XG4gICAgICBsZXQgW25ldiwgbmFyZ3NdID0gdGhpcy5tZXJnZUV2ZW50TmFtZShldiwgYXJncylcbiAgICAgIHJldHVybiBzdXBlci5lbWl0KG5ldiwgLi4ubmFyZ3MpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBzdXBlci5lbWl0KGV2LCAuLi5hcmdzKVxuICAgIH1cbiAgfVxuXG4gIGJyb2FkY2FzdEhvb2sgKHBhY2tldCwgb3B0cykge1xuICAgIGxldCBpc0J1c0NhaG5uZWwgPSBfLmluY2x1ZGVzKG9wdHMucm9vbXMsIHRoaXMuY2hhbm5lbClcbiAgICBsZXQgaXNCdXNUeXBlID0gXy5pbmNsdWRlcyh0aGlzLnR5cGVzLCBwYWNrZXQudHlwZSlcbiAgICBpZiAoaXNCdXNDYWhubmVsICYmIGlzQnVzVHlwZSkge1xuICAgICAgdGhpcy5vblBhY2tldChwYWNrZXQpXG4gICAgfVxuICB9XG5cbiAgLy8gVE9ETzogVXNlIGFuIEFQSSBmcm9tIHNvY2tldC5pbyBpZih3aGVuKSBpdCB3aWxsIGJlIGF2YWlsYWJsZS5cbiAgaW5qZWN0QnVzSG9vayAoKSB7XG4gICAgbGV0IGJyb2FkY2FzdEhvb2sgPSB0aGlzLmJyb2FkY2FzdEhvb2suYmluZCh0aGlzKVxuICAgIGxldCBhZGFwdGVyID0gdGhpcy5hZGFwdGVyXG4gICAgbGV0IG9yaWcgPSB0aGlzLmFkYXB0ZXIuYnJvYWRjYXN0XG4gICAgYWRhcHRlci5icm9hZGNhc3QgPSBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgYnJvYWRjYXN0SG9vayguLi5hcmdzKVxuICAgICAgb3JpZy5hcHBseShhZGFwdGVyLCBhcmdzKVxuICAgIH1cbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gU29ja2V0SU9DbHVzdGVyQnVzXG4iXX0= |
\ | No newline at end of file |