@netless/forge-rtm 0.1.10 → 0.1.12-alpha.1
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/ChunkedUpdateMessage.d.ts.map +1 -1
- package/dist/RTM_2_1.d.ts +12 -5
- package/dist/RTM_2_1.d.ts.map +1 -1
- package/dist/RTM_2_2.d.ts +12 -5
- package/dist/RTM_2_2.d.ts.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/rtm-provider.esm.js +115 -44
- package/dist/rtm-provider.esm.js.map +2 -2
- package/dist/rtm-provider.js +115 -44
- package/dist/rtm-provider.js.map +2 -2
- package/package.json +4 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChunkedUpdateMessage.d.ts","sourceRoot":"","sources":["../src/ChunkedUpdateMessage.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,wBAAwB,GAAG;IACnC,GAAG,EAAE,UAAU,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACnB,CAAA;AAED,qBAAa,oBAAoB;
|
|
1
|
+
{"version":3,"file":"ChunkedUpdateMessage.d.ts","sourceRoot":"","sources":["../src/ChunkedUpdateMessage.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,wBAAwB,GAAG;IACnC,GAAG,EAAE,UAAU,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACnB,CAAA;AAED,qBAAa,oBAAoB;IAE/B,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,wBAAwB,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,oBAAoB;IA8B1G,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAW9D,MAAM,EAAG,MAAM,CAAC;IAChB,UAAU,EAAG,MAAM,CAAC;IACpB,MAAM,EAAG,UAAU,CAAC;IAC3B,OAAO,CAAC,MAAM,CAAY;IAE1B,IAAW,GAAG,IAAI,UAAU,CAG3B;IAED,IAAW,KAAK,IAAI,MAAM,CAEzB;IAED,IAAW,MAAM,IAAI,MAAM,CAE1B;IAED,IAAW,OAAO,IAAI,MAAM,CAK3B;IAED,OAAO;CACR"}
|
package/dist/RTM_2_1.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { SocketProvider, SocketProviderEvent } from
|
|
2
|
-
import EventEmitter from
|
|
3
|
-
import type { RTMClient } from
|
|
1
|
+
import { SocketProvider, SocketProviderEvent } from '@netless/forge-room';
|
|
2
|
+
import EventEmitter from 'eventemitter3';
|
|
3
|
+
import type { RTMClient } from 'agora-rtm';
|
|
4
4
|
export declare class RTMProvider_2_1 extends EventEmitter<SocketProviderEvent> implements SocketProvider {
|
|
5
5
|
private rtmClient;
|
|
6
6
|
private roomId;
|
|
@@ -9,16 +9,23 @@ export declare class RTMProvider_2_1 extends EventEmitter<SocketProviderEvent> i
|
|
|
9
9
|
private chunkedMessages;
|
|
10
10
|
private cachedMessages;
|
|
11
11
|
private intervalId;
|
|
12
|
+
private deviation;
|
|
13
|
+
private rtmTimestamp;
|
|
14
|
+
private animationStartTimestamp?;
|
|
15
|
+
private animationId?;
|
|
16
|
+
get calibrationTimestamp(): number;
|
|
12
17
|
constructor(rtmClient: RTMClient);
|
|
13
18
|
private roomChannel;
|
|
14
19
|
private userChannel;
|
|
15
20
|
/**
|
|
16
|
-
|
|
17
|
-
|
|
21
|
+
* 重新订阅频道
|
|
22
|
+
*/
|
|
18
23
|
resubscribe(): Promise<void>;
|
|
19
24
|
initialize(roomId: string, userId: string): Promise<void>;
|
|
20
25
|
dispose(): Promise<void>;
|
|
26
|
+
private isForgeRoomChannel;
|
|
21
27
|
private handleRtmMessage;
|
|
28
|
+
private calibrateAnimate;
|
|
22
29
|
private handleStatus;
|
|
23
30
|
private handlePresence;
|
|
24
31
|
private receiveChunkMessage;
|
package/dist/RTM_2_1.d.ts.map
CHANGED
|
@@ -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,
|
|
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;IA4B1D,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;CAuB9C"}
|
package/dist/RTM_2_2.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { SocketProvider, SocketProviderEvent } from
|
|
2
|
-
import EventEmitter from
|
|
3
|
-
import type { RTMClient } from
|
|
1
|
+
import { SocketProvider, SocketProviderEvent } from '@netless/forge-room';
|
|
2
|
+
import EventEmitter from 'eventemitter3';
|
|
3
|
+
import type { RTMClient } from 'agora-rtm';
|
|
4
4
|
export declare class RTMProvider_2_2 extends EventEmitter<SocketProviderEvent> implements SocketProvider {
|
|
5
5
|
private rtmClient;
|
|
6
6
|
private roomId;
|
|
@@ -9,16 +9,23 @@ export declare class RTMProvider_2_2 extends EventEmitter<SocketProviderEvent> i
|
|
|
9
9
|
private chunkedMessages;
|
|
10
10
|
private cachedMessages;
|
|
11
11
|
private intervalId;
|
|
12
|
+
private deviation;
|
|
13
|
+
private rtmTimestamp;
|
|
14
|
+
private animationStartTimestamp?;
|
|
15
|
+
private animationId?;
|
|
16
|
+
get calibrationTimestamp(): number;
|
|
12
17
|
constructor(rtmClient: RTMClient);
|
|
13
18
|
private roomChannel;
|
|
14
19
|
private userChannel;
|
|
15
20
|
initialize(roomId: string, userId: string): Promise<void>;
|
|
16
21
|
/**
|
|
17
|
-
|
|
18
|
-
|
|
22
|
+
* 重新订阅频道
|
|
23
|
+
*/
|
|
19
24
|
resubscribe(): Promise<void>;
|
|
20
25
|
dispose(): Promise<void>;
|
|
26
|
+
private isForgeRoomChannel;
|
|
21
27
|
private handleRtmMessage;
|
|
28
|
+
private calibrateAnimate;
|
|
22
29
|
private handleStatus;
|
|
23
30
|
private handlePresence;
|
|
24
31
|
private receiveChunkMessage;
|
package/dist/RTM_2_2.d.ts.map
CHANGED
|
@@ -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,
|
|
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,CAyBtB;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;IA4B1D,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;CAuB9C"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { RTMProvider_2_1 } from
|
|
2
|
-
export { RTMProvider_2_2 } from
|
|
1
|
+
export { RTMProvider_2_1 } from './RTM_2_1';
|
|
2
|
+
export { RTMProvider_2_2 } from './RTM_2_2';
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/rtm-provider.esm.js
CHANGED
|
@@ -109,6 +109,9 @@ function _toPrimitive2(t, r) {
|
|
|
109
109
|
return ("string" === r ? String : Number)(t);
|
|
110
110
|
}
|
|
111
111
|
var RTMProvider_2_1 = class extends EventEmitter {
|
|
112
|
+
get calibrationTimestamp() {
|
|
113
|
+
return this.rtmTimestamp + this.deviation;
|
|
114
|
+
}
|
|
112
115
|
constructor(rtmClient) {
|
|
113
116
|
super();
|
|
114
117
|
_defineProperty2(this, "rtmClient", void 0);
|
|
@@ -118,25 +121,53 @@ var RTMProvider_2_1 = class extends EventEmitter {
|
|
|
118
121
|
_defineProperty2(this, "chunkedMessages", /* @__PURE__ */ new Map());
|
|
119
122
|
_defineProperty2(this, "cachedMessages", []);
|
|
120
123
|
_defineProperty2(this, "intervalId", null);
|
|
124
|
+
_defineProperty2(this, "deviation", 0);
|
|
125
|
+
_defineProperty2(this, "rtmTimestamp", 0);
|
|
126
|
+
_defineProperty2(this, "animationStartTimestamp", void 0);
|
|
127
|
+
_defineProperty2(this, "animationId", void 0);
|
|
121
128
|
_defineProperty2(this, "handleRtmMessage", (evt) => {
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
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 || Date.now();
|
|
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");
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
_defineProperty2(this, "calibrateAnimate", (timestamp) => {
|
|
154
|
+
if (this.animationStartTimestamp === void 0) {
|
|
155
|
+
this.animationStartTimestamp = timestamp;
|
|
156
|
+
}
|
|
157
|
+
this.deviation = timestamp - this.animationStartTimestamp;
|
|
158
|
+
if (this.animationId) {
|
|
159
|
+
this.animationId = requestAnimationFrame(this.calibrateAnimate);
|
|
129
160
|
}
|
|
130
|
-
this.receiveChunkMessage(ChunkedUpdateMessage.fromBuffer(evt.message, "", evt.customType), evt.publisher);
|
|
131
161
|
});
|
|
132
162
|
_defineProperty2(this, "handleStatus", (connectionStatus) => {
|
|
133
|
-
log(
|
|
163
|
+
log("rtm status update", {
|
|
134
164
|
state: connectionStatus.state,
|
|
135
165
|
reason: connectionStatus.reason
|
|
136
166
|
});
|
|
137
167
|
if (connectionStatus.state === "RECONNECTING" && this.reconnectTimeout === null) {
|
|
168
|
+
this.emit("connectionStatusChange", "RECONNECTING");
|
|
138
169
|
this.reconnectTimeout = window.setTimeout(() => {
|
|
139
|
-
this.emit("error",
|
|
170
|
+
this.emit("error", "reconnecting timeout");
|
|
140
171
|
this.emit("connectionStatusChange", "DISCONNECTED");
|
|
141
172
|
}, 30 * 1e3);
|
|
142
173
|
} else if (connectionStatus.state === "CONNECTED") {
|
|
@@ -174,15 +205,15 @@ var RTMProvider_2_1 = class extends EventEmitter {
|
|
|
174
205
|
return `${this.roomChannel()}_u_${userId}`;
|
|
175
206
|
}
|
|
176
207
|
/**
|
|
177
|
-
|
|
178
|
-
|
|
208
|
+
* 重新订阅频道
|
|
209
|
+
*/
|
|
179
210
|
async resubscribe() {
|
|
180
211
|
try {
|
|
181
212
|
await this.rtmClient.subscribe(this.roomChannel());
|
|
182
213
|
await this.rtmClient.subscribe(this.userChannel(this.userId));
|
|
183
214
|
} catch (error) {
|
|
184
215
|
this.emit("error", `rtm subscribe fail, ${error}`);
|
|
185
|
-
log(
|
|
216
|
+
log("rtm subscribe fail", {
|
|
186
217
|
error: error.toString()
|
|
187
218
|
}, "error");
|
|
188
219
|
}
|
|
@@ -199,7 +230,7 @@ var RTMProvider_2_1 = class extends EventEmitter {
|
|
|
199
230
|
await this.rtmClient.subscribe(this.userChannel(this.userId));
|
|
200
231
|
} catch (error) {
|
|
201
232
|
this.emit("error", `rtm subscribe fail, ${error}`);
|
|
202
|
-
log(
|
|
233
|
+
log("rtm subscribe fail", {
|
|
203
234
|
error: error.toString()
|
|
204
235
|
}, "error");
|
|
205
236
|
}
|
|
@@ -210,7 +241,7 @@ var RTMProvider_2_1 = class extends EventEmitter {
|
|
|
210
241
|
this.rtmClient.publish(channel, msg.buffer, {
|
|
211
242
|
customType: msg.customType
|
|
212
243
|
}).catch((error) => {
|
|
213
|
-
log(
|
|
244
|
+
log("rtm publish failed", {
|
|
214
245
|
channel,
|
|
215
246
|
code: error.code
|
|
216
247
|
}, "warning");
|
|
@@ -227,9 +258,12 @@ var RTMProvider_2_1 = class extends EventEmitter {
|
|
|
227
258
|
await this.rtmClient.unsubscribe(this.userChannel(this.userId));
|
|
228
259
|
window.clearInterval(this.intervalId);
|
|
229
260
|
}
|
|
230
|
-
|
|
261
|
+
isForgeRoomChannel(channel) {
|
|
262
|
+
return channel === this.roomChannel() || channel === this.userChannel(this.userId);
|
|
263
|
+
}
|
|
264
|
+
receiveChunkMessage(msg, publisher, isRoomChannel) {
|
|
231
265
|
if (msg.length === 1) {
|
|
232
|
-
this.emit("message", msg.buf, publisher, msg.customType);
|
|
266
|
+
this.emit("message", msg.buf, publisher, msg.customType, isRoomChannel);
|
|
233
267
|
return;
|
|
234
268
|
}
|
|
235
269
|
const chunks = this.chunkedMessages.get(msg.session) || [];
|
|
@@ -242,7 +276,7 @@ var RTMProvider_2_1 = class extends EventEmitter {
|
|
|
242
276
|
output.set(buf, result.length);
|
|
243
277
|
return output;
|
|
244
278
|
}, new Uint8Array());
|
|
245
|
-
this.emit("message", buffer, publisher, msg.customType);
|
|
279
|
+
this.emit("message", buffer, publisher, msg.customType, isRoomChannel);
|
|
246
280
|
this.chunkedMessages.delete(msg.session);
|
|
247
281
|
} else {
|
|
248
282
|
this.chunkedMessages.set(msg.session, chunks);
|
|
@@ -250,9 +284,10 @@ var RTMProvider_2_1 = class extends EventEmitter {
|
|
|
250
284
|
}
|
|
251
285
|
publish(buf, customType) {
|
|
252
286
|
let target = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : "";
|
|
287
|
+
const chunkStep = 24;
|
|
253
288
|
const session = uuidv4();
|
|
254
289
|
const size = buf.length * Uint8Array.BYTES_PER_ELEMENT / 1024;
|
|
255
|
-
if (size <
|
|
290
|
+
if (size < chunkStep) {
|
|
256
291
|
this.cachedMessages.push(ChunkedUpdateMessage.fromObject({
|
|
257
292
|
buf,
|
|
258
293
|
length: 1,
|
|
@@ -260,8 +295,8 @@ var RTMProvider_2_1 = class extends EventEmitter {
|
|
|
260
295
|
session
|
|
261
296
|
}, target, customType));
|
|
262
297
|
} else {
|
|
263
|
-
const chunkSize =
|
|
264
|
-
|
|
298
|
+
const chunkSize = chunkStep * 1024 / Uint8Array.BYTES_PER_ELEMENT;
|
|
299
|
+
const len = Math.ceil(size / chunkStep);
|
|
265
300
|
let index = 0;
|
|
266
301
|
while (index < len) {
|
|
267
302
|
this.cachedMessages.push(ChunkedUpdateMessage.fromObject({
|
|
@@ -279,7 +314,7 @@ var RTMProvider_2_1 = class extends EventEmitter {
|
|
|
279
314
|
const result = await this.rtmClient.presence.whoNow(this.roomChannel(), "MESSAGE", {
|
|
280
315
|
includedState: false
|
|
281
316
|
});
|
|
282
|
-
|
|
317
|
+
let nextPage = result.nextPage;
|
|
283
318
|
result.occupants.forEach((userInfo) => {
|
|
284
319
|
const {
|
|
285
320
|
userId
|
|
@@ -325,6 +360,9 @@ function _toPrimitive3(t, r) {
|
|
|
325
360
|
return ("string" === r ? String : Number)(t);
|
|
326
361
|
}
|
|
327
362
|
var RTMProvider_2_2 = class extends EventEmitter2 {
|
|
363
|
+
get calibrationTimestamp() {
|
|
364
|
+
return this.rtmTimestamp + this.deviation;
|
|
365
|
+
}
|
|
328
366
|
constructor(rtmClient) {
|
|
329
367
|
super();
|
|
330
368
|
_defineProperty3(this, "rtmClient", void 0);
|
|
@@ -334,26 +372,55 @@ var RTMProvider_2_2 = class extends EventEmitter2 {
|
|
|
334
372
|
_defineProperty3(this, "chunkedMessages", /* @__PURE__ */ new Map());
|
|
335
373
|
_defineProperty3(this, "cachedMessages", []);
|
|
336
374
|
_defineProperty3(this, "intervalId", null);
|
|
375
|
+
_defineProperty3(this, "deviation", 0);
|
|
376
|
+
_defineProperty3(this, "rtmTimestamp", 0);
|
|
377
|
+
_defineProperty3(this, "animationStartTimestamp", void 0);
|
|
378
|
+
_defineProperty3(this, "animationId", void 0);
|
|
337
379
|
_defineProperty3(this, "handleRtmMessage", (evt) => {
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
380
|
+
try {
|
|
381
|
+
const isRoomChannel = evt.channelName.indexOf("_u_") < 0;
|
|
382
|
+
if (!(evt.message instanceof Uint8Array) || !this.isForgeRoomChannel(evt.channelName)) {
|
|
383
|
+
log2("rtm message not Uint8Array", {
|
|
384
|
+
channel: evt.channelName,
|
|
385
|
+
publisher: evt.publisher
|
|
386
|
+
});
|
|
387
|
+
return;
|
|
388
|
+
}
|
|
389
|
+
if (this.animationId) {
|
|
390
|
+
cancelAnimationFrame(this.animationId);
|
|
391
|
+
this.animationStartTimestamp = void 0;
|
|
392
|
+
this.animationId = void 0;
|
|
393
|
+
this.deviation = 0;
|
|
394
|
+
}
|
|
395
|
+
this.rtmTimestamp = evt.timestamp || Date.now();
|
|
396
|
+
this.animationId = requestAnimationFrame(this.calibrateAnimate);
|
|
397
|
+
this.receiveChunkMessage(ChunkedUpdateMessage.fromBuffer(evt.message, "", evt.customType), evt.publisher, isRoomChannel);
|
|
398
|
+
} catch (e) {
|
|
399
|
+
log2("rtm handle message error", {
|
|
400
|
+
error: e.toString()
|
|
401
|
+
}, "error");
|
|
402
|
+
console.error(e);
|
|
403
|
+
}
|
|
404
|
+
});
|
|
405
|
+
_defineProperty3(this, "calibrateAnimate", (timestamp) => {
|
|
406
|
+
if (this.animationStartTimestamp === void 0) {
|
|
407
|
+
this.animationStartTimestamp = timestamp;
|
|
408
|
+
}
|
|
409
|
+
this.deviation = timestamp - this.animationStartTimestamp;
|
|
410
|
+
if (this.animationId) {
|
|
411
|
+
this.animationId = requestAnimationFrame(this.calibrateAnimate);
|
|
345
412
|
}
|
|
346
|
-
this.receiveChunkMessage(ChunkedUpdateMessage.fromBuffer(evt.message, "", evt.customType), evt.publisher);
|
|
347
413
|
});
|
|
348
414
|
_defineProperty3(this, "handleStatus", (connectionStatus) => {
|
|
349
|
-
log2(
|
|
415
|
+
log2("rtm status update", {
|
|
350
416
|
state: connectionStatus.state,
|
|
351
417
|
reason: connectionStatus.reason,
|
|
352
418
|
rtm: "2.2"
|
|
353
419
|
});
|
|
354
420
|
if (connectionStatus.state === "RECONNECTING" && this.reconnectTimeout === null) {
|
|
421
|
+
this.emit("connectionStatusChange", "RECONNECTING");
|
|
355
422
|
this.reconnectTimeout = window.setTimeout(() => {
|
|
356
|
-
this.emit("error",
|
|
423
|
+
this.emit("error", "reconnecting timeout");
|
|
357
424
|
this.emit("connectionStatusChange", "DISCONNECTED");
|
|
358
425
|
}, 30 * 1e3);
|
|
359
426
|
} else if (connectionStatus.state === "CONNECTED") {
|
|
@@ -402,7 +469,7 @@ var RTMProvider_2_2 = class extends EventEmitter2 {
|
|
|
402
469
|
await this.rtmClient.subscribe(this.userChannel(this.userId));
|
|
403
470
|
} catch (error) {
|
|
404
471
|
this.emit("error", `rtm subscribe fail, ${error}`);
|
|
405
|
-
log2(
|
|
472
|
+
log2("rtm subscribe fail", {
|
|
406
473
|
error: error.toString(),
|
|
407
474
|
rtm: "2.2"
|
|
408
475
|
}, "error");
|
|
@@ -414,7 +481,7 @@ var RTMProvider_2_2 = class extends EventEmitter2 {
|
|
|
414
481
|
this.rtmClient.publish(channel, msg.buffer, {
|
|
415
482
|
customType: msg.customType
|
|
416
483
|
}).catch((error) => {
|
|
417
|
-
log2(
|
|
484
|
+
log2("rtm publish failed", {
|
|
418
485
|
channel,
|
|
419
486
|
code: error.code,
|
|
420
487
|
rtm: "2.2"
|
|
@@ -425,15 +492,15 @@ var RTMProvider_2_2 = class extends EventEmitter2 {
|
|
|
425
492
|
}, 32);
|
|
426
493
|
}
|
|
427
494
|
/**
|
|
428
|
-
|
|
429
|
-
|
|
495
|
+
* 重新订阅频道
|
|
496
|
+
*/
|
|
430
497
|
async resubscribe() {
|
|
431
498
|
try {
|
|
432
499
|
await this.rtmClient.subscribe(this.roomChannel());
|
|
433
500
|
await this.rtmClient.subscribe(this.userChannel(this.userId));
|
|
434
501
|
} catch (error) {
|
|
435
502
|
this.emit("error", `rtm subscribe fail, ${error}`);
|
|
436
|
-
log2(
|
|
503
|
+
log2("rtm subscribe fail", {
|
|
437
504
|
error: error.toString()
|
|
438
505
|
}, "error");
|
|
439
506
|
}
|
|
@@ -446,9 +513,12 @@ var RTMProvider_2_2 = class extends EventEmitter2 {
|
|
|
446
513
|
await this.rtmClient.unsubscribe(this.userChannel(this.userId));
|
|
447
514
|
window.clearInterval(this.intervalId);
|
|
448
515
|
}
|
|
449
|
-
|
|
516
|
+
isForgeRoomChannel(channel) {
|
|
517
|
+
return channel === this.roomChannel() || channel === this.userChannel(this.userId);
|
|
518
|
+
}
|
|
519
|
+
receiveChunkMessage(msg, publisher, isRoomChannel) {
|
|
450
520
|
if (msg.length === 1) {
|
|
451
|
-
this.emit("message", msg.buf, publisher, msg.customType);
|
|
521
|
+
this.emit("message", msg.buf, publisher, msg.customType, isRoomChannel);
|
|
452
522
|
return;
|
|
453
523
|
}
|
|
454
524
|
const chunks = this.chunkedMessages.get(msg.session) || [];
|
|
@@ -461,7 +531,7 @@ var RTMProvider_2_2 = class extends EventEmitter2 {
|
|
|
461
531
|
output.set(buf, result.length);
|
|
462
532
|
return output;
|
|
463
533
|
}, new Uint8Array());
|
|
464
|
-
this.emit("message", buffer, publisher, msg.customType);
|
|
534
|
+
this.emit("message", buffer, publisher, msg.customType, isRoomChannel);
|
|
465
535
|
this.chunkedMessages.delete(msg.session);
|
|
466
536
|
} else {
|
|
467
537
|
this.chunkedMessages.set(msg.session, chunks);
|
|
@@ -469,9 +539,10 @@ var RTMProvider_2_2 = class extends EventEmitter2 {
|
|
|
469
539
|
}
|
|
470
540
|
publish(buf, customType) {
|
|
471
541
|
let target = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : "";
|
|
542
|
+
const chunkStep = 24;
|
|
472
543
|
const session = uuidv42();
|
|
473
544
|
const size = buf.length * Uint8Array.BYTES_PER_ELEMENT / 1024;
|
|
474
|
-
if (size <
|
|
545
|
+
if (size < chunkStep) {
|
|
475
546
|
this.cachedMessages.push(ChunkedUpdateMessage.fromObject({
|
|
476
547
|
buf,
|
|
477
548
|
length: 1,
|
|
@@ -479,8 +550,8 @@ var RTMProvider_2_2 = class extends EventEmitter2 {
|
|
|
479
550
|
session
|
|
480
551
|
}, target, customType));
|
|
481
552
|
} else {
|
|
482
|
-
const chunkSize =
|
|
483
|
-
|
|
553
|
+
const chunkSize = chunkStep * 1024 / Uint8Array.BYTES_PER_ELEMENT;
|
|
554
|
+
const len = Math.ceil(size / chunkStep);
|
|
484
555
|
let index = 0;
|
|
485
556
|
while (index < len) {
|
|
486
557
|
this.cachedMessages.push(ChunkedUpdateMessage.fromObject({
|
|
@@ -498,7 +569,7 @@ var RTMProvider_2_2 = class extends EventEmitter2 {
|
|
|
498
569
|
const result = await this.rtmClient.presence.whoNow(this.roomChannel(), "MESSAGE", {
|
|
499
570
|
includedState: false
|
|
500
571
|
});
|
|
501
|
-
|
|
572
|
+
let nextPage = result.nextPage;
|
|
502
573
|
result.occupants.forEach((userInfo) => {
|
|
503
574
|
const {
|
|
504
575
|
userId
|
|
@@ -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 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, \"handleRtmMessage\", evt => {\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 this.receiveChunkMessage(ChunkedUpdateMessage.fromBuffer(evt.message, \"\", evt.customType), evt.publisher);\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.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) {\n if (msg.length === 1) {\n this.emit(\"message\", msg.buf, publisher, msg.customType);\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);\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 let 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 var 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 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, \"handleRtmMessage\", evt => {\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 this.receiveChunkMessage(ChunkedUpdateMessage.fromBuffer(evt.message, \"\", evt.customType), evt.publisher);\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.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) {\n if (msg.length === 1) {\n this.emit(\"message\", msg.buf, publisher, msg.customType);\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);\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 let 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 var 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 || Date.now();\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 chunkStep = 24;\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 < chunkStep) {\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 = chunkStep * 1024 / Uint8Array.BYTES_PER_ELEMENT;\n const len = Math.ceil(size / chunkStep);\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 || Date.now();\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 console.error(e);\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 chunkStep = 24;\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 < chunkStep) {\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 = chunkStep * 1024 / Uint8Array.BYTES_PER_ELEMENT;\n const len = Math.ceil(size / chunkStep);\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
|
}
|
package/dist/rtm-provider.js
CHANGED
|
@@ -146,6 +146,9 @@ function _toPrimitive2(t, r) {
|
|
|
146
146
|
return ("string" === r ? String : Number)(t);
|
|
147
147
|
}
|
|
148
148
|
var RTMProvider_2_1 = class extends import_eventemitter3.default {
|
|
149
|
+
get calibrationTimestamp() {
|
|
150
|
+
return this.rtmTimestamp + this.deviation;
|
|
151
|
+
}
|
|
149
152
|
constructor(rtmClient) {
|
|
150
153
|
super();
|
|
151
154
|
_defineProperty2(this, "rtmClient", void 0);
|
|
@@ -155,25 +158,53 @@ var RTMProvider_2_1 = class extends import_eventemitter3.default {
|
|
|
155
158
|
_defineProperty2(this, "chunkedMessages", /* @__PURE__ */ new Map());
|
|
156
159
|
_defineProperty2(this, "cachedMessages", []);
|
|
157
160
|
_defineProperty2(this, "intervalId", null);
|
|
161
|
+
_defineProperty2(this, "deviation", 0);
|
|
162
|
+
_defineProperty2(this, "rtmTimestamp", 0);
|
|
163
|
+
_defineProperty2(this, "animationStartTimestamp", void 0);
|
|
164
|
+
_defineProperty2(this, "animationId", void 0);
|
|
158
165
|
_defineProperty2(this, "handleRtmMessage", (evt) => {
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
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 || Date.now();
|
|
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");
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
_defineProperty2(this, "calibrateAnimate", (timestamp) => {
|
|
191
|
+
if (this.animationStartTimestamp === void 0) {
|
|
192
|
+
this.animationStartTimestamp = timestamp;
|
|
193
|
+
}
|
|
194
|
+
this.deviation = timestamp - this.animationStartTimestamp;
|
|
195
|
+
if (this.animationId) {
|
|
196
|
+
this.animationId = requestAnimationFrame(this.calibrateAnimate);
|
|
166
197
|
}
|
|
167
|
-
this.receiveChunkMessage(ChunkedUpdateMessage.fromBuffer(evt.message, "", evt.customType), evt.publisher);
|
|
168
198
|
});
|
|
169
199
|
_defineProperty2(this, "handleStatus", (connectionStatus) => {
|
|
170
|
-
(0, import_forge_room.log)(
|
|
200
|
+
(0, import_forge_room.log)("rtm status update", {
|
|
171
201
|
state: connectionStatus.state,
|
|
172
202
|
reason: connectionStatus.reason
|
|
173
203
|
});
|
|
174
204
|
if (connectionStatus.state === "RECONNECTING" && this.reconnectTimeout === null) {
|
|
205
|
+
this.emit("connectionStatusChange", "RECONNECTING");
|
|
175
206
|
this.reconnectTimeout = window.setTimeout(() => {
|
|
176
|
-
this.emit("error",
|
|
207
|
+
this.emit("error", "reconnecting timeout");
|
|
177
208
|
this.emit("connectionStatusChange", "DISCONNECTED");
|
|
178
209
|
}, 30 * 1e3);
|
|
179
210
|
} else if (connectionStatus.state === "CONNECTED") {
|
|
@@ -211,15 +242,15 @@ var RTMProvider_2_1 = class extends import_eventemitter3.default {
|
|
|
211
242
|
return `${this.roomChannel()}_u_${userId}`;
|
|
212
243
|
}
|
|
213
244
|
/**
|
|
214
|
-
|
|
215
|
-
|
|
245
|
+
* 重新订阅频道
|
|
246
|
+
*/
|
|
216
247
|
async resubscribe() {
|
|
217
248
|
try {
|
|
218
249
|
await this.rtmClient.subscribe(this.roomChannel());
|
|
219
250
|
await this.rtmClient.subscribe(this.userChannel(this.userId));
|
|
220
251
|
} catch (error) {
|
|
221
252
|
this.emit("error", `rtm subscribe fail, ${error}`);
|
|
222
|
-
(0, import_forge_room.log)(
|
|
253
|
+
(0, import_forge_room.log)("rtm subscribe fail", {
|
|
223
254
|
error: error.toString()
|
|
224
255
|
}, "error");
|
|
225
256
|
}
|
|
@@ -236,7 +267,7 @@ var RTMProvider_2_1 = class extends import_eventemitter3.default {
|
|
|
236
267
|
await this.rtmClient.subscribe(this.userChannel(this.userId));
|
|
237
268
|
} catch (error) {
|
|
238
269
|
this.emit("error", `rtm subscribe fail, ${error}`);
|
|
239
|
-
(0, import_forge_room.log)(
|
|
270
|
+
(0, import_forge_room.log)("rtm subscribe fail", {
|
|
240
271
|
error: error.toString()
|
|
241
272
|
}, "error");
|
|
242
273
|
}
|
|
@@ -247,7 +278,7 @@ var RTMProvider_2_1 = class extends import_eventemitter3.default {
|
|
|
247
278
|
this.rtmClient.publish(channel, msg.buffer, {
|
|
248
279
|
customType: msg.customType
|
|
249
280
|
}).catch((error) => {
|
|
250
|
-
(0, import_forge_room.log)(
|
|
281
|
+
(0, import_forge_room.log)("rtm publish failed", {
|
|
251
282
|
channel,
|
|
252
283
|
code: error.code
|
|
253
284
|
}, "warning");
|
|
@@ -264,9 +295,12 @@ var RTMProvider_2_1 = class extends import_eventemitter3.default {
|
|
|
264
295
|
await this.rtmClient.unsubscribe(this.userChannel(this.userId));
|
|
265
296
|
window.clearInterval(this.intervalId);
|
|
266
297
|
}
|
|
267
|
-
|
|
298
|
+
isForgeRoomChannel(channel) {
|
|
299
|
+
return channel === this.roomChannel() || channel === this.userChannel(this.userId);
|
|
300
|
+
}
|
|
301
|
+
receiveChunkMessage(msg, publisher, isRoomChannel) {
|
|
268
302
|
if (msg.length === 1) {
|
|
269
|
-
this.emit("message", msg.buf, publisher, msg.customType);
|
|
303
|
+
this.emit("message", msg.buf, publisher, msg.customType, isRoomChannel);
|
|
270
304
|
return;
|
|
271
305
|
}
|
|
272
306
|
const chunks = this.chunkedMessages.get(msg.session) || [];
|
|
@@ -279,7 +313,7 @@ var RTMProvider_2_1 = class extends import_eventemitter3.default {
|
|
|
279
313
|
output.set(buf, result.length);
|
|
280
314
|
return output;
|
|
281
315
|
}, new Uint8Array());
|
|
282
|
-
this.emit("message", buffer, publisher, msg.customType);
|
|
316
|
+
this.emit("message", buffer, publisher, msg.customType, isRoomChannel);
|
|
283
317
|
this.chunkedMessages.delete(msg.session);
|
|
284
318
|
} else {
|
|
285
319
|
this.chunkedMessages.set(msg.session, chunks);
|
|
@@ -287,9 +321,10 @@ var RTMProvider_2_1 = class extends import_eventemitter3.default {
|
|
|
287
321
|
}
|
|
288
322
|
publish(buf, customType) {
|
|
289
323
|
let target = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : "";
|
|
324
|
+
const chunkStep = 24;
|
|
290
325
|
const session = (0, import_uuid.v4)();
|
|
291
326
|
const size = buf.length * Uint8Array.BYTES_PER_ELEMENT / 1024;
|
|
292
|
-
if (size <
|
|
327
|
+
if (size < chunkStep) {
|
|
293
328
|
this.cachedMessages.push(ChunkedUpdateMessage.fromObject({
|
|
294
329
|
buf,
|
|
295
330
|
length: 1,
|
|
@@ -297,8 +332,8 @@ var RTMProvider_2_1 = class extends import_eventemitter3.default {
|
|
|
297
332
|
session
|
|
298
333
|
}, target, customType));
|
|
299
334
|
} else {
|
|
300
|
-
const chunkSize =
|
|
301
|
-
|
|
335
|
+
const chunkSize = chunkStep * 1024 / Uint8Array.BYTES_PER_ELEMENT;
|
|
336
|
+
const len = Math.ceil(size / chunkStep);
|
|
302
337
|
let index = 0;
|
|
303
338
|
while (index < len) {
|
|
304
339
|
this.cachedMessages.push(ChunkedUpdateMessage.fromObject({
|
|
@@ -316,7 +351,7 @@ var RTMProvider_2_1 = class extends import_eventemitter3.default {
|
|
|
316
351
|
const result = await this.rtmClient.presence.whoNow(this.roomChannel(), "MESSAGE", {
|
|
317
352
|
includedState: false
|
|
318
353
|
});
|
|
319
|
-
|
|
354
|
+
let nextPage = result.nextPage;
|
|
320
355
|
result.occupants.forEach((userInfo) => {
|
|
321
356
|
const {
|
|
322
357
|
userId
|
|
@@ -362,6 +397,9 @@ function _toPrimitive3(t, r) {
|
|
|
362
397
|
return ("string" === r ? String : Number)(t);
|
|
363
398
|
}
|
|
364
399
|
var RTMProvider_2_2 = class extends import_eventemitter32.default {
|
|
400
|
+
get calibrationTimestamp() {
|
|
401
|
+
return this.rtmTimestamp + this.deviation;
|
|
402
|
+
}
|
|
365
403
|
constructor(rtmClient) {
|
|
366
404
|
super();
|
|
367
405
|
_defineProperty3(this, "rtmClient", void 0);
|
|
@@ -371,26 +409,55 @@ var RTMProvider_2_2 = class extends import_eventemitter32.default {
|
|
|
371
409
|
_defineProperty3(this, "chunkedMessages", /* @__PURE__ */ new Map());
|
|
372
410
|
_defineProperty3(this, "cachedMessages", []);
|
|
373
411
|
_defineProperty3(this, "intervalId", null);
|
|
412
|
+
_defineProperty3(this, "deviation", 0);
|
|
413
|
+
_defineProperty3(this, "rtmTimestamp", 0);
|
|
414
|
+
_defineProperty3(this, "animationStartTimestamp", void 0);
|
|
415
|
+
_defineProperty3(this, "animationId", void 0);
|
|
374
416
|
_defineProperty3(this, "handleRtmMessage", (evt) => {
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
417
|
+
try {
|
|
418
|
+
const isRoomChannel = evt.channelName.indexOf("_u_") < 0;
|
|
419
|
+
if (!(evt.message instanceof Uint8Array) || !this.isForgeRoomChannel(evt.channelName)) {
|
|
420
|
+
(0, import_forge_room2.log)("rtm message not Uint8Array", {
|
|
421
|
+
channel: evt.channelName,
|
|
422
|
+
publisher: evt.publisher
|
|
423
|
+
});
|
|
424
|
+
return;
|
|
425
|
+
}
|
|
426
|
+
if (this.animationId) {
|
|
427
|
+
cancelAnimationFrame(this.animationId);
|
|
428
|
+
this.animationStartTimestamp = void 0;
|
|
429
|
+
this.animationId = void 0;
|
|
430
|
+
this.deviation = 0;
|
|
431
|
+
}
|
|
432
|
+
this.rtmTimestamp = evt.timestamp || Date.now();
|
|
433
|
+
this.animationId = requestAnimationFrame(this.calibrateAnimate);
|
|
434
|
+
this.receiveChunkMessage(ChunkedUpdateMessage.fromBuffer(evt.message, "", evt.customType), evt.publisher, isRoomChannel);
|
|
435
|
+
} catch (e) {
|
|
436
|
+
(0, import_forge_room2.log)("rtm handle message error", {
|
|
437
|
+
error: e.toString()
|
|
438
|
+
}, "error");
|
|
439
|
+
console.error(e);
|
|
440
|
+
}
|
|
441
|
+
});
|
|
442
|
+
_defineProperty3(this, "calibrateAnimate", (timestamp) => {
|
|
443
|
+
if (this.animationStartTimestamp === void 0) {
|
|
444
|
+
this.animationStartTimestamp = timestamp;
|
|
445
|
+
}
|
|
446
|
+
this.deviation = timestamp - this.animationStartTimestamp;
|
|
447
|
+
if (this.animationId) {
|
|
448
|
+
this.animationId = requestAnimationFrame(this.calibrateAnimate);
|
|
382
449
|
}
|
|
383
|
-
this.receiveChunkMessage(ChunkedUpdateMessage.fromBuffer(evt.message, "", evt.customType), evt.publisher);
|
|
384
450
|
});
|
|
385
451
|
_defineProperty3(this, "handleStatus", (connectionStatus) => {
|
|
386
|
-
(0, import_forge_room2.log)(
|
|
452
|
+
(0, import_forge_room2.log)("rtm status update", {
|
|
387
453
|
state: connectionStatus.state,
|
|
388
454
|
reason: connectionStatus.reason,
|
|
389
455
|
rtm: "2.2"
|
|
390
456
|
});
|
|
391
457
|
if (connectionStatus.state === "RECONNECTING" && this.reconnectTimeout === null) {
|
|
458
|
+
this.emit("connectionStatusChange", "RECONNECTING");
|
|
392
459
|
this.reconnectTimeout = window.setTimeout(() => {
|
|
393
|
-
this.emit("error",
|
|
460
|
+
this.emit("error", "reconnecting timeout");
|
|
394
461
|
this.emit("connectionStatusChange", "DISCONNECTED");
|
|
395
462
|
}, 30 * 1e3);
|
|
396
463
|
} else if (connectionStatus.state === "CONNECTED") {
|
|
@@ -439,7 +506,7 @@ var RTMProvider_2_2 = class extends import_eventemitter32.default {
|
|
|
439
506
|
await this.rtmClient.subscribe(this.userChannel(this.userId));
|
|
440
507
|
} catch (error) {
|
|
441
508
|
this.emit("error", `rtm subscribe fail, ${error}`);
|
|
442
|
-
(0, import_forge_room2.log)(
|
|
509
|
+
(0, import_forge_room2.log)("rtm subscribe fail", {
|
|
443
510
|
error: error.toString(),
|
|
444
511
|
rtm: "2.2"
|
|
445
512
|
}, "error");
|
|
@@ -451,7 +518,7 @@ var RTMProvider_2_2 = class extends import_eventemitter32.default {
|
|
|
451
518
|
this.rtmClient.publish(channel, msg.buffer, {
|
|
452
519
|
customType: msg.customType
|
|
453
520
|
}).catch((error) => {
|
|
454
|
-
(0, import_forge_room2.log)(
|
|
521
|
+
(0, import_forge_room2.log)("rtm publish failed", {
|
|
455
522
|
channel,
|
|
456
523
|
code: error.code,
|
|
457
524
|
rtm: "2.2"
|
|
@@ -462,15 +529,15 @@ var RTMProvider_2_2 = class extends import_eventemitter32.default {
|
|
|
462
529
|
}, 32);
|
|
463
530
|
}
|
|
464
531
|
/**
|
|
465
|
-
|
|
466
|
-
|
|
532
|
+
* 重新订阅频道
|
|
533
|
+
*/
|
|
467
534
|
async resubscribe() {
|
|
468
535
|
try {
|
|
469
536
|
await this.rtmClient.subscribe(this.roomChannel());
|
|
470
537
|
await this.rtmClient.subscribe(this.userChannel(this.userId));
|
|
471
538
|
} catch (error) {
|
|
472
539
|
this.emit("error", `rtm subscribe fail, ${error}`);
|
|
473
|
-
(0, import_forge_room2.log)(
|
|
540
|
+
(0, import_forge_room2.log)("rtm subscribe fail", {
|
|
474
541
|
error: error.toString()
|
|
475
542
|
}, "error");
|
|
476
543
|
}
|
|
@@ -483,9 +550,12 @@ var RTMProvider_2_2 = class extends import_eventemitter32.default {
|
|
|
483
550
|
await this.rtmClient.unsubscribe(this.userChannel(this.userId));
|
|
484
551
|
window.clearInterval(this.intervalId);
|
|
485
552
|
}
|
|
486
|
-
|
|
553
|
+
isForgeRoomChannel(channel) {
|
|
554
|
+
return channel === this.roomChannel() || channel === this.userChannel(this.userId);
|
|
555
|
+
}
|
|
556
|
+
receiveChunkMessage(msg, publisher, isRoomChannel) {
|
|
487
557
|
if (msg.length === 1) {
|
|
488
|
-
this.emit("message", msg.buf, publisher, msg.customType);
|
|
558
|
+
this.emit("message", msg.buf, publisher, msg.customType, isRoomChannel);
|
|
489
559
|
return;
|
|
490
560
|
}
|
|
491
561
|
const chunks = this.chunkedMessages.get(msg.session) || [];
|
|
@@ -498,7 +568,7 @@ var RTMProvider_2_2 = class extends import_eventemitter32.default {
|
|
|
498
568
|
output.set(buf, result.length);
|
|
499
569
|
return output;
|
|
500
570
|
}, new Uint8Array());
|
|
501
|
-
this.emit("message", buffer, publisher, msg.customType);
|
|
571
|
+
this.emit("message", buffer, publisher, msg.customType, isRoomChannel);
|
|
502
572
|
this.chunkedMessages.delete(msg.session);
|
|
503
573
|
} else {
|
|
504
574
|
this.chunkedMessages.set(msg.session, chunks);
|
|
@@ -506,9 +576,10 @@ var RTMProvider_2_2 = class extends import_eventemitter32.default {
|
|
|
506
576
|
}
|
|
507
577
|
publish(buf, customType) {
|
|
508
578
|
let target = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : "";
|
|
579
|
+
const chunkStep = 24;
|
|
509
580
|
const session = (0, import_uuid2.v4)();
|
|
510
581
|
const size = buf.length * Uint8Array.BYTES_PER_ELEMENT / 1024;
|
|
511
|
-
if (size <
|
|
582
|
+
if (size < chunkStep) {
|
|
512
583
|
this.cachedMessages.push(ChunkedUpdateMessage.fromObject({
|
|
513
584
|
buf,
|
|
514
585
|
length: 1,
|
|
@@ -516,8 +587,8 @@ var RTMProvider_2_2 = class extends import_eventemitter32.default {
|
|
|
516
587
|
session
|
|
517
588
|
}, target, customType));
|
|
518
589
|
} else {
|
|
519
|
-
const chunkSize =
|
|
520
|
-
|
|
590
|
+
const chunkSize = chunkStep * 1024 / Uint8Array.BYTES_PER_ELEMENT;
|
|
591
|
+
const len = Math.ceil(size / chunkStep);
|
|
521
592
|
let index = 0;
|
|
522
593
|
while (index < len) {
|
|
523
594
|
this.cachedMessages.push(ChunkedUpdateMessage.fromObject({
|
|
@@ -535,7 +606,7 @@ var RTMProvider_2_2 = class extends import_eventemitter32.default {
|
|
|
535
606
|
const result = await this.rtmClient.presence.whoNow(this.roomChannel(), "MESSAGE", {
|
|
536
607
|
includedState: false
|
|
537
608
|
});
|
|
538
|
-
|
|
609
|
+
let nextPage = result.nextPage;
|
|
539
610
|
result.occupants.forEach((userInfo) => {
|
|
540
611
|
const {
|
|
541
612
|
userId
|
package/dist/rtm-provider.js.map
CHANGED
|
@@ -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 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, \"handleRtmMessage\", evt => {\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 this.receiveChunkMessage(ChunkedUpdateMessage.fromBuffer(evt.message, \"\", evt.customType), evt.publisher);\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.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) {\n if (msg.length === 1) {\n this.emit(\"message\", msg.buf, publisher, msg.customType);\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);\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 let 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 var 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 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, \"handleRtmMessage\", evt => {\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 this.receiveChunkMessage(ChunkedUpdateMessage.fromBuffer(evt.message, \"\", evt.customType), evt.publisher);\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.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) {\n if (msg.length === 1) {\n this.emit(\"message\", msg.buf, publisher, msg.customType);\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);\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 let 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 var 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 || Date.now();\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 chunkStep = 24;\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 < chunkStep) {\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 = chunkStep * 1024 / Uint8Array.BYTES_PER_ELEMENT;\n const len = Math.ceil(size / chunkStep);\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 || Date.now();\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 console.error(e);\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 chunkStep = 24;\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 < chunkStep) {\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 = chunkStep * 1024 / Uint8Array.BYTES_PER_ELEMENT;\n const len = Math.ceil(size / chunkStep);\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.
|
|
3
|
+
"version": "0.1.12-alpha.1",
|
|
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.
|
|
14
|
+
"@netless/forge-room": "0.1.12-alpha.1"
|
|
15
15
|
},
|
|
16
16
|
"keywords": [],
|
|
17
17
|
"author": "",
|
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
},
|
|
32
32
|
"scripts": {
|
|
33
33
|
"dev": "onChange 'src/**/*' -- npm run build",
|
|
34
|
-
"build": "tsc --emitDeclarationOnly && node build.mjs"
|
|
34
|
+
"build": "pnpm lint && tsc --emitDeclarationOnly && node build.mjs",
|
|
35
|
+
"lint": "eslint src"
|
|
35
36
|
}
|
|
36
37
|
}
|