@netless/forge-rtm 0.1.11 → 0.1.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/RTM_2_1.d.ts CHANGED
@@ -23,6 +23,7 @@ export declare class RTMProvider_2_1 extends EventEmitter<SocketProviderEvent> i
23
23
  resubscribe(): Promise<void>;
24
24
  initialize(roomId: string, userId: string): Promise<void>;
25
25
  dispose(): Promise<void>;
26
+ private isForgeRoomChannel;
26
27
  private handleRtmMessage;
27
28
  private calibrateAnimate;
28
29
  private handleStatus;
@@ -1 +1 @@
1
- {"version":3,"file":"RTM_2_1.d.ts","sourceRoot":"","sources":["../src/RTM_2_1.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAO,MAAM,qBAAqB,CAAC;AAC/E,OAAO,YAAY,MAAM,eAAe,CAAC;AAIzC,OAAO,KAAK,EAAE,SAAS,EAAa,MAAM,WAAW,CAAC;AAItD,qBAAa,eAAgB,SAAQ,YAAY,CAAC,mBAAmB,CAAE,YAAW,cAAc;IAE9F,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,MAAM,CAAU;IAExB,OAAO,CAAC,gBAAgB,CAAa;IACrC,OAAO,CAAC,eAAe,CAAkD;IACzE,OAAO,CAAC,cAAc,CAA8B;IAEpD,OAAO,CAAC,UAAU,CAAa;IAE/B,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,uBAAuB,CAAC,CAAS;IACzC,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,IAAW,oBAAoB,IAAI,MAAM,CAExC;gBAEkB,SAAS,EAAE,SAAS;IAKvC,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,WAAW;IAOnB;;SAEK;IACQ,WAAW;IAYX,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgCzD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAUrC,OAAO,CAAC,gBAAgB,CAoBtB;IAEF,OAAO,CAAC,gBAAgB,CAQtB;IAEF,OAAO,CAAC,YAAY,CAqBlB;IAEF,OAAO,CAAC,cAAc,CAYpB;IAEF,OAAO,CAAC,mBAAmB;IAuBpB,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAE,MAAW;IA2B1D,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;CAuB9C"}
1
+ {"version":3,"file":"RTM_2_1.d.ts","sourceRoot":"","sources":["../src/RTM_2_1.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAO,MAAM,qBAAqB,CAAC;AAC/E,OAAO,YAAY,MAAM,eAAe,CAAC;AAIzC,OAAO,KAAK,EAAE,SAAS,EAAa,MAAM,WAAW,CAAC;AAItD,qBAAa,eAAgB,SAAQ,YAAY,CAAC,mBAAmB,CAAE,YAAW,cAAc;IAE9F,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,MAAM,CAAU;IAExB,OAAO,CAAC,gBAAgB,CAAa;IACrC,OAAO,CAAC,eAAe,CAAkD;IACzE,OAAO,CAAC,cAAc,CAA8B;IAEpD,OAAO,CAAC,UAAU,CAAa;IAE/B,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,uBAAuB,CAAC,CAAS;IACzC,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,IAAW,oBAAoB,IAAI,MAAM,CAExC;gBAEkB,SAAS,EAAE,SAAS;IAKvC,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,WAAW;IAOnB;;SAEK;IACQ,WAAW;IAYX,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgCzD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAUrC,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,gBAAgB,CAyBtB;IAEF,OAAO,CAAC,gBAAgB,CAQtB;IAEF,OAAO,CAAC,YAAY,CAqBlB;IAEF,OAAO,CAAC,cAAc,CAYpB;IAEF,OAAO,CAAC,mBAAmB;IAuBpB,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAE,MAAW;IA2B1D,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;CAuB9C"}
package/dist/RTM_2_2.d.ts CHANGED
@@ -23,6 +23,7 @@ export declare class RTMProvider_2_2 extends EventEmitter<SocketProviderEvent> i
23
23
  */
24
24
  resubscribe(): Promise<void>;
25
25
  dispose(): Promise<void>;
26
+ private isForgeRoomChannel;
26
27
  private handleRtmMessage;
27
28
  private calibrateAnimate;
28
29
  private handleStatus;
@@ -1 +1 @@
1
- {"version":3,"file":"RTM_2_2.d.ts","sourceRoot":"","sources":["../src/RTM_2_2.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAO,MAAM,qBAAqB,CAAC;AAC/E,OAAO,YAAY,MAAM,eAAe,CAAC;AAIzC,OAAO,KAAK,EAAE,SAAS,EAAa,MAAM,WAAW,CAAC;AAGtD,qBAAa,eAAgB,SAAQ,YAAY,CAAC,mBAAmB,CAAE,YAAW,cAAc;IAE9F,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,MAAM,CAAU;IAExB,OAAO,CAAC,gBAAgB,CAAa;IACrC,OAAO,CAAC,eAAe,CAAkD;IACzE,OAAO,CAAC,cAAc,CAA8B;IAEpD,OAAO,CAAC,UAAU,CAAa;IAE/B,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,uBAAuB,CAAC,CAAS;IACzC,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,IAAW,oBAAoB,IAAI,MAAM,CAExC;gBACkB,SAAS,EAAE,SAAS;IAKvC,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,WAAW;IAON,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkCtE;;SAEK;IACQ,WAAW;IAYX,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAUrC,OAAO,CAAC,gBAAgB,CAmBtB;IAEF,OAAO,CAAC,gBAAgB,CAQtB;IAEF,OAAO,CAAC,YAAY,CAsBlB;IAEF,OAAO,CAAC,cAAc,CAYpB;IAEF,OAAO,CAAC,mBAAmB;IAuBpB,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAE,MAAW;IA2B1D,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;CAuB9C"}
1
+ {"version":3,"file":"RTM_2_2.d.ts","sourceRoot":"","sources":["../src/RTM_2_2.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAO,MAAM,qBAAqB,CAAC;AAC/E,OAAO,YAAY,MAAM,eAAe,CAAC;AAIzC,OAAO,KAAK,EAAE,SAAS,EAAa,MAAM,WAAW,CAAC;AAGtD,qBAAa,eAAgB,SAAQ,YAAY,CAAC,mBAAmB,CAAE,YAAW,cAAc;IAE9F,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,MAAM,CAAU;IAExB,OAAO,CAAC,gBAAgB,CAAa;IACrC,OAAO,CAAC,eAAe,CAAkD;IACzE,OAAO,CAAC,cAAc,CAA8B;IAEpD,OAAO,CAAC,UAAU,CAAa;IAE/B,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,uBAAuB,CAAC,CAAS;IACzC,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,IAAW,oBAAoB,IAAI,MAAM,CAExC;gBACkB,SAAS,EAAE,SAAS;IAKvC,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,WAAW;IAON,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkCtE;;SAEK;IACQ,WAAW;IAYX,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAUrC,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,gBAAgB,CAwBtB;IAEF,OAAO,CAAC,gBAAgB,CAQtB;IAEF,OAAO,CAAC,YAAY,CAsBlB;IAEF,OAAO,CAAC,cAAc,CAYpB;IAEF,OAAO,CAAC,mBAAmB;IAuBpB,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAE,MAAW;IA2B1D,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;CAuB9C"}
@@ -126,24 +126,29 @@ var RTMProvider_2_1 = class extends EventEmitter {
126
126
  _defineProperty2(this, "animationStartTimestamp", void 0);
127
127
  _defineProperty2(this, "animationId", void 0);
128
128
  _defineProperty2(this, "handleRtmMessage", (evt) => {
129
- const isRoomChannel = evt.channelName.indexOf("_u_") < 0;
130
- if (!(evt.message instanceof Uint8Array)) {
131
- log("rtm message not Uint8Array", {
132
- channel: evt.channelName,
133
- publisher: evt.publisher,
134
- message: evt.message
135
- });
136
- return;
137
- }
138
- if (this.animationId) {
139
- cancelAnimationFrame(this.animationId);
140
- this.animationStartTimestamp = void 0;
141
- this.animationId = void 0;
142
- this.deviation = 0;
129
+ try {
130
+ const isRoomChannel = evt.channelName.indexOf("_u_") < 0;
131
+ if (!(evt.message instanceof Uint8Array) || !this.isForgeRoomChannel(evt.channelName)) {
132
+ log("rtm message not Uint8Array", {
133
+ channel: evt.channelName,
134
+ publisher: evt.publisher
135
+ });
136
+ return;
137
+ }
138
+ if (this.animationId) {
139
+ cancelAnimationFrame(this.animationId);
140
+ this.animationStartTimestamp = void 0;
141
+ this.animationId = void 0;
142
+ this.deviation = 0;
143
+ }
144
+ this.rtmTimestamp = evt.timestamp;
145
+ this.animationId = requestAnimationFrame(this.calibrateAnimate);
146
+ this.receiveChunkMessage(ChunkedUpdateMessage.fromBuffer(evt.message, "", evt.customType), evt.publisher, isRoomChannel);
147
+ } catch (error) {
148
+ log("rtm handle message error", {
149
+ error: error.toString()
150
+ }, "error");
143
151
  }
144
- this.rtmTimestamp = evt.timestamp;
145
- this.animationId = requestAnimationFrame(this.calibrateAnimate);
146
- this.receiveChunkMessage(ChunkedUpdateMessage.fromBuffer(evt.message, "", evt.customType), evt.publisher, isRoomChannel);
147
152
  });
148
153
  _defineProperty2(this, "calibrateAnimate", (timestamp) => {
149
154
  if (this.animationStartTimestamp === void 0) {
@@ -253,6 +258,9 @@ var RTMProvider_2_1 = class extends EventEmitter {
253
258
  await this.rtmClient.unsubscribe(this.userChannel(this.userId));
254
259
  window.clearInterval(this.intervalId);
255
260
  }
261
+ isForgeRoomChannel(channel) {
262
+ return channel === this.roomChannel() || channel === this.userChannel(this.userId);
263
+ }
256
264
  receiveChunkMessage(msg, publisher, isRoomChannel) {
257
265
  if (msg.length === 1) {
258
266
  this.emit("message", msg.buf, publisher, msg.customType, isRoomChannel);
@@ -368,24 +376,29 @@ var RTMProvider_2_2 = class extends EventEmitter2 {
368
376
  _defineProperty3(this, "animationStartTimestamp", void 0);
369
377
  _defineProperty3(this, "animationId", void 0);
370
378
  _defineProperty3(this, "handleRtmMessage", (evt) => {
371
- const isRoomChannel = evt.channelName.indexOf("_u_") >= 0;
372
- if (!(evt.message instanceof Uint8Array)) {
373
- log2("rtm message not Uint8Array", {
374
- channel: evt.channelName,
375
- publisher: evt.publisher,
376
- message: evt.message
377
- });
378
- return;
379
- }
380
- if (this.animationId) {
381
- cancelAnimationFrame(this.animationId);
382
- this.animationStartTimestamp = void 0;
383
- this.animationId = void 0;
384
- this.deviation = 0;
379
+ try {
380
+ const isRoomChannel = evt.channelName.indexOf("_u_") >= 0;
381
+ if (!(evt.message instanceof Uint8Array) || !this.isForgeRoomChannel(evt.channelName)) {
382
+ log2("rtm message not Uint8Array", {
383
+ channel: evt.channelName,
384
+ publisher: evt.publisher
385
+ });
386
+ return;
387
+ }
388
+ if (this.animationId) {
389
+ cancelAnimationFrame(this.animationId);
390
+ this.animationStartTimestamp = void 0;
391
+ this.animationId = void 0;
392
+ this.deviation = 0;
393
+ }
394
+ this.rtmTimestamp = evt.timestamp;
395
+ this.animationId = requestAnimationFrame(this.calibrateAnimate);
396
+ this.receiveChunkMessage(ChunkedUpdateMessage.fromBuffer(evt.message, "", evt.customType), evt.publisher, isRoomChannel);
397
+ } catch (e) {
398
+ log2("rtm handle message error", {
399
+ error: e.toString()
400
+ }, "error");
385
401
  }
386
- this.rtmTimestamp = evt.timestamp;
387
- this.animationId = requestAnimationFrame(this.calibrateAnimate);
388
- this.receiveChunkMessage(ChunkedUpdateMessage.fromBuffer(evt.message, "", evt.customType), evt.publisher, isRoomChannel);
389
402
  });
390
403
  _defineProperty3(this, "calibrateAnimate", (timestamp) => {
391
404
  if (this.animationStartTimestamp === void 0) {
@@ -498,6 +511,9 @@ var RTMProvider_2_2 = class extends EventEmitter2 {
498
511
  await this.rtmClient.unsubscribe(this.userChannel(this.userId));
499
512
  window.clearInterval(this.intervalId);
500
513
  }
514
+ isForgeRoomChannel(channel) {
515
+ return channel === this.roomChannel() || channel === this.userChannel(this.userId);
516
+ }
501
517
  receiveChunkMessage(msg, publisher, isRoomChannel) {
502
518
  if (msg.length === 1) {
503
519
  this.emit("message", msg.buf, publisher, msg.customType, isRoomChannel);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/RTM_2_1.ts", "../src/utils.ts", "../src/ChunkedUpdateMessage.ts", "../src/RTM_2_2.ts"],
4
- "sourcesContent": ["function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { log } from '@netless/forge-room';\nimport EventEmitter from 'eventemitter3';\nimport { v4 as uuidv4 } from 'uuid';\nimport { cyrb53 } from './utils';\nimport { ChunkedUpdateMessage } from './ChunkedUpdateMessage';\nexport class RTMProvider_2_1 extends EventEmitter {\n get calibrationTimestamp() {\n return this.rtmTimestamp + this.deviation;\n }\n constructor(rtmClient) {\n super();\n _defineProperty(this, \"rtmClient\", void 0);\n _defineProperty(this, \"roomId\", void 0);\n _defineProperty(this, \"userId\", void 0);\n _defineProperty(this, \"reconnectTimeout\", null);\n _defineProperty(this, \"chunkedMessages\", new Map());\n _defineProperty(this, \"cachedMessages\", []);\n _defineProperty(this, \"intervalId\", null);\n _defineProperty(this, \"deviation\", 0);\n _defineProperty(this, \"rtmTimestamp\", 0);\n _defineProperty(this, \"animationStartTimestamp\", void 0);\n _defineProperty(this, \"animationId\", void 0);\n _defineProperty(this, \"handleRtmMessage\", evt => {\n const isRoomChannel = evt.channelName.indexOf('_u_') < 0;\n if (!(evt.message instanceof Uint8Array)) {\n log('rtm message not Uint8Array', {\n channel: evt.channelName,\n publisher: evt.publisher,\n message: evt.message\n });\n return;\n }\n if (this.animationId) {\n cancelAnimationFrame(this.animationId);\n this.animationStartTimestamp = undefined;\n this.animationId = undefined;\n this.deviation = 0;\n }\n this.rtmTimestamp = evt.timestamp;\n this.animationId = requestAnimationFrame(this.calibrateAnimate);\n // console.log(\"rtm timestamp\", evt.timestamp, \"calibrationTimestamp\", this.calibrationTimestamp);\n this.receiveChunkMessage(ChunkedUpdateMessage.fromBuffer(evt.message, '', evt.customType), evt.publisher, isRoomChannel);\n });\n _defineProperty(this, \"calibrateAnimate\", timestamp => {\n if (this.animationStartTimestamp === undefined) {\n this.animationStartTimestamp = timestamp;\n }\n this.deviation = timestamp - this.animationStartTimestamp;\n if (this.animationId) {\n this.animationId = requestAnimationFrame(this.calibrateAnimate);\n }\n });\n _defineProperty(this, \"handleStatus\", connectionStatus => {\n log('rtm status update', {\n state: connectionStatus.state,\n reason: connectionStatus.reason\n });\n if (connectionStatus.state === 'RECONNECTING' && this.reconnectTimeout === null) {\n this.emit('connectionStatusChange', 'RECONNECTING');\n this.reconnectTimeout = window.setTimeout(() => {\n this.emit('error', 'reconnecting timeout');\n this.emit('connectionStatusChange', 'DISCONNECTED');\n }, 30 * 1000);\n } else if (connectionStatus.state === 'CONNECTED') {\n window.clearTimeout(this.reconnectTimeout);\n this.emit('connectionStatusChange', 'CONNECTED');\n } else if (connectionStatus.state === 'FAILED') {\n window.clearTimeout(this.reconnectTimeout);\n this.emit('error', `rtm connection failed, ${connectionStatus.reason}`);\n this.emit('connectionStatusChange', 'DISCONNECTED');\n } else if (connectionStatus.state === 'CONNECTING') {\n this.emit('connectionStatusChange', 'CONNECTING');\n }\n });\n _defineProperty(this, \"handlePresence\", evt => {\n if (evt.channelName === this.roomChannel()) {\n if (evt.eventType === 'REMOTE_JOIN') {\n this.emit('userJoin', evt.publisher);\n } else if (evt.eventType === 'REMOTE_LEAVE') {\n this.emit('userLeave', evt.publisher);\n } else if (evt.eventType === 'REMOTE_TIMEOUT') {\n this.emit('userLeave', evt.publisher);\n } else if (evt.eventType === 'INTERVAL') {\n // evt.interval.join.users\n }\n }\n });\n this.rtmClient = rtmClient;\n }\n roomChannel() {\n return `r_${this.roomId}`;\n }\n userChannel(userId) {\n if (userId.length > 16) {\n userId = `${cyrb53(userId)}`;\n }\n return `${this.roomChannel()}_u_${userId}`;\n }\n\n /**\n * \u91CD\u65B0\u8BA2\u9605\u9891\u9053\n */\n async resubscribe() {\n try {\n await this.rtmClient.subscribe(this.roomChannel());\n await this.rtmClient.subscribe(this.userChannel(this.userId));\n } catch (error) {\n this.emit('error', `rtm subscribe fail, ${error}`);\n log('rtm subscribe fail', {\n error: error.toString()\n }, 'error');\n }\n }\n async initialize(roomId, userId) {\n window.clearInterval(this.intervalId);\n this.roomId = roomId;\n this.userId = userId;\n this.rtmClient.addEventListener('message', this.handleRtmMessage);\n this.rtmClient.addEventListener('presence', this.handlePresence);\n // @ts-ignore\n this.rtmClient.addEventListener('status', this.handleStatus);\n try {\n await this.rtmClient.subscribe(this.roomChannel());\n await this.rtmClient.subscribe(this.userChannel(this.userId));\n } catch (error) {\n this.emit('error', `rtm subscribe fail, ${error}`);\n log('rtm subscribe fail', {\n error: error.toString()\n }, 'error');\n }\n this.intervalId = setInterval(() => {\n const msg = this.cachedMessages.shift();\n if (msg) {\n const channel = msg.target ? this.userChannel(msg.target) : this.roomChannel();\n this.rtmClient.publish(channel, msg.buffer, {\n customType: msg.customType\n }).catch(error => {\n log('rtm publish failed', {\n channel,\n code: error.code\n }, 'warning');\n this.emit('error', `rtm publish fail, ${error}`);\n });\n }\n }, 32);\n }\n async dispose() {\n this.rtmClient.removeEventListener('message', this.handleRtmMessage);\n this.rtmClient.removeEventListener('presence', this.handlePresence);\n // @ts-ignore\n this.rtmClient.removeEventListener('status', this.handleStatus);\n await this.rtmClient.unsubscribe(this.roomChannel());\n await this.rtmClient.unsubscribe(this.userChannel(this.userId));\n window.clearInterval(this.intervalId);\n }\n receiveChunkMessage(msg, publisher, isRoomChannel) {\n if (msg.length === 1) {\n this.emit('message', msg.buf, publisher, msg.customType, isRoomChannel);\n return;\n }\n const chunks = this.chunkedMessages.get(msg.session) || [];\n chunks.push(msg);\n if (chunks.length === msg.length) {\n const buffer = chunks.sort((a, b) => a.index - b.index).reduce((result, next) => {\n const buf = next.buf;\n const output = new Uint8Array(result.length + buf.length);\n output.set(result, 0);\n output.set(buf, result.length);\n return output;\n }, new Uint8Array());\n this.emit('message', buffer, publisher, msg.customType, isRoomChannel);\n this.chunkedMessages.delete(msg.session);\n } else {\n this.chunkedMessages.set(msg.session, chunks);\n }\n }\n publish(buf, customType) {\n let target = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n const session = uuidv4();\n // \u6D88\u606F\u5305\u4F53\u79EF, \u5355\u4F4D kb\n const size = buf.length * Uint8Array.BYTES_PER_ELEMENT / 1024;\n if (size < 16) {\n this.cachedMessages.push(ChunkedUpdateMessage.fromObject({\n buf: buf,\n length: 1,\n index: 0,\n session\n }, target, customType));\n } else {\n const chunkSize = 16 * 1024 / Uint8Array.BYTES_PER_ELEMENT;\n const len = Math.ceil(size / 16);\n let index = 0;\n while (index < len) {\n this.cachedMessages.push(ChunkedUpdateMessage.fromObject({\n buf: buf.slice(index * chunkSize, (index + 1) * chunkSize),\n length: len,\n index: index,\n session\n }, target, customType));\n index += 1;\n }\n }\n }\n async userList() {\n const output = new Set();\n const result = await this.rtmClient.presence.whoNow(this.roomChannel(), 'MESSAGE', {\n includedState: false\n });\n let nextPage = result.nextPage;\n result.occupants.forEach(userInfo => {\n const {\n userId\n } = userInfo;\n output.add(userId);\n });\n while (nextPage) {\n const result = await this.rtmClient.presence.whoNow(this.roomChannel(), 'MESSAGE', {\n includedState: false,\n page: nextPage\n });\n nextPage = result.nextPage;\n result.occupants.forEach(userInfo => {\n const {\n userId\n } = userInfo;\n output.add(userId);\n });\n }\n return output;\n }\n}", "export const cyrb53 = function (str) {\n let seed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n let h1 = 0xdeadbeef ^ seed,\n h2 = 0x41c6ce57 ^ seed;\n for (let i = 0, ch; i < str.length; i++) {\n ch = str.charCodeAt(i);\n h1 = Math.imul(h1 ^ ch, 2654435761);\n h2 = Math.imul(h2 ^ ch, 1597334677);\n }\n h1 = Math.imul(h1 ^ h1 >>> 16, 2246822507);\n h1 ^= Math.imul(h2 ^ h2 >>> 13, 3266489909);\n h2 = Math.imul(h2 ^ h2 >>> 16, 2246822507);\n h2 ^= Math.imul(h1 ^ h1 >>> 13, 3266489909);\n return 4294967296 * (2097151 & h2) + (h1 >>> 0);\n};", "function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nexport class ChunkedUpdateMessage {\n static fromObject(obj, target, customType) {\n const msg = new ChunkedUpdateMessage();\n msg.target = target;\n msg.customType = customType;\n const encoder = new TextEncoder();\n const sessionBuf = encoder.encode(obj.session);\n\n // header \u6309\u987A\u5E8F\u6307\u793A buf, session, target, customType \u90E8\u5206\u7684 uint8 \u957F\u5EA6\n msg.header = new DataView(new Uint8Array(10).buffer);\n msg.header.setUint32(0, obj.buf.length, false);\n msg.header.setUint32(4, sessionBuf.length, false);\n msg.header.setUint8(8, obj.index);\n msg.header.setUint8(9, obj.length);\n msg.buffer = new Uint8Array(obj.buf.length + sessionBuf.length + msg.header.buffer.byteLength);\n let len = 0;\n msg.buffer.set(new Uint8Array(msg.header.buffer), len);\n len += msg.header.buffer.byteLength;\n msg.buffer.set(obj.buf, len);\n len += obj.buf.length;\n msg.buffer.set(sessionBuf, len);\n return msg;\n }\n static fromBuffer(buf, target, customType) {\n const msg = new ChunkedUpdateMessage();\n msg.header = new DataView(buf.slice(0, 10).buffer);\n msg.buffer = buf.slice(10);\n msg.target = target;\n msg.customType = customType;\n return msg;\n }\n get buf() {\n const len = this.header.getInt32(0);\n return this.buffer.slice(0, len);\n }\n get index() {\n return this.header.getUint8(8);\n }\n get length() {\n return this.header.getUint8(9);\n }\n get session() {\n const start = this.header.getInt32(0);\n const sessionBuf = this.buffer.slice(start, start + this.header.getInt32(4));\n const textDecoder = new TextDecoder();\n return textDecoder.decode(sessionBuf);\n }\n constructor() {\n _defineProperty(this, \"target\", void 0);\n _defineProperty(this, \"customType\", void 0);\n _defineProperty(this, \"buffer\", void 0);\n _defineProperty(this, \"header\", void 0);\n }\n}", "function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { log } from '@netless/forge-room';\nimport EventEmitter from 'eventemitter3';\nimport { v4 as uuidv4 } from 'uuid';\nimport { cyrb53 } from './utils';\nimport { ChunkedUpdateMessage } from './ChunkedUpdateMessage';\nexport class RTMProvider_2_2 extends EventEmitter {\n get calibrationTimestamp() {\n return this.rtmTimestamp + this.deviation;\n }\n constructor(rtmClient) {\n super();\n _defineProperty(this, \"rtmClient\", void 0);\n _defineProperty(this, \"roomId\", void 0);\n _defineProperty(this, \"userId\", void 0);\n _defineProperty(this, \"reconnectTimeout\", null);\n _defineProperty(this, \"chunkedMessages\", new Map());\n _defineProperty(this, \"cachedMessages\", []);\n _defineProperty(this, \"intervalId\", null);\n _defineProperty(this, \"deviation\", 0);\n _defineProperty(this, \"rtmTimestamp\", 0);\n _defineProperty(this, \"animationStartTimestamp\", void 0);\n _defineProperty(this, \"animationId\", void 0);\n _defineProperty(this, \"handleRtmMessage\", evt => {\n const isRoomChannel = evt.channelName.indexOf('_u_') >= 0;\n if (!(evt.message instanceof Uint8Array)) {\n log('rtm message not Uint8Array', {\n channel: evt.channelName,\n publisher: evt.publisher,\n message: evt.message\n });\n return;\n }\n if (this.animationId) {\n cancelAnimationFrame(this.animationId);\n this.animationStartTimestamp = undefined;\n this.animationId = undefined;\n this.deviation = 0;\n }\n this.rtmTimestamp = evt.timestamp;\n this.animationId = requestAnimationFrame(this.calibrateAnimate);\n this.receiveChunkMessage(ChunkedUpdateMessage.fromBuffer(evt.message, '', evt.customType), evt.publisher, isRoomChannel);\n });\n _defineProperty(this, \"calibrateAnimate\", timestamp => {\n if (this.animationStartTimestamp === undefined) {\n this.animationStartTimestamp = timestamp;\n }\n this.deviation = timestamp - this.animationStartTimestamp;\n if (this.animationId) {\n this.animationId = requestAnimationFrame(this.calibrateAnimate);\n }\n });\n _defineProperty(this, \"handleStatus\", connectionStatus => {\n log('rtm status update', {\n state: connectionStatus.state,\n reason: connectionStatus.reason,\n rtm: '2.2'\n });\n if (connectionStatus.state === 'RECONNECTING' && this.reconnectTimeout === null) {\n this.emit('connectionStatusChange', 'RECONNECTING');\n this.reconnectTimeout = window.setTimeout(() => {\n this.emit('error', 'reconnecting timeout');\n this.emit('connectionStatusChange', 'DISCONNECTED');\n }, 30 * 1000);\n } else if (connectionStatus.state === 'CONNECTED') {\n window.clearTimeout(this.reconnectTimeout);\n this.emit('connectionStatusChange', 'CONNECTED');\n } else if (connectionStatus.state === 'FAILED') {\n window.clearTimeout(this.reconnectTimeout);\n this.emit('error', `rtm connection failed, ${connectionStatus.reason}`);\n this.emit('connectionStatusChange', 'DISCONNECTED');\n } else if (connectionStatus.state === 'CONNECTING') {\n this.emit('connectionStatusChange', 'CONNECTING');\n }\n });\n _defineProperty(this, \"handlePresence\", evt => {\n if (evt.channelName === this.roomChannel()) {\n if (evt.eventType === 'REMOTE_JOIN') {\n this.emit('userJoin', evt.publisher);\n } else if (evt.eventType === 'REMOTE_LEAVE') {\n this.emit('userLeave', evt.publisher);\n } else if (evt.eventType === 'REMOTE_TIMEOUT') {\n this.emit('userLeave', evt.publisher);\n } else if (evt.eventType === 'INTERVAL') {\n // evt.interval.join.users\n }\n }\n });\n this.rtmClient = rtmClient;\n }\n roomChannel() {\n return `r_${this.roomId}`;\n }\n userChannel(userId) {\n if (userId.length > 16) {\n userId = `${cyrb53(userId)}`;\n }\n return `${this.roomChannel()}_u_${userId}`;\n }\n async initialize(roomId, userId) {\n window.clearInterval(this.intervalId);\n this.roomId = roomId;\n this.userId = userId;\n this.rtmClient.addEventListener('message', this.handleRtmMessage);\n this.rtmClient.addEventListener('presence', this.handlePresence);\n // @ts-ignore\n this.rtmClient.addEventListener('status', this.handleStatus);\n try {\n await this.rtmClient.subscribe(this.roomChannel());\n await this.rtmClient.subscribe(this.userChannel(this.userId));\n } catch (error) {\n this.emit('error', `rtm subscribe fail, ${error}`);\n log('rtm subscribe fail', {\n error: error.toString(),\n rtm: '2.2'\n }, 'error');\n }\n this.intervalId = setInterval(() => {\n const msg = this.cachedMessages.shift();\n if (msg) {\n const channel = msg.target ? this.userChannel(msg.target) : this.roomChannel();\n this.rtmClient.publish(channel, msg.buffer, {\n customType: msg.customType\n }).catch(error => {\n log('rtm publish failed', {\n channel,\n code: error.code,\n rtm: '2.2'\n }, 'warning');\n this.emit('error', `rtm publish fail, ${error}`);\n });\n }\n }, 32);\n }\n\n /**\n * \u91CD\u65B0\u8BA2\u9605\u9891\u9053\n */\n async resubscribe() {\n try {\n await this.rtmClient.subscribe(this.roomChannel());\n await this.rtmClient.subscribe(this.userChannel(this.userId));\n } catch (error) {\n this.emit('error', `rtm subscribe fail, ${error}`);\n log('rtm subscribe fail', {\n error: error.toString()\n }, 'error');\n }\n }\n async dispose() {\n this.rtmClient.removeEventListener('message', this.handleRtmMessage);\n this.rtmClient.removeEventListener('presence', this.handlePresence);\n // @ts-ignore\n this.rtmClient.removeEventListener('status', this.handleStatus);\n await this.rtmClient.unsubscribe(this.roomChannel());\n await this.rtmClient.unsubscribe(this.userChannel(this.userId));\n window.clearInterval(this.intervalId);\n }\n receiveChunkMessage(msg, publisher, isRoomChannel) {\n if (msg.length === 1) {\n this.emit('message', msg.buf, publisher, msg.customType, isRoomChannel);\n return;\n }\n const chunks = this.chunkedMessages.get(msg.session) || [];\n chunks.push(msg);\n if (chunks.length === msg.length) {\n const buffer = chunks.sort((a, b) => a.index - b.index).reduce((result, next) => {\n const buf = next.buf;\n const output = new Uint8Array(result.length + buf.length);\n output.set(result, 0);\n output.set(buf, result.length);\n return output;\n }, new Uint8Array());\n this.emit('message', buffer, publisher, msg.customType, isRoomChannel);\n this.chunkedMessages.delete(msg.session);\n } else {\n this.chunkedMessages.set(msg.session, chunks);\n }\n }\n publish(buf, customType) {\n let target = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n const session = uuidv4();\n // \u6D88\u606F\u5305\u4F53\u79EF, \u5355\u4F4D kb\n const size = buf.length * Uint8Array.BYTES_PER_ELEMENT / 1024;\n if (size < 16) {\n this.cachedMessages.push(ChunkedUpdateMessage.fromObject({\n buf: buf,\n length: 1,\n index: 0,\n session\n }, target, customType));\n } else {\n const chunkSize = 16 * 1024 / Uint8Array.BYTES_PER_ELEMENT;\n const len = Math.ceil(size / 16);\n let index = 0;\n while (index < len) {\n this.cachedMessages.push(ChunkedUpdateMessage.fromObject({\n buf: buf.slice(index * chunkSize, (index + 1) * chunkSize),\n length: len,\n index: index,\n session\n }, target, customType));\n index += 1;\n }\n }\n }\n async userList() {\n const output = new Set();\n const result = await this.rtmClient.presence.whoNow(this.roomChannel(), 'MESSAGE', {\n includedState: false\n });\n let nextPage = result.nextPage;\n result.occupants.forEach(userInfo => {\n const {\n userId\n } = userInfo;\n output.add(userId);\n });\n while (nextPage) {\n const result = await this.rtmClient.presence.whoNow(this.roomChannel(), 'MESSAGE', {\n includedState: false,\n page: nextPage\n });\n nextPage = result.nextPage;\n result.occupants.forEach(userInfo => {\n const {\n userId\n } = userInfo;\n output.add(userId);\n });\n }\n return output;\n }\n}"],
5
- "mappings": "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",
4
+ "sourcesContent": ["function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { log } from '@netless/forge-room';\nimport EventEmitter from 'eventemitter3';\nimport { v4 as uuidv4 } from 'uuid';\nimport { cyrb53 } from './utils';\nimport { ChunkedUpdateMessage } from './ChunkedUpdateMessage';\nexport class RTMProvider_2_1 extends EventEmitter {\n get calibrationTimestamp() {\n return this.rtmTimestamp + this.deviation;\n }\n constructor(rtmClient) {\n super();\n _defineProperty(this, \"rtmClient\", void 0);\n _defineProperty(this, \"roomId\", void 0);\n _defineProperty(this, \"userId\", void 0);\n _defineProperty(this, \"reconnectTimeout\", null);\n _defineProperty(this, \"chunkedMessages\", new Map());\n _defineProperty(this, \"cachedMessages\", []);\n _defineProperty(this, \"intervalId\", null);\n _defineProperty(this, \"deviation\", 0);\n _defineProperty(this, \"rtmTimestamp\", 0);\n _defineProperty(this, \"animationStartTimestamp\", void 0);\n _defineProperty(this, \"animationId\", void 0);\n _defineProperty(this, \"handleRtmMessage\", evt => {\n try {\n const isRoomChannel = evt.channelName.indexOf('_u_') < 0;\n if (!(evt.message instanceof Uint8Array) || !this.isForgeRoomChannel(evt.channelName)) {\n log('rtm message not Uint8Array', {\n channel: evt.channelName,\n publisher: evt.publisher\n });\n return;\n }\n if (this.animationId) {\n cancelAnimationFrame(this.animationId);\n this.animationStartTimestamp = undefined;\n this.animationId = undefined;\n this.deviation = 0;\n }\n this.rtmTimestamp = evt.timestamp;\n this.animationId = requestAnimationFrame(this.calibrateAnimate);\n // console.log(\"rtm timestamp\", evt.timestamp, \"calibrationTimestamp\", this.calibrationTimestamp);\n this.receiveChunkMessage(ChunkedUpdateMessage.fromBuffer(evt.message, '', evt.customType), evt.publisher, isRoomChannel);\n } catch (error) {\n log('rtm handle message error', {\n error: error.toString()\n }, 'error');\n }\n });\n _defineProperty(this, \"calibrateAnimate\", timestamp => {\n if (this.animationStartTimestamp === undefined) {\n this.animationStartTimestamp = timestamp;\n }\n this.deviation = timestamp - this.animationStartTimestamp;\n if (this.animationId) {\n this.animationId = requestAnimationFrame(this.calibrateAnimate);\n }\n });\n _defineProperty(this, \"handleStatus\", connectionStatus => {\n log('rtm status update', {\n state: connectionStatus.state,\n reason: connectionStatus.reason\n });\n if (connectionStatus.state === 'RECONNECTING' && this.reconnectTimeout === null) {\n this.emit('connectionStatusChange', 'RECONNECTING');\n this.reconnectTimeout = window.setTimeout(() => {\n this.emit('error', 'reconnecting timeout');\n this.emit('connectionStatusChange', 'DISCONNECTED');\n }, 30 * 1000);\n } else if (connectionStatus.state === 'CONNECTED') {\n window.clearTimeout(this.reconnectTimeout);\n this.emit('connectionStatusChange', 'CONNECTED');\n } else if (connectionStatus.state === 'FAILED') {\n window.clearTimeout(this.reconnectTimeout);\n this.emit('error', `rtm connection failed, ${connectionStatus.reason}`);\n this.emit('connectionStatusChange', 'DISCONNECTED');\n } else if (connectionStatus.state === 'CONNECTING') {\n this.emit('connectionStatusChange', 'CONNECTING');\n }\n });\n _defineProperty(this, \"handlePresence\", evt => {\n if (evt.channelName === this.roomChannel()) {\n if (evt.eventType === 'REMOTE_JOIN') {\n this.emit('userJoin', evt.publisher);\n } else if (evt.eventType === 'REMOTE_LEAVE') {\n this.emit('userLeave', evt.publisher);\n } else if (evt.eventType === 'REMOTE_TIMEOUT') {\n this.emit('userLeave', evt.publisher);\n } else if (evt.eventType === 'INTERVAL') {\n // evt.interval.join.users\n }\n }\n });\n this.rtmClient = rtmClient;\n }\n roomChannel() {\n return `r_${this.roomId}`;\n }\n userChannel(userId) {\n if (userId.length > 16) {\n userId = `${cyrb53(userId)}`;\n }\n return `${this.roomChannel()}_u_${userId}`;\n }\n\n /**\n * \u91CD\u65B0\u8BA2\u9605\u9891\u9053\n */\n async resubscribe() {\n try {\n await this.rtmClient.subscribe(this.roomChannel());\n await this.rtmClient.subscribe(this.userChannel(this.userId));\n } catch (error) {\n this.emit('error', `rtm subscribe fail, ${error}`);\n log('rtm subscribe fail', {\n error: error.toString()\n }, 'error');\n }\n }\n async initialize(roomId, userId) {\n window.clearInterval(this.intervalId);\n this.roomId = roomId;\n this.userId = userId;\n this.rtmClient.addEventListener('message', this.handleRtmMessage);\n this.rtmClient.addEventListener('presence', this.handlePresence);\n // @ts-ignore\n this.rtmClient.addEventListener('status', this.handleStatus);\n try {\n await this.rtmClient.subscribe(this.roomChannel());\n await this.rtmClient.subscribe(this.userChannel(this.userId));\n } catch (error) {\n this.emit('error', `rtm subscribe fail, ${error}`);\n log('rtm subscribe fail', {\n error: error.toString()\n }, 'error');\n }\n this.intervalId = setInterval(() => {\n const msg = this.cachedMessages.shift();\n if (msg) {\n const channel = msg.target ? this.userChannel(msg.target) : this.roomChannel();\n this.rtmClient.publish(channel, msg.buffer, {\n customType: msg.customType\n }).catch(error => {\n log('rtm publish failed', {\n channel,\n code: error.code\n }, 'warning');\n this.emit('error', `rtm publish fail, ${error}`);\n });\n }\n }, 32);\n }\n async dispose() {\n this.rtmClient.removeEventListener('message', this.handleRtmMessage);\n this.rtmClient.removeEventListener('presence', this.handlePresence);\n // @ts-ignore\n this.rtmClient.removeEventListener('status', this.handleStatus);\n await this.rtmClient.unsubscribe(this.roomChannel());\n await this.rtmClient.unsubscribe(this.userChannel(this.userId));\n window.clearInterval(this.intervalId);\n }\n isForgeRoomChannel(channel) {\n return channel === this.roomChannel() || channel === this.userChannel(this.userId);\n }\n receiveChunkMessage(msg, publisher, isRoomChannel) {\n if (msg.length === 1) {\n this.emit('message', msg.buf, publisher, msg.customType, isRoomChannel);\n return;\n }\n const chunks = this.chunkedMessages.get(msg.session) || [];\n chunks.push(msg);\n if (chunks.length === msg.length) {\n const buffer = chunks.sort((a, b) => a.index - b.index).reduce((result, next) => {\n const buf = next.buf;\n const output = new Uint8Array(result.length + buf.length);\n output.set(result, 0);\n output.set(buf, result.length);\n return output;\n }, new Uint8Array());\n this.emit('message', buffer, publisher, msg.customType, isRoomChannel);\n this.chunkedMessages.delete(msg.session);\n } else {\n this.chunkedMessages.set(msg.session, chunks);\n }\n }\n publish(buf, customType) {\n let target = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n const session = uuidv4();\n // \u6D88\u606F\u5305\u4F53\u79EF, \u5355\u4F4D kb\n const size = buf.length * Uint8Array.BYTES_PER_ELEMENT / 1024;\n if (size < 16) {\n this.cachedMessages.push(ChunkedUpdateMessage.fromObject({\n buf: buf,\n length: 1,\n index: 0,\n session\n }, target, customType));\n } else {\n const chunkSize = 16 * 1024 / Uint8Array.BYTES_PER_ELEMENT;\n const len = Math.ceil(size / 16);\n let index = 0;\n while (index < len) {\n this.cachedMessages.push(ChunkedUpdateMessage.fromObject({\n buf: buf.slice(index * chunkSize, (index + 1) * chunkSize),\n length: len,\n index: index,\n session\n }, target, customType));\n index += 1;\n }\n }\n }\n async userList() {\n const output = new Set();\n const result = await this.rtmClient.presence.whoNow(this.roomChannel(), 'MESSAGE', {\n includedState: false\n });\n let nextPage = result.nextPage;\n result.occupants.forEach(userInfo => {\n const {\n userId\n } = userInfo;\n output.add(userId);\n });\n while (nextPage) {\n const result = await this.rtmClient.presence.whoNow(this.roomChannel(), 'MESSAGE', {\n includedState: false,\n page: nextPage\n });\n nextPage = result.nextPage;\n result.occupants.forEach(userInfo => {\n const {\n userId\n } = userInfo;\n output.add(userId);\n });\n }\n return output;\n }\n}", "export const cyrb53 = function (str) {\n let seed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n let h1 = 0xdeadbeef ^ seed,\n h2 = 0x41c6ce57 ^ seed;\n for (let i = 0, ch; i < str.length; i++) {\n ch = str.charCodeAt(i);\n h1 = Math.imul(h1 ^ ch, 2654435761);\n h2 = Math.imul(h2 ^ ch, 1597334677);\n }\n h1 = Math.imul(h1 ^ h1 >>> 16, 2246822507);\n h1 ^= Math.imul(h2 ^ h2 >>> 13, 3266489909);\n h2 = Math.imul(h2 ^ h2 >>> 16, 2246822507);\n h2 ^= Math.imul(h1 ^ h1 >>> 13, 3266489909);\n return 4294967296 * (2097151 & h2) + (h1 >>> 0);\n};", "function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nexport class ChunkedUpdateMessage {\n static fromObject(obj, target, customType) {\n const msg = new ChunkedUpdateMessage();\n msg.target = target;\n msg.customType = customType;\n const encoder = new TextEncoder();\n const sessionBuf = encoder.encode(obj.session);\n\n // header \u6309\u987A\u5E8F\u6307\u793A buf, session, target, customType \u90E8\u5206\u7684 uint8 \u957F\u5EA6\n msg.header = new DataView(new Uint8Array(10).buffer);\n msg.header.setUint32(0, obj.buf.length, false);\n msg.header.setUint32(4, sessionBuf.length, false);\n msg.header.setUint8(8, obj.index);\n msg.header.setUint8(9, obj.length);\n msg.buffer = new Uint8Array(obj.buf.length + sessionBuf.length + msg.header.buffer.byteLength);\n let len = 0;\n msg.buffer.set(new Uint8Array(msg.header.buffer), len);\n len += msg.header.buffer.byteLength;\n msg.buffer.set(obj.buf, len);\n len += obj.buf.length;\n msg.buffer.set(sessionBuf, len);\n return msg;\n }\n static fromBuffer(buf, target, customType) {\n const msg = new ChunkedUpdateMessage();\n msg.header = new DataView(buf.slice(0, 10).buffer);\n msg.buffer = buf.slice(10);\n msg.target = target;\n msg.customType = customType;\n return msg;\n }\n get buf() {\n const len = this.header.getInt32(0);\n return this.buffer.slice(0, len);\n }\n get index() {\n return this.header.getUint8(8);\n }\n get length() {\n return this.header.getUint8(9);\n }\n get session() {\n const start = this.header.getInt32(0);\n const sessionBuf = this.buffer.slice(start, start + this.header.getInt32(4));\n const textDecoder = new TextDecoder();\n return textDecoder.decode(sessionBuf);\n }\n constructor() {\n _defineProperty(this, \"target\", void 0);\n _defineProperty(this, \"customType\", void 0);\n _defineProperty(this, \"buffer\", void 0);\n _defineProperty(this, \"header\", void 0);\n }\n}", "function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { log } from '@netless/forge-room';\nimport EventEmitter from 'eventemitter3';\nimport { v4 as uuidv4 } from 'uuid';\nimport { cyrb53 } from './utils';\nimport { ChunkedUpdateMessage } from './ChunkedUpdateMessage';\nexport class RTMProvider_2_2 extends EventEmitter {\n get calibrationTimestamp() {\n return this.rtmTimestamp + this.deviation;\n }\n constructor(rtmClient) {\n super();\n _defineProperty(this, \"rtmClient\", void 0);\n _defineProperty(this, \"roomId\", void 0);\n _defineProperty(this, \"userId\", void 0);\n _defineProperty(this, \"reconnectTimeout\", null);\n _defineProperty(this, \"chunkedMessages\", new Map());\n _defineProperty(this, \"cachedMessages\", []);\n _defineProperty(this, \"intervalId\", null);\n _defineProperty(this, \"deviation\", 0);\n _defineProperty(this, \"rtmTimestamp\", 0);\n _defineProperty(this, \"animationStartTimestamp\", void 0);\n _defineProperty(this, \"animationId\", void 0);\n _defineProperty(this, \"handleRtmMessage\", evt => {\n try {\n const isRoomChannel = evt.channelName.indexOf('_u_') >= 0;\n if (!(evt.message instanceof Uint8Array) || !this.isForgeRoomChannel(evt.channelName)) {\n log('rtm message not Uint8Array', {\n channel: evt.channelName,\n publisher: evt.publisher\n });\n return;\n }\n if (this.animationId) {\n cancelAnimationFrame(this.animationId);\n this.animationStartTimestamp = undefined;\n this.animationId = undefined;\n this.deviation = 0;\n }\n this.rtmTimestamp = evt.timestamp;\n this.animationId = requestAnimationFrame(this.calibrateAnimate);\n this.receiveChunkMessage(ChunkedUpdateMessage.fromBuffer(evt.message, '', evt.customType), evt.publisher, isRoomChannel);\n } catch (e) {\n log('rtm handle message error', {\n error: e.toString()\n }, 'error');\n }\n });\n _defineProperty(this, \"calibrateAnimate\", timestamp => {\n if (this.animationStartTimestamp === undefined) {\n this.animationStartTimestamp = timestamp;\n }\n this.deviation = timestamp - this.animationStartTimestamp;\n if (this.animationId) {\n this.animationId = requestAnimationFrame(this.calibrateAnimate);\n }\n });\n _defineProperty(this, \"handleStatus\", connectionStatus => {\n log('rtm status update', {\n state: connectionStatus.state,\n reason: connectionStatus.reason,\n rtm: '2.2'\n });\n if (connectionStatus.state === 'RECONNECTING' && this.reconnectTimeout === null) {\n this.emit('connectionStatusChange', 'RECONNECTING');\n this.reconnectTimeout = window.setTimeout(() => {\n this.emit('error', 'reconnecting timeout');\n this.emit('connectionStatusChange', 'DISCONNECTED');\n }, 30 * 1000);\n } else if (connectionStatus.state === 'CONNECTED') {\n window.clearTimeout(this.reconnectTimeout);\n this.emit('connectionStatusChange', 'CONNECTED');\n } else if (connectionStatus.state === 'FAILED') {\n window.clearTimeout(this.reconnectTimeout);\n this.emit('error', `rtm connection failed, ${connectionStatus.reason}`);\n this.emit('connectionStatusChange', 'DISCONNECTED');\n } else if (connectionStatus.state === 'CONNECTING') {\n this.emit('connectionStatusChange', 'CONNECTING');\n }\n });\n _defineProperty(this, \"handlePresence\", evt => {\n if (evt.channelName === this.roomChannel()) {\n if (evt.eventType === 'REMOTE_JOIN') {\n this.emit('userJoin', evt.publisher);\n } else if (evt.eventType === 'REMOTE_LEAVE') {\n this.emit('userLeave', evt.publisher);\n } else if (evt.eventType === 'REMOTE_TIMEOUT') {\n this.emit('userLeave', evt.publisher);\n } else if (evt.eventType === 'INTERVAL') {\n // evt.interval.join.users\n }\n }\n });\n this.rtmClient = rtmClient;\n }\n roomChannel() {\n return `r_${this.roomId}`;\n }\n userChannel(userId) {\n if (userId.length > 16) {\n userId = `${cyrb53(userId)}`;\n }\n return `${this.roomChannel()}_u_${userId}`;\n }\n async initialize(roomId, userId) {\n window.clearInterval(this.intervalId);\n this.roomId = roomId;\n this.userId = userId;\n this.rtmClient.addEventListener('message', this.handleRtmMessage);\n this.rtmClient.addEventListener('presence', this.handlePresence);\n // @ts-ignore\n this.rtmClient.addEventListener('status', this.handleStatus);\n try {\n await this.rtmClient.subscribe(this.roomChannel());\n await this.rtmClient.subscribe(this.userChannel(this.userId));\n } catch (error) {\n this.emit('error', `rtm subscribe fail, ${error}`);\n log('rtm subscribe fail', {\n error: error.toString(),\n rtm: '2.2'\n }, 'error');\n }\n this.intervalId = setInterval(() => {\n const msg = this.cachedMessages.shift();\n if (msg) {\n const channel = msg.target ? this.userChannel(msg.target) : this.roomChannel();\n this.rtmClient.publish(channel, msg.buffer, {\n customType: msg.customType\n }).catch(error => {\n log('rtm publish failed', {\n channel,\n code: error.code,\n rtm: '2.2'\n }, 'warning');\n this.emit('error', `rtm publish fail, ${error}`);\n });\n }\n }, 32);\n }\n\n /**\n * \u91CD\u65B0\u8BA2\u9605\u9891\u9053\n */\n async resubscribe() {\n try {\n await this.rtmClient.subscribe(this.roomChannel());\n await this.rtmClient.subscribe(this.userChannel(this.userId));\n } catch (error) {\n this.emit('error', `rtm subscribe fail, ${error}`);\n log('rtm subscribe fail', {\n error: error.toString()\n }, 'error');\n }\n }\n async dispose() {\n this.rtmClient.removeEventListener('message', this.handleRtmMessage);\n this.rtmClient.removeEventListener('presence', this.handlePresence);\n // @ts-ignore\n this.rtmClient.removeEventListener('status', this.handleStatus);\n await this.rtmClient.unsubscribe(this.roomChannel());\n await this.rtmClient.unsubscribe(this.userChannel(this.userId));\n window.clearInterval(this.intervalId);\n }\n isForgeRoomChannel(channel) {\n return channel === this.roomChannel() || channel === this.userChannel(this.userId);\n }\n receiveChunkMessage(msg, publisher, isRoomChannel) {\n if (msg.length === 1) {\n this.emit('message', msg.buf, publisher, msg.customType, isRoomChannel);\n return;\n }\n const chunks = this.chunkedMessages.get(msg.session) || [];\n chunks.push(msg);\n if (chunks.length === msg.length) {\n const buffer = chunks.sort((a, b) => a.index - b.index).reduce((result, next) => {\n const buf = next.buf;\n const output = new Uint8Array(result.length + buf.length);\n output.set(result, 0);\n output.set(buf, result.length);\n return output;\n }, new Uint8Array());\n this.emit('message', buffer, publisher, msg.customType, isRoomChannel);\n this.chunkedMessages.delete(msg.session);\n } else {\n this.chunkedMessages.set(msg.session, chunks);\n }\n }\n publish(buf, customType) {\n let target = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n const session = uuidv4();\n // \u6D88\u606F\u5305\u4F53\u79EF, \u5355\u4F4D kb\n const size = buf.length * Uint8Array.BYTES_PER_ELEMENT / 1024;\n if (size < 16) {\n this.cachedMessages.push(ChunkedUpdateMessage.fromObject({\n buf: buf,\n length: 1,\n index: 0,\n session\n }, target, customType));\n } else {\n const chunkSize = 16 * 1024 / Uint8Array.BYTES_PER_ELEMENT;\n const len = Math.ceil(size / 16);\n let index = 0;\n while (index < len) {\n this.cachedMessages.push(ChunkedUpdateMessage.fromObject({\n buf: buf.slice(index * chunkSize, (index + 1) * chunkSize),\n length: len,\n index: index,\n session\n }, target, customType));\n index += 1;\n }\n }\n }\n async userList() {\n const output = new Set();\n const result = await this.rtmClient.presence.whoNow(this.roomChannel(), 'MESSAGE', {\n includedState: false\n });\n let nextPage = result.nextPage;\n result.occupants.forEach(userInfo => {\n const {\n userId\n } = userInfo;\n output.add(userId);\n });\n while (nextPage) {\n const result = await this.rtmClient.presence.whoNow(this.roomChannel(), 'MESSAGE', {\n includedState: false,\n page: nextPage\n });\n nextPage = result.nextPage;\n result.occupants.forEach(userInfo => {\n const {\n userId\n } = userInfo;\n output.add(userId);\n });\n }\n return output;\n }\n}"],
5
+ "mappings": "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",
6
6
  "names": ["_defineProperty", "_toPropertyKey", "_toPrimitive", "result", "log", "EventEmitter", "uuidv4", "_defineProperty", "_toPropertyKey", "_toPrimitive", "EventEmitter", "log", "uuidv4", "result"]
7
7
  }
@@ -163,24 +163,29 @@ var RTMProvider_2_1 = class extends import_eventemitter3.default {
163
163
  _defineProperty2(this, "animationStartTimestamp", void 0);
164
164
  _defineProperty2(this, "animationId", void 0);
165
165
  _defineProperty2(this, "handleRtmMessage", (evt) => {
166
- const isRoomChannel = evt.channelName.indexOf("_u_") < 0;
167
- if (!(evt.message instanceof Uint8Array)) {
168
- (0, import_forge_room.log)("rtm message not Uint8Array", {
169
- channel: evt.channelName,
170
- publisher: evt.publisher,
171
- message: evt.message
172
- });
173
- return;
174
- }
175
- if (this.animationId) {
176
- cancelAnimationFrame(this.animationId);
177
- this.animationStartTimestamp = void 0;
178
- this.animationId = void 0;
179
- this.deviation = 0;
166
+ try {
167
+ const isRoomChannel = evt.channelName.indexOf("_u_") < 0;
168
+ if (!(evt.message instanceof Uint8Array) || !this.isForgeRoomChannel(evt.channelName)) {
169
+ (0, import_forge_room.log)("rtm message not Uint8Array", {
170
+ channel: evt.channelName,
171
+ publisher: evt.publisher
172
+ });
173
+ return;
174
+ }
175
+ if (this.animationId) {
176
+ cancelAnimationFrame(this.animationId);
177
+ this.animationStartTimestamp = void 0;
178
+ this.animationId = void 0;
179
+ this.deviation = 0;
180
+ }
181
+ this.rtmTimestamp = evt.timestamp;
182
+ this.animationId = requestAnimationFrame(this.calibrateAnimate);
183
+ this.receiveChunkMessage(ChunkedUpdateMessage.fromBuffer(evt.message, "", evt.customType), evt.publisher, isRoomChannel);
184
+ } catch (error) {
185
+ (0, import_forge_room.log)("rtm handle message error", {
186
+ error: error.toString()
187
+ }, "error");
180
188
  }
181
- this.rtmTimestamp = evt.timestamp;
182
- this.animationId = requestAnimationFrame(this.calibrateAnimate);
183
- this.receiveChunkMessage(ChunkedUpdateMessage.fromBuffer(evt.message, "", evt.customType), evt.publisher, isRoomChannel);
184
189
  });
185
190
  _defineProperty2(this, "calibrateAnimate", (timestamp) => {
186
191
  if (this.animationStartTimestamp === void 0) {
@@ -290,6 +295,9 @@ var RTMProvider_2_1 = class extends import_eventemitter3.default {
290
295
  await this.rtmClient.unsubscribe(this.userChannel(this.userId));
291
296
  window.clearInterval(this.intervalId);
292
297
  }
298
+ isForgeRoomChannel(channel) {
299
+ return channel === this.roomChannel() || channel === this.userChannel(this.userId);
300
+ }
293
301
  receiveChunkMessage(msg, publisher, isRoomChannel) {
294
302
  if (msg.length === 1) {
295
303
  this.emit("message", msg.buf, publisher, msg.customType, isRoomChannel);
@@ -405,24 +413,29 @@ var RTMProvider_2_2 = class extends import_eventemitter32.default {
405
413
  _defineProperty3(this, "animationStartTimestamp", void 0);
406
414
  _defineProperty3(this, "animationId", void 0);
407
415
  _defineProperty3(this, "handleRtmMessage", (evt) => {
408
- const isRoomChannel = evt.channelName.indexOf("_u_") >= 0;
409
- if (!(evt.message instanceof Uint8Array)) {
410
- (0, import_forge_room2.log)("rtm message not Uint8Array", {
411
- channel: evt.channelName,
412
- publisher: evt.publisher,
413
- message: evt.message
414
- });
415
- return;
416
- }
417
- if (this.animationId) {
418
- cancelAnimationFrame(this.animationId);
419
- this.animationStartTimestamp = void 0;
420
- this.animationId = void 0;
421
- this.deviation = 0;
416
+ try {
417
+ const isRoomChannel = evt.channelName.indexOf("_u_") >= 0;
418
+ if (!(evt.message instanceof Uint8Array) || !this.isForgeRoomChannel(evt.channelName)) {
419
+ (0, import_forge_room2.log)("rtm message not Uint8Array", {
420
+ channel: evt.channelName,
421
+ publisher: evt.publisher
422
+ });
423
+ return;
424
+ }
425
+ if (this.animationId) {
426
+ cancelAnimationFrame(this.animationId);
427
+ this.animationStartTimestamp = void 0;
428
+ this.animationId = void 0;
429
+ this.deviation = 0;
430
+ }
431
+ this.rtmTimestamp = evt.timestamp;
432
+ this.animationId = requestAnimationFrame(this.calibrateAnimate);
433
+ this.receiveChunkMessage(ChunkedUpdateMessage.fromBuffer(evt.message, "", evt.customType), evt.publisher, isRoomChannel);
434
+ } catch (e) {
435
+ (0, import_forge_room2.log)("rtm handle message error", {
436
+ error: e.toString()
437
+ }, "error");
422
438
  }
423
- this.rtmTimestamp = evt.timestamp;
424
- this.animationId = requestAnimationFrame(this.calibrateAnimate);
425
- this.receiveChunkMessage(ChunkedUpdateMessage.fromBuffer(evt.message, "", evt.customType), evt.publisher, isRoomChannel);
426
439
  });
427
440
  _defineProperty3(this, "calibrateAnimate", (timestamp) => {
428
441
  if (this.animationStartTimestamp === void 0) {
@@ -535,6 +548,9 @@ var RTMProvider_2_2 = class extends import_eventemitter32.default {
535
548
  await this.rtmClient.unsubscribe(this.userChannel(this.userId));
536
549
  window.clearInterval(this.intervalId);
537
550
  }
551
+ isForgeRoomChannel(channel) {
552
+ return channel === this.roomChannel() || channel === this.userChannel(this.userId);
553
+ }
538
554
  receiveChunkMessage(msg, publisher, isRoomChannel) {
539
555
  if (msg.length === 1) {
540
556
  this.emit("message", msg.buf, publisher, msg.customType, isRoomChannel);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts", "../src/RTM_2_1.ts", "../src/utils.ts", "../src/ChunkedUpdateMessage.ts", "../src/RTM_2_2.ts"],
4
- "sourcesContent": ["export { RTMProvider_2_1 } from './RTM_2_1';\nexport { RTMProvider_2_2 } from './RTM_2_2';", "function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { log } from '@netless/forge-room';\nimport EventEmitter from 'eventemitter3';\nimport { v4 as uuidv4 } from 'uuid';\nimport { cyrb53 } from './utils';\nimport { ChunkedUpdateMessage } from './ChunkedUpdateMessage';\nexport class RTMProvider_2_1 extends EventEmitter {\n get calibrationTimestamp() {\n return this.rtmTimestamp + this.deviation;\n }\n constructor(rtmClient) {\n super();\n _defineProperty(this, \"rtmClient\", void 0);\n _defineProperty(this, \"roomId\", void 0);\n _defineProperty(this, \"userId\", void 0);\n _defineProperty(this, \"reconnectTimeout\", null);\n _defineProperty(this, \"chunkedMessages\", new Map());\n _defineProperty(this, \"cachedMessages\", []);\n _defineProperty(this, \"intervalId\", null);\n _defineProperty(this, \"deviation\", 0);\n _defineProperty(this, \"rtmTimestamp\", 0);\n _defineProperty(this, \"animationStartTimestamp\", void 0);\n _defineProperty(this, \"animationId\", void 0);\n _defineProperty(this, \"handleRtmMessage\", evt => {\n const isRoomChannel = evt.channelName.indexOf('_u_') < 0;\n if (!(evt.message instanceof Uint8Array)) {\n log('rtm message not Uint8Array', {\n channel: evt.channelName,\n publisher: evt.publisher,\n message: evt.message\n });\n return;\n }\n if (this.animationId) {\n cancelAnimationFrame(this.animationId);\n this.animationStartTimestamp = undefined;\n this.animationId = undefined;\n this.deviation = 0;\n }\n this.rtmTimestamp = evt.timestamp;\n this.animationId = requestAnimationFrame(this.calibrateAnimate);\n // console.log(\"rtm timestamp\", evt.timestamp, \"calibrationTimestamp\", this.calibrationTimestamp);\n this.receiveChunkMessage(ChunkedUpdateMessage.fromBuffer(evt.message, '', evt.customType), evt.publisher, isRoomChannel);\n });\n _defineProperty(this, \"calibrateAnimate\", timestamp => {\n if (this.animationStartTimestamp === undefined) {\n this.animationStartTimestamp = timestamp;\n }\n this.deviation = timestamp - this.animationStartTimestamp;\n if (this.animationId) {\n this.animationId = requestAnimationFrame(this.calibrateAnimate);\n }\n });\n _defineProperty(this, \"handleStatus\", connectionStatus => {\n log('rtm status update', {\n state: connectionStatus.state,\n reason: connectionStatus.reason\n });\n if (connectionStatus.state === 'RECONNECTING' && this.reconnectTimeout === null) {\n this.emit('connectionStatusChange', 'RECONNECTING');\n this.reconnectTimeout = window.setTimeout(() => {\n this.emit('error', 'reconnecting timeout');\n this.emit('connectionStatusChange', 'DISCONNECTED');\n }, 30 * 1000);\n } else if (connectionStatus.state === 'CONNECTED') {\n window.clearTimeout(this.reconnectTimeout);\n this.emit('connectionStatusChange', 'CONNECTED');\n } else if (connectionStatus.state === 'FAILED') {\n window.clearTimeout(this.reconnectTimeout);\n this.emit('error', `rtm connection failed, ${connectionStatus.reason}`);\n this.emit('connectionStatusChange', 'DISCONNECTED');\n } else if (connectionStatus.state === 'CONNECTING') {\n this.emit('connectionStatusChange', 'CONNECTING');\n }\n });\n _defineProperty(this, \"handlePresence\", evt => {\n if (evt.channelName === this.roomChannel()) {\n if (evt.eventType === 'REMOTE_JOIN') {\n this.emit('userJoin', evt.publisher);\n } else if (evt.eventType === 'REMOTE_LEAVE') {\n this.emit('userLeave', evt.publisher);\n } else if (evt.eventType === 'REMOTE_TIMEOUT') {\n this.emit('userLeave', evt.publisher);\n } else if (evt.eventType === 'INTERVAL') {\n // evt.interval.join.users\n }\n }\n });\n this.rtmClient = rtmClient;\n }\n roomChannel() {\n return `r_${this.roomId}`;\n }\n userChannel(userId) {\n if (userId.length > 16) {\n userId = `${cyrb53(userId)}`;\n }\n return `${this.roomChannel()}_u_${userId}`;\n }\n\n /**\n * \u91CD\u65B0\u8BA2\u9605\u9891\u9053\n */\n async resubscribe() {\n try {\n await this.rtmClient.subscribe(this.roomChannel());\n await this.rtmClient.subscribe(this.userChannel(this.userId));\n } catch (error) {\n this.emit('error', `rtm subscribe fail, ${error}`);\n log('rtm subscribe fail', {\n error: error.toString()\n }, 'error');\n }\n }\n async initialize(roomId, userId) {\n window.clearInterval(this.intervalId);\n this.roomId = roomId;\n this.userId = userId;\n this.rtmClient.addEventListener('message', this.handleRtmMessage);\n this.rtmClient.addEventListener('presence', this.handlePresence);\n // @ts-ignore\n this.rtmClient.addEventListener('status', this.handleStatus);\n try {\n await this.rtmClient.subscribe(this.roomChannel());\n await this.rtmClient.subscribe(this.userChannel(this.userId));\n } catch (error) {\n this.emit('error', `rtm subscribe fail, ${error}`);\n log('rtm subscribe fail', {\n error: error.toString()\n }, 'error');\n }\n this.intervalId = setInterval(() => {\n const msg = this.cachedMessages.shift();\n if (msg) {\n const channel = msg.target ? this.userChannel(msg.target) : this.roomChannel();\n this.rtmClient.publish(channel, msg.buffer, {\n customType: msg.customType\n }).catch(error => {\n log('rtm publish failed', {\n channel,\n code: error.code\n }, 'warning');\n this.emit('error', `rtm publish fail, ${error}`);\n });\n }\n }, 32);\n }\n async dispose() {\n this.rtmClient.removeEventListener('message', this.handleRtmMessage);\n this.rtmClient.removeEventListener('presence', this.handlePresence);\n // @ts-ignore\n this.rtmClient.removeEventListener('status', this.handleStatus);\n await this.rtmClient.unsubscribe(this.roomChannel());\n await this.rtmClient.unsubscribe(this.userChannel(this.userId));\n window.clearInterval(this.intervalId);\n }\n receiveChunkMessage(msg, publisher, isRoomChannel) {\n if (msg.length === 1) {\n this.emit('message', msg.buf, publisher, msg.customType, isRoomChannel);\n return;\n }\n const chunks = this.chunkedMessages.get(msg.session) || [];\n chunks.push(msg);\n if (chunks.length === msg.length) {\n const buffer = chunks.sort((a, b) => a.index - b.index).reduce((result, next) => {\n const buf = next.buf;\n const output = new Uint8Array(result.length + buf.length);\n output.set(result, 0);\n output.set(buf, result.length);\n return output;\n }, new Uint8Array());\n this.emit('message', buffer, publisher, msg.customType, isRoomChannel);\n this.chunkedMessages.delete(msg.session);\n } else {\n this.chunkedMessages.set(msg.session, chunks);\n }\n }\n publish(buf, customType) {\n let target = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n const session = uuidv4();\n // \u6D88\u606F\u5305\u4F53\u79EF, \u5355\u4F4D kb\n const size = buf.length * Uint8Array.BYTES_PER_ELEMENT / 1024;\n if (size < 16) {\n this.cachedMessages.push(ChunkedUpdateMessage.fromObject({\n buf: buf,\n length: 1,\n index: 0,\n session\n }, target, customType));\n } else {\n const chunkSize = 16 * 1024 / Uint8Array.BYTES_PER_ELEMENT;\n const len = Math.ceil(size / 16);\n let index = 0;\n while (index < len) {\n this.cachedMessages.push(ChunkedUpdateMessage.fromObject({\n buf: buf.slice(index * chunkSize, (index + 1) * chunkSize),\n length: len,\n index: index,\n session\n }, target, customType));\n index += 1;\n }\n }\n }\n async userList() {\n const output = new Set();\n const result = await this.rtmClient.presence.whoNow(this.roomChannel(), 'MESSAGE', {\n includedState: false\n });\n let nextPage = result.nextPage;\n result.occupants.forEach(userInfo => {\n const {\n userId\n } = userInfo;\n output.add(userId);\n });\n while (nextPage) {\n const result = await this.rtmClient.presence.whoNow(this.roomChannel(), 'MESSAGE', {\n includedState: false,\n page: nextPage\n });\n nextPage = result.nextPage;\n result.occupants.forEach(userInfo => {\n const {\n userId\n } = userInfo;\n output.add(userId);\n });\n }\n return output;\n }\n}", "export const cyrb53 = function (str) {\n let seed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n let h1 = 0xdeadbeef ^ seed,\n h2 = 0x41c6ce57 ^ seed;\n for (let i = 0, ch; i < str.length; i++) {\n ch = str.charCodeAt(i);\n h1 = Math.imul(h1 ^ ch, 2654435761);\n h2 = Math.imul(h2 ^ ch, 1597334677);\n }\n h1 = Math.imul(h1 ^ h1 >>> 16, 2246822507);\n h1 ^= Math.imul(h2 ^ h2 >>> 13, 3266489909);\n h2 = Math.imul(h2 ^ h2 >>> 16, 2246822507);\n h2 ^= Math.imul(h1 ^ h1 >>> 13, 3266489909);\n return 4294967296 * (2097151 & h2) + (h1 >>> 0);\n};", "function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nexport class ChunkedUpdateMessage {\n static fromObject(obj, target, customType) {\n const msg = new ChunkedUpdateMessage();\n msg.target = target;\n msg.customType = customType;\n const encoder = new TextEncoder();\n const sessionBuf = encoder.encode(obj.session);\n\n // header \u6309\u987A\u5E8F\u6307\u793A buf, session, target, customType \u90E8\u5206\u7684 uint8 \u957F\u5EA6\n msg.header = new DataView(new Uint8Array(10).buffer);\n msg.header.setUint32(0, obj.buf.length, false);\n msg.header.setUint32(4, sessionBuf.length, false);\n msg.header.setUint8(8, obj.index);\n msg.header.setUint8(9, obj.length);\n msg.buffer = new Uint8Array(obj.buf.length + sessionBuf.length + msg.header.buffer.byteLength);\n let len = 0;\n msg.buffer.set(new Uint8Array(msg.header.buffer), len);\n len += msg.header.buffer.byteLength;\n msg.buffer.set(obj.buf, len);\n len += obj.buf.length;\n msg.buffer.set(sessionBuf, len);\n return msg;\n }\n static fromBuffer(buf, target, customType) {\n const msg = new ChunkedUpdateMessage();\n msg.header = new DataView(buf.slice(0, 10).buffer);\n msg.buffer = buf.slice(10);\n msg.target = target;\n msg.customType = customType;\n return msg;\n }\n get buf() {\n const len = this.header.getInt32(0);\n return this.buffer.slice(0, len);\n }\n get index() {\n return this.header.getUint8(8);\n }\n get length() {\n return this.header.getUint8(9);\n }\n get session() {\n const start = this.header.getInt32(0);\n const sessionBuf = this.buffer.slice(start, start + this.header.getInt32(4));\n const textDecoder = new TextDecoder();\n return textDecoder.decode(sessionBuf);\n }\n constructor() {\n _defineProperty(this, \"target\", void 0);\n _defineProperty(this, \"customType\", void 0);\n _defineProperty(this, \"buffer\", void 0);\n _defineProperty(this, \"header\", void 0);\n }\n}", "function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { log } from '@netless/forge-room';\nimport EventEmitter from 'eventemitter3';\nimport { v4 as uuidv4 } from 'uuid';\nimport { cyrb53 } from './utils';\nimport { ChunkedUpdateMessage } from './ChunkedUpdateMessage';\nexport class RTMProvider_2_2 extends EventEmitter {\n get calibrationTimestamp() {\n return this.rtmTimestamp + this.deviation;\n }\n constructor(rtmClient) {\n super();\n _defineProperty(this, \"rtmClient\", void 0);\n _defineProperty(this, \"roomId\", void 0);\n _defineProperty(this, \"userId\", void 0);\n _defineProperty(this, \"reconnectTimeout\", null);\n _defineProperty(this, \"chunkedMessages\", new Map());\n _defineProperty(this, \"cachedMessages\", []);\n _defineProperty(this, \"intervalId\", null);\n _defineProperty(this, \"deviation\", 0);\n _defineProperty(this, \"rtmTimestamp\", 0);\n _defineProperty(this, \"animationStartTimestamp\", void 0);\n _defineProperty(this, \"animationId\", void 0);\n _defineProperty(this, \"handleRtmMessage\", evt => {\n const isRoomChannel = evt.channelName.indexOf('_u_') >= 0;\n if (!(evt.message instanceof Uint8Array)) {\n log('rtm message not Uint8Array', {\n channel: evt.channelName,\n publisher: evt.publisher,\n message: evt.message\n });\n return;\n }\n if (this.animationId) {\n cancelAnimationFrame(this.animationId);\n this.animationStartTimestamp = undefined;\n this.animationId = undefined;\n this.deviation = 0;\n }\n this.rtmTimestamp = evt.timestamp;\n this.animationId = requestAnimationFrame(this.calibrateAnimate);\n this.receiveChunkMessage(ChunkedUpdateMessage.fromBuffer(evt.message, '', evt.customType), evt.publisher, isRoomChannel);\n });\n _defineProperty(this, \"calibrateAnimate\", timestamp => {\n if (this.animationStartTimestamp === undefined) {\n this.animationStartTimestamp = timestamp;\n }\n this.deviation = timestamp - this.animationStartTimestamp;\n if (this.animationId) {\n this.animationId = requestAnimationFrame(this.calibrateAnimate);\n }\n });\n _defineProperty(this, \"handleStatus\", connectionStatus => {\n log('rtm status update', {\n state: connectionStatus.state,\n reason: connectionStatus.reason,\n rtm: '2.2'\n });\n if (connectionStatus.state === 'RECONNECTING' && this.reconnectTimeout === null) {\n this.emit('connectionStatusChange', 'RECONNECTING');\n this.reconnectTimeout = window.setTimeout(() => {\n this.emit('error', 'reconnecting timeout');\n this.emit('connectionStatusChange', 'DISCONNECTED');\n }, 30 * 1000);\n } else if (connectionStatus.state === 'CONNECTED') {\n window.clearTimeout(this.reconnectTimeout);\n this.emit('connectionStatusChange', 'CONNECTED');\n } else if (connectionStatus.state === 'FAILED') {\n window.clearTimeout(this.reconnectTimeout);\n this.emit('error', `rtm connection failed, ${connectionStatus.reason}`);\n this.emit('connectionStatusChange', 'DISCONNECTED');\n } else if (connectionStatus.state === 'CONNECTING') {\n this.emit('connectionStatusChange', 'CONNECTING');\n }\n });\n _defineProperty(this, \"handlePresence\", evt => {\n if (evt.channelName === this.roomChannel()) {\n if (evt.eventType === 'REMOTE_JOIN') {\n this.emit('userJoin', evt.publisher);\n } else if (evt.eventType === 'REMOTE_LEAVE') {\n this.emit('userLeave', evt.publisher);\n } else if (evt.eventType === 'REMOTE_TIMEOUT') {\n this.emit('userLeave', evt.publisher);\n } else if (evt.eventType === 'INTERVAL') {\n // evt.interval.join.users\n }\n }\n });\n this.rtmClient = rtmClient;\n }\n roomChannel() {\n return `r_${this.roomId}`;\n }\n userChannel(userId) {\n if (userId.length > 16) {\n userId = `${cyrb53(userId)}`;\n }\n return `${this.roomChannel()}_u_${userId}`;\n }\n async initialize(roomId, userId) {\n window.clearInterval(this.intervalId);\n this.roomId = roomId;\n this.userId = userId;\n this.rtmClient.addEventListener('message', this.handleRtmMessage);\n this.rtmClient.addEventListener('presence', this.handlePresence);\n // @ts-ignore\n this.rtmClient.addEventListener('status', this.handleStatus);\n try {\n await this.rtmClient.subscribe(this.roomChannel());\n await this.rtmClient.subscribe(this.userChannel(this.userId));\n } catch (error) {\n this.emit('error', `rtm subscribe fail, ${error}`);\n log('rtm subscribe fail', {\n error: error.toString(),\n rtm: '2.2'\n }, 'error');\n }\n this.intervalId = setInterval(() => {\n const msg = this.cachedMessages.shift();\n if (msg) {\n const channel = msg.target ? this.userChannel(msg.target) : this.roomChannel();\n this.rtmClient.publish(channel, msg.buffer, {\n customType: msg.customType\n }).catch(error => {\n log('rtm publish failed', {\n channel,\n code: error.code,\n rtm: '2.2'\n }, 'warning');\n this.emit('error', `rtm publish fail, ${error}`);\n });\n }\n }, 32);\n }\n\n /**\n * \u91CD\u65B0\u8BA2\u9605\u9891\u9053\n */\n async resubscribe() {\n try {\n await this.rtmClient.subscribe(this.roomChannel());\n await this.rtmClient.subscribe(this.userChannel(this.userId));\n } catch (error) {\n this.emit('error', `rtm subscribe fail, ${error}`);\n log('rtm subscribe fail', {\n error: error.toString()\n }, 'error');\n }\n }\n async dispose() {\n this.rtmClient.removeEventListener('message', this.handleRtmMessage);\n this.rtmClient.removeEventListener('presence', this.handlePresence);\n // @ts-ignore\n this.rtmClient.removeEventListener('status', this.handleStatus);\n await this.rtmClient.unsubscribe(this.roomChannel());\n await this.rtmClient.unsubscribe(this.userChannel(this.userId));\n window.clearInterval(this.intervalId);\n }\n receiveChunkMessage(msg, publisher, isRoomChannel) {\n if (msg.length === 1) {\n this.emit('message', msg.buf, publisher, msg.customType, isRoomChannel);\n return;\n }\n const chunks = this.chunkedMessages.get(msg.session) || [];\n chunks.push(msg);\n if (chunks.length === msg.length) {\n const buffer = chunks.sort((a, b) => a.index - b.index).reduce((result, next) => {\n const buf = next.buf;\n const output = new Uint8Array(result.length + buf.length);\n output.set(result, 0);\n output.set(buf, result.length);\n return output;\n }, new Uint8Array());\n this.emit('message', buffer, publisher, msg.customType, isRoomChannel);\n this.chunkedMessages.delete(msg.session);\n } else {\n this.chunkedMessages.set(msg.session, chunks);\n }\n }\n publish(buf, customType) {\n let target = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n const session = uuidv4();\n // \u6D88\u606F\u5305\u4F53\u79EF, \u5355\u4F4D kb\n const size = buf.length * Uint8Array.BYTES_PER_ELEMENT / 1024;\n if (size < 16) {\n this.cachedMessages.push(ChunkedUpdateMessage.fromObject({\n buf: buf,\n length: 1,\n index: 0,\n session\n }, target, customType));\n } else {\n const chunkSize = 16 * 1024 / Uint8Array.BYTES_PER_ELEMENT;\n const len = Math.ceil(size / 16);\n let index = 0;\n while (index < len) {\n this.cachedMessages.push(ChunkedUpdateMessage.fromObject({\n buf: buf.slice(index * chunkSize, (index + 1) * chunkSize),\n length: len,\n index: index,\n session\n }, target, customType));\n index += 1;\n }\n }\n }\n async userList() {\n const output = new Set();\n const result = await this.rtmClient.presence.whoNow(this.roomChannel(), 'MESSAGE', {\n includedState: false\n });\n let nextPage = result.nextPage;\n result.occupants.forEach(userInfo => {\n const {\n userId\n } = userInfo;\n output.add(userId);\n });\n while (nextPage) {\n const result = await this.rtmClient.presence.whoNow(this.roomChannel(), 'MESSAGE', {\n includedState: false,\n page: nextPage\n });\n nextPage = result.nextPage;\n result.occupants.forEach(userInfo => {\n const {\n userId\n } = userInfo;\n output.add(userId);\n });\n }\n return output;\n }\n}"],
5
- "mappings": "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",
4
+ "sourcesContent": ["export { RTMProvider_2_1 } from './RTM_2_1';\nexport { RTMProvider_2_2 } from './RTM_2_2';", "function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { log } from '@netless/forge-room';\nimport EventEmitter from 'eventemitter3';\nimport { v4 as uuidv4 } from 'uuid';\nimport { cyrb53 } from './utils';\nimport { ChunkedUpdateMessage } from './ChunkedUpdateMessage';\nexport class RTMProvider_2_1 extends EventEmitter {\n get calibrationTimestamp() {\n return this.rtmTimestamp + this.deviation;\n }\n constructor(rtmClient) {\n super();\n _defineProperty(this, \"rtmClient\", void 0);\n _defineProperty(this, \"roomId\", void 0);\n _defineProperty(this, \"userId\", void 0);\n _defineProperty(this, \"reconnectTimeout\", null);\n _defineProperty(this, \"chunkedMessages\", new Map());\n _defineProperty(this, \"cachedMessages\", []);\n _defineProperty(this, \"intervalId\", null);\n _defineProperty(this, \"deviation\", 0);\n _defineProperty(this, \"rtmTimestamp\", 0);\n _defineProperty(this, \"animationStartTimestamp\", void 0);\n _defineProperty(this, \"animationId\", void 0);\n _defineProperty(this, \"handleRtmMessage\", evt => {\n try {\n const isRoomChannel = evt.channelName.indexOf('_u_') < 0;\n if (!(evt.message instanceof Uint8Array) || !this.isForgeRoomChannel(evt.channelName)) {\n log('rtm message not Uint8Array', {\n channel: evt.channelName,\n publisher: evt.publisher\n });\n return;\n }\n if (this.animationId) {\n cancelAnimationFrame(this.animationId);\n this.animationStartTimestamp = undefined;\n this.animationId = undefined;\n this.deviation = 0;\n }\n this.rtmTimestamp = evt.timestamp;\n this.animationId = requestAnimationFrame(this.calibrateAnimate);\n // console.log(\"rtm timestamp\", evt.timestamp, \"calibrationTimestamp\", this.calibrationTimestamp);\n this.receiveChunkMessage(ChunkedUpdateMessage.fromBuffer(evt.message, '', evt.customType), evt.publisher, isRoomChannel);\n } catch (error) {\n log('rtm handle message error', {\n error: error.toString()\n }, 'error');\n }\n });\n _defineProperty(this, \"calibrateAnimate\", timestamp => {\n if (this.animationStartTimestamp === undefined) {\n this.animationStartTimestamp = timestamp;\n }\n this.deviation = timestamp - this.animationStartTimestamp;\n if (this.animationId) {\n this.animationId = requestAnimationFrame(this.calibrateAnimate);\n }\n });\n _defineProperty(this, \"handleStatus\", connectionStatus => {\n log('rtm status update', {\n state: connectionStatus.state,\n reason: connectionStatus.reason\n });\n if (connectionStatus.state === 'RECONNECTING' && this.reconnectTimeout === null) {\n this.emit('connectionStatusChange', 'RECONNECTING');\n this.reconnectTimeout = window.setTimeout(() => {\n this.emit('error', 'reconnecting timeout');\n this.emit('connectionStatusChange', 'DISCONNECTED');\n }, 30 * 1000);\n } else if (connectionStatus.state === 'CONNECTED') {\n window.clearTimeout(this.reconnectTimeout);\n this.emit('connectionStatusChange', 'CONNECTED');\n } else if (connectionStatus.state === 'FAILED') {\n window.clearTimeout(this.reconnectTimeout);\n this.emit('error', `rtm connection failed, ${connectionStatus.reason}`);\n this.emit('connectionStatusChange', 'DISCONNECTED');\n } else if (connectionStatus.state === 'CONNECTING') {\n this.emit('connectionStatusChange', 'CONNECTING');\n }\n });\n _defineProperty(this, \"handlePresence\", evt => {\n if (evt.channelName === this.roomChannel()) {\n if (evt.eventType === 'REMOTE_JOIN') {\n this.emit('userJoin', evt.publisher);\n } else if (evt.eventType === 'REMOTE_LEAVE') {\n this.emit('userLeave', evt.publisher);\n } else if (evt.eventType === 'REMOTE_TIMEOUT') {\n this.emit('userLeave', evt.publisher);\n } else if (evt.eventType === 'INTERVAL') {\n // evt.interval.join.users\n }\n }\n });\n this.rtmClient = rtmClient;\n }\n roomChannel() {\n return `r_${this.roomId}`;\n }\n userChannel(userId) {\n if (userId.length > 16) {\n userId = `${cyrb53(userId)}`;\n }\n return `${this.roomChannel()}_u_${userId}`;\n }\n\n /**\n * \u91CD\u65B0\u8BA2\u9605\u9891\u9053\n */\n async resubscribe() {\n try {\n await this.rtmClient.subscribe(this.roomChannel());\n await this.rtmClient.subscribe(this.userChannel(this.userId));\n } catch (error) {\n this.emit('error', `rtm subscribe fail, ${error}`);\n log('rtm subscribe fail', {\n error: error.toString()\n }, 'error');\n }\n }\n async initialize(roomId, userId) {\n window.clearInterval(this.intervalId);\n this.roomId = roomId;\n this.userId = userId;\n this.rtmClient.addEventListener('message', this.handleRtmMessage);\n this.rtmClient.addEventListener('presence', this.handlePresence);\n // @ts-ignore\n this.rtmClient.addEventListener('status', this.handleStatus);\n try {\n await this.rtmClient.subscribe(this.roomChannel());\n await this.rtmClient.subscribe(this.userChannel(this.userId));\n } catch (error) {\n this.emit('error', `rtm subscribe fail, ${error}`);\n log('rtm subscribe fail', {\n error: error.toString()\n }, 'error');\n }\n this.intervalId = setInterval(() => {\n const msg = this.cachedMessages.shift();\n if (msg) {\n const channel = msg.target ? this.userChannel(msg.target) : this.roomChannel();\n this.rtmClient.publish(channel, msg.buffer, {\n customType: msg.customType\n }).catch(error => {\n log('rtm publish failed', {\n channel,\n code: error.code\n }, 'warning');\n this.emit('error', `rtm publish fail, ${error}`);\n });\n }\n }, 32);\n }\n async dispose() {\n this.rtmClient.removeEventListener('message', this.handleRtmMessage);\n this.rtmClient.removeEventListener('presence', this.handlePresence);\n // @ts-ignore\n this.rtmClient.removeEventListener('status', this.handleStatus);\n await this.rtmClient.unsubscribe(this.roomChannel());\n await this.rtmClient.unsubscribe(this.userChannel(this.userId));\n window.clearInterval(this.intervalId);\n }\n isForgeRoomChannel(channel) {\n return channel === this.roomChannel() || channel === this.userChannel(this.userId);\n }\n receiveChunkMessage(msg, publisher, isRoomChannel) {\n if (msg.length === 1) {\n this.emit('message', msg.buf, publisher, msg.customType, isRoomChannel);\n return;\n }\n const chunks = this.chunkedMessages.get(msg.session) || [];\n chunks.push(msg);\n if (chunks.length === msg.length) {\n const buffer = chunks.sort((a, b) => a.index - b.index).reduce((result, next) => {\n const buf = next.buf;\n const output = new Uint8Array(result.length + buf.length);\n output.set(result, 0);\n output.set(buf, result.length);\n return output;\n }, new Uint8Array());\n this.emit('message', buffer, publisher, msg.customType, isRoomChannel);\n this.chunkedMessages.delete(msg.session);\n } else {\n this.chunkedMessages.set(msg.session, chunks);\n }\n }\n publish(buf, customType) {\n let target = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n const session = uuidv4();\n // \u6D88\u606F\u5305\u4F53\u79EF, \u5355\u4F4D kb\n const size = buf.length * Uint8Array.BYTES_PER_ELEMENT / 1024;\n if (size < 16) {\n this.cachedMessages.push(ChunkedUpdateMessage.fromObject({\n buf: buf,\n length: 1,\n index: 0,\n session\n }, target, customType));\n } else {\n const chunkSize = 16 * 1024 / Uint8Array.BYTES_PER_ELEMENT;\n const len = Math.ceil(size / 16);\n let index = 0;\n while (index < len) {\n this.cachedMessages.push(ChunkedUpdateMessage.fromObject({\n buf: buf.slice(index * chunkSize, (index + 1) * chunkSize),\n length: len,\n index: index,\n session\n }, target, customType));\n index += 1;\n }\n }\n }\n async userList() {\n const output = new Set();\n const result = await this.rtmClient.presence.whoNow(this.roomChannel(), 'MESSAGE', {\n includedState: false\n });\n let nextPage = result.nextPage;\n result.occupants.forEach(userInfo => {\n const {\n userId\n } = userInfo;\n output.add(userId);\n });\n while (nextPage) {\n const result = await this.rtmClient.presence.whoNow(this.roomChannel(), 'MESSAGE', {\n includedState: false,\n page: nextPage\n });\n nextPage = result.nextPage;\n result.occupants.forEach(userInfo => {\n const {\n userId\n } = userInfo;\n output.add(userId);\n });\n }\n return output;\n }\n}", "export const cyrb53 = function (str) {\n let seed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n let h1 = 0xdeadbeef ^ seed,\n h2 = 0x41c6ce57 ^ seed;\n for (let i = 0, ch; i < str.length; i++) {\n ch = str.charCodeAt(i);\n h1 = Math.imul(h1 ^ ch, 2654435761);\n h2 = Math.imul(h2 ^ ch, 1597334677);\n }\n h1 = Math.imul(h1 ^ h1 >>> 16, 2246822507);\n h1 ^= Math.imul(h2 ^ h2 >>> 13, 3266489909);\n h2 = Math.imul(h2 ^ h2 >>> 16, 2246822507);\n h2 ^= Math.imul(h1 ^ h1 >>> 13, 3266489909);\n return 4294967296 * (2097151 & h2) + (h1 >>> 0);\n};", "function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nexport class ChunkedUpdateMessage {\n static fromObject(obj, target, customType) {\n const msg = new ChunkedUpdateMessage();\n msg.target = target;\n msg.customType = customType;\n const encoder = new TextEncoder();\n const sessionBuf = encoder.encode(obj.session);\n\n // header \u6309\u987A\u5E8F\u6307\u793A buf, session, target, customType \u90E8\u5206\u7684 uint8 \u957F\u5EA6\n msg.header = new DataView(new Uint8Array(10).buffer);\n msg.header.setUint32(0, obj.buf.length, false);\n msg.header.setUint32(4, sessionBuf.length, false);\n msg.header.setUint8(8, obj.index);\n msg.header.setUint8(9, obj.length);\n msg.buffer = new Uint8Array(obj.buf.length + sessionBuf.length + msg.header.buffer.byteLength);\n let len = 0;\n msg.buffer.set(new Uint8Array(msg.header.buffer), len);\n len += msg.header.buffer.byteLength;\n msg.buffer.set(obj.buf, len);\n len += obj.buf.length;\n msg.buffer.set(sessionBuf, len);\n return msg;\n }\n static fromBuffer(buf, target, customType) {\n const msg = new ChunkedUpdateMessage();\n msg.header = new DataView(buf.slice(0, 10).buffer);\n msg.buffer = buf.slice(10);\n msg.target = target;\n msg.customType = customType;\n return msg;\n }\n get buf() {\n const len = this.header.getInt32(0);\n return this.buffer.slice(0, len);\n }\n get index() {\n return this.header.getUint8(8);\n }\n get length() {\n return this.header.getUint8(9);\n }\n get session() {\n const start = this.header.getInt32(0);\n const sessionBuf = this.buffer.slice(start, start + this.header.getInt32(4));\n const textDecoder = new TextDecoder();\n return textDecoder.decode(sessionBuf);\n }\n constructor() {\n _defineProperty(this, \"target\", void 0);\n _defineProperty(this, \"customType\", void 0);\n _defineProperty(this, \"buffer\", void 0);\n _defineProperty(this, \"header\", void 0);\n }\n}", "function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { log } from '@netless/forge-room';\nimport EventEmitter from 'eventemitter3';\nimport { v4 as uuidv4 } from 'uuid';\nimport { cyrb53 } from './utils';\nimport { ChunkedUpdateMessage } from './ChunkedUpdateMessage';\nexport class RTMProvider_2_2 extends EventEmitter {\n get calibrationTimestamp() {\n return this.rtmTimestamp + this.deviation;\n }\n constructor(rtmClient) {\n super();\n _defineProperty(this, \"rtmClient\", void 0);\n _defineProperty(this, \"roomId\", void 0);\n _defineProperty(this, \"userId\", void 0);\n _defineProperty(this, \"reconnectTimeout\", null);\n _defineProperty(this, \"chunkedMessages\", new Map());\n _defineProperty(this, \"cachedMessages\", []);\n _defineProperty(this, \"intervalId\", null);\n _defineProperty(this, \"deviation\", 0);\n _defineProperty(this, \"rtmTimestamp\", 0);\n _defineProperty(this, \"animationStartTimestamp\", void 0);\n _defineProperty(this, \"animationId\", void 0);\n _defineProperty(this, \"handleRtmMessage\", evt => {\n try {\n const isRoomChannel = evt.channelName.indexOf('_u_') >= 0;\n if (!(evt.message instanceof Uint8Array) || !this.isForgeRoomChannel(evt.channelName)) {\n log('rtm message not Uint8Array', {\n channel: evt.channelName,\n publisher: evt.publisher\n });\n return;\n }\n if (this.animationId) {\n cancelAnimationFrame(this.animationId);\n this.animationStartTimestamp = undefined;\n this.animationId = undefined;\n this.deviation = 0;\n }\n this.rtmTimestamp = evt.timestamp;\n this.animationId = requestAnimationFrame(this.calibrateAnimate);\n this.receiveChunkMessage(ChunkedUpdateMessage.fromBuffer(evt.message, '', evt.customType), evt.publisher, isRoomChannel);\n } catch (e) {\n log('rtm handle message error', {\n error: e.toString()\n }, 'error');\n }\n });\n _defineProperty(this, \"calibrateAnimate\", timestamp => {\n if (this.animationStartTimestamp === undefined) {\n this.animationStartTimestamp = timestamp;\n }\n this.deviation = timestamp - this.animationStartTimestamp;\n if (this.animationId) {\n this.animationId = requestAnimationFrame(this.calibrateAnimate);\n }\n });\n _defineProperty(this, \"handleStatus\", connectionStatus => {\n log('rtm status update', {\n state: connectionStatus.state,\n reason: connectionStatus.reason,\n rtm: '2.2'\n });\n if (connectionStatus.state === 'RECONNECTING' && this.reconnectTimeout === null) {\n this.emit('connectionStatusChange', 'RECONNECTING');\n this.reconnectTimeout = window.setTimeout(() => {\n this.emit('error', 'reconnecting timeout');\n this.emit('connectionStatusChange', 'DISCONNECTED');\n }, 30 * 1000);\n } else if (connectionStatus.state === 'CONNECTED') {\n window.clearTimeout(this.reconnectTimeout);\n this.emit('connectionStatusChange', 'CONNECTED');\n } else if (connectionStatus.state === 'FAILED') {\n window.clearTimeout(this.reconnectTimeout);\n this.emit('error', `rtm connection failed, ${connectionStatus.reason}`);\n this.emit('connectionStatusChange', 'DISCONNECTED');\n } else if (connectionStatus.state === 'CONNECTING') {\n this.emit('connectionStatusChange', 'CONNECTING');\n }\n });\n _defineProperty(this, \"handlePresence\", evt => {\n if (evt.channelName === this.roomChannel()) {\n if (evt.eventType === 'REMOTE_JOIN') {\n this.emit('userJoin', evt.publisher);\n } else if (evt.eventType === 'REMOTE_LEAVE') {\n this.emit('userLeave', evt.publisher);\n } else if (evt.eventType === 'REMOTE_TIMEOUT') {\n this.emit('userLeave', evt.publisher);\n } else if (evt.eventType === 'INTERVAL') {\n // evt.interval.join.users\n }\n }\n });\n this.rtmClient = rtmClient;\n }\n roomChannel() {\n return `r_${this.roomId}`;\n }\n userChannel(userId) {\n if (userId.length > 16) {\n userId = `${cyrb53(userId)}`;\n }\n return `${this.roomChannel()}_u_${userId}`;\n }\n async initialize(roomId, userId) {\n window.clearInterval(this.intervalId);\n this.roomId = roomId;\n this.userId = userId;\n this.rtmClient.addEventListener('message', this.handleRtmMessage);\n this.rtmClient.addEventListener('presence', this.handlePresence);\n // @ts-ignore\n this.rtmClient.addEventListener('status', this.handleStatus);\n try {\n await this.rtmClient.subscribe(this.roomChannel());\n await this.rtmClient.subscribe(this.userChannel(this.userId));\n } catch (error) {\n this.emit('error', `rtm subscribe fail, ${error}`);\n log('rtm subscribe fail', {\n error: error.toString(),\n rtm: '2.2'\n }, 'error');\n }\n this.intervalId = setInterval(() => {\n const msg = this.cachedMessages.shift();\n if (msg) {\n const channel = msg.target ? this.userChannel(msg.target) : this.roomChannel();\n this.rtmClient.publish(channel, msg.buffer, {\n customType: msg.customType\n }).catch(error => {\n log('rtm publish failed', {\n channel,\n code: error.code,\n rtm: '2.2'\n }, 'warning');\n this.emit('error', `rtm publish fail, ${error}`);\n });\n }\n }, 32);\n }\n\n /**\n * \u91CD\u65B0\u8BA2\u9605\u9891\u9053\n */\n async resubscribe() {\n try {\n await this.rtmClient.subscribe(this.roomChannel());\n await this.rtmClient.subscribe(this.userChannel(this.userId));\n } catch (error) {\n this.emit('error', `rtm subscribe fail, ${error}`);\n log('rtm subscribe fail', {\n error: error.toString()\n }, 'error');\n }\n }\n async dispose() {\n this.rtmClient.removeEventListener('message', this.handleRtmMessage);\n this.rtmClient.removeEventListener('presence', this.handlePresence);\n // @ts-ignore\n this.rtmClient.removeEventListener('status', this.handleStatus);\n await this.rtmClient.unsubscribe(this.roomChannel());\n await this.rtmClient.unsubscribe(this.userChannel(this.userId));\n window.clearInterval(this.intervalId);\n }\n isForgeRoomChannel(channel) {\n return channel === this.roomChannel() || channel === this.userChannel(this.userId);\n }\n receiveChunkMessage(msg, publisher, isRoomChannel) {\n if (msg.length === 1) {\n this.emit('message', msg.buf, publisher, msg.customType, isRoomChannel);\n return;\n }\n const chunks = this.chunkedMessages.get(msg.session) || [];\n chunks.push(msg);\n if (chunks.length === msg.length) {\n const buffer = chunks.sort((a, b) => a.index - b.index).reduce((result, next) => {\n const buf = next.buf;\n const output = new Uint8Array(result.length + buf.length);\n output.set(result, 0);\n output.set(buf, result.length);\n return output;\n }, new Uint8Array());\n this.emit('message', buffer, publisher, msg.customType, isRoomChannel);\n this.chunkedMessages.delete(msg.session);\n } else {\n this.chunkedMessages.set(msg.session, chunks);\n }\n }\n publish(buf, customType) {\n let target = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n const session = uuidv4();\n // \u6D88\u606F\u5305\u4F53\u79EF, \u5355\u4F4D kb\n const size = buf.length * Uint8Array.BYTES_PER_ELEMENT / 1024;\n if (size < 16) {\n this.cachedMessages.push(ChunkedUpdateMessage.fromObject({\n buf: buf,\n length: 1,\n index: 0,\n session\n }, target, customType));\n } else {\n const chunkSize = 16 * 1024 / Uint8Array.BYTES_PER_ELEMENT;\n const len = Math.ceil(size / 16);\n let index = 0;\n while (index < len) {\n this.cachedMessages.push(ChunkedUpdateMessage.fromObject({\n buf: buf.slice(index * chunkSize, (index + 1) * chunkSize),\n length: len,\n index: index,\n session\n }, target, customType));\n index += 1;\n }\n }\n }\n async userList() {\n const output = new Set();\n const result = await this.rtmClient.presence.whoNow(this.roomChannel(), 'MESSAGE', {\n includedState: false\n });\n let nextPage = result.nextPage;\n result.occupants.forEach(userInfo => {\n const {\n userId\n } = userInfo;\n output.add(userId);\n });\n while (nextPage) {\n const result = await this.rtmClient.presence.whoNow(this.roomChannel(), 'MESSAGE', {\n includedState: false,\n page: nextPage\n });\n nextPage = result.nextPage;\n result.occupants.forEach(userInfo => {\n const {\n userId\n } = userInfo;\n output.add(userId);\n });\n }\n return output;\n }\n}"],
5
+ "mappings": "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",
6
6
  "names": ["_defineProperty", "_toPropertyKey", "_toPrimitive", "EventEmitter", "uuidv4", "result", "import_forge_room", "import_eventemitter3", "import_uuid", "_defineProperty", "_toPropertyKey", "_toPrimitive", "EventEmitter", "uuidv4", "result"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@netless/forge-rtm",
3
- "version": "0.1.11",
3
+ "version": "0.1.12",
4
4
  "description": "",
5
5
  "main": "dist/rtm-provider.js",
6
6
  "module": "dist/rtm-provider.esm.js",
@@ -11,7 +11,7 @@
11
11
  "js-base64": "^3.7.7",
12
12
  "eventemitter3": "^5.0.1",
13
13
  "uuid": "^9.0.1",
14
- "@netless/forge-room": "0.1.10"
14
+ "@netless/forge-room": "0.1.12-alpha.0"
15
15
  },
16
16
  "keywords": [],
17
17
  "author": "",