@netless/forge-rtm 0.1.4 → 0.1.6
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/README.md +1 -2
- package/dist/RTM_2_1.d.ts +1 -0
- package/dist/RTM_2_1.d.ts.map +1 -1
- package/dist/RTM_2_2.d.ts +5 -0
- package/dist/RTM_2_2.d.ts.map +1 -1
- package/dist/rtm-provider.esm.js +30 -0
- package/dist/rtm-provider.esm.js.map +2 -2
- package/dist/rtm-provider.js +30 -0
- package/dist/rtm-provider.js.map +2 -2
- package/package.json +2 -2
package/README.md
CHANGED
package/dist/RTM_2_1.d.ts
CHANGED
|
@@ -17,6 +17,7 @@ export declare class RTMProvider_2_1 extends EventEmitter<SocketProviderEvent> i
|
|
|
17
17
|
*/
|
|
18
18
|
resubscribe(): Promise<void>;
|
|
19
19
|
initialize(roomId: string, userId: string): Promise<void>;
|
|
20
|
+
dispose(): Promise<void>;
|
|
20
21
|
private handleRtmMessage;
|
|
21
22
|
private handleStatus;
|
|
22
23
|
private handlePresence;
|
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,EAAC,SAAS,EAAY,MAAM,WAAW,CAAC;AAIpD,qBAAa,eAAgB,SAAQ,YAAY,CAAC,mBAAmB,CAAE,YAAW,cAAc;IAE5F,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;gBAEZ,SAAS,EAAE,SAAS;IAKvC,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,WAAW;IAOnB;;OAEG;IACU,WAAW;IAYX,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
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,EAAC,SAAS,EAAY,MAAM,WAAW,CAAC;AAIpD,qBAAa,eAAgB,SAAQ,YAAY,CAAC,mBAAmB,CAAE,YAAW,cAAc;IAE5F,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;gBAEZ,SAAS,EAAE,SAAS;IAKvC,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,WAAW;IAOnB;;OAEG;IACU,WAAW;IAYX,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgCzD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAUrC,OAAO,CAAC,gBAAgB,CAEtB;IAEF,OAAO,CAAC,YAAY,CAoBnB;IAED,OAAO,CAAC,cAAc,CAYpB;IAEF,OAAO,CAAC,mBAAmB;IAuBpB,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAE,MAAW;IA2B1D,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;CAuBhD"}
|
package/dist/RTM_2_2.d.ts
CHANGED
|
@@ -13,6 +13,11 @@ export declare class RTMProvider_2_2 extends EventEmitter<SocketProviderEvent> i
|
|
|
13
13
|
private roomChannel;
|
|
14
14
|
private userChannel;
|
|
15
15
|
initialize(roomId: string, userId: string): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* 重新订阅频道
|
|
18
|
+
*/
|
|
19
|
+
resubscribe(): Promise<void>;
|
|
20
|
+
dispose(): Promise<void>;
|
|
16
21
|
private handleRtmMessage;
|
|
17
22
|
private handleStatus;
|
|
18
23
|
private handlePresence;
|
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,EAAC,SAAS,EAAY,MAAM,WAAW,CAAC;AAGpD,qBAAa,eAAgB,SAAQ,YAAY,CAAC,mBAAmB,CAAE,YAAW,cAAc;IAE5F,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;gBAEZ,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,OAAO,CAAC,gBAAgB,CAEtB;IAEF,OAAO,CAAC,YAAY,CAqBnB;IAED,OAAO,CAAC,cAAc,CAYpB;IAEF,OAAO,CAAC,mBAAmB;IAuBpB,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAE,MAAW;IA2B1D,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;CAuBhD"}
|
|
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,EAAC,SAAS,EAAY,MAAM,WAAW,CAAC;AAGpD,qBAAa,eAAgB,SAAQ,YAAY,CAAC,mBAAmB,CAAE,YAAW,cAAc;IAE5F,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;gBAEZ,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;;OAEG;IACU,WAAW;IAYX,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAUrC,OAAO,CAAC,gBAAgB,CAEtB;IAEF,OAAO,CAAC,YAAY,CAqBnB;IAED,OAAO,CAAC,cAAc,CAYpB;IAEF,OAAO,CAAC,mBAAmB;IAuBpB,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAE,MAAW;IA2B1D,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;CAuBhD"}
|
package/dist/rtm-provider.esm.js
CHANGED
|
@@ -140,6 +140,14 @@ var RTMProvider_2_1 = class extends EventEmitter {
|
|
|
140
140
|
}
|
|
141
141
|
}, 32);
|
|
142
142
|
}
|
|
143
|
+
async dispose() {
|
|
144
|
+
this.rtmClient.removeEventListener("message", this.handleRtmMessage);
|
|
145
|
+
this.rtmClient.removeEventListener("presence", this.handlePresence);
|
|
146
|
+
this.rtmClient.removeEventListener("status", this.handleStatus);
|
|
147
|
+
await this.rtmClient.unsubscribe(this.roomChannel());
|
|
148
|
+
await this.rtmClient.unsubscribe(this.userChannel(this.userId));
|
|
149
|
+
window.clearInterval(this.intervalId);
|
|
150
|
+
}
|
|
143
151
|
handleRtmMessage = (evt) => {
|
|
144
152
|
this.receiveChunkMessage(ChunkedUpdateMessage.fromBuffer(evt.message, "", evt.customType), evt.publisher);
|
|
145
153
|
};
|
|
@@ -304,6 +312,28 @@ var RTMProvider_2_2 = class extends EventEmitter2 {
|
|
|
304
312
|
}
|
|
305
313
|
}, 32);
|
|
306
314
|
}
|
|
315
|
+
/**
|
|
316
|
+
* 重新订阅频道
|
|
317
|
+
*/
|
|
318
|
+
async resubscribe() {
|
|
319
|
+
try {
|
|
320
|
+
await this.rtmClient.subscribe(this.roomChannel());
|
|
321
|
+
await this.rtmClient.subscribe(this.userChannel(this.userId));
|
|
322
|
+
} catch (error) {
|
|
323
|
+
this.emit("error", `rtm subscribe fail, ${error}`);
|
|
324
|
+
log2(`rtm subscribe fail`, {
|
|
325
|
+
error: error.toString()
|
|
326
|
+
}, "error");
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
async dispose() {
|
|
330
|
+
this.rtmClient.removeEventListener("message", this.handleRtmMessage);
|
|
331
|
+
this.rtmClient.removeEventListener("presence", this.handlePresence);
|
|
332
|
+
this.rtmClient.removeEventListener("status", this.handleStatus);
|
|
333
|
+
await this.rtmClient.unsubscribe(this.roomChannel());
|
|
334
|
+
await this.rtmClient.unsubscribe(this.userChannel(this.userId));
|
|
335
|
+
window.clearInterval(this.intervalId);
|
|
336
|
+
}
|
|
307
337
|
handleRtmMessage = (evt) => {
|
|
308
338
|
this.receiveChunkMessage(ChunkedUpdateMessage.fromBuffer(evt.message, "", evt.customType), evt.publisher);
|
|
309
339
|
};
|
|
@@ -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": ["import { SocketProvider, SocketProviderEvent, log } from \"@netless/forge-room\";\nimport EventEmitter from \"eventemitter3\";\nimport {v4 as uuidv4} from \"uuid\";\nimport {cyrb53} from \"./utils\";\n\nimport type {RTMClient, RTMEvents} from \"agora-rtm\";\n\nimport {ChunkedUpdateMessage} from \"./ChunkedUpdateMessage\";\n\nexport class RTMProvider_2_1 extends EventEmitter<SocketProviderEvent> implements SocketProvider {\n\n private rtmClient!: RTMClient;\n private roomId!: string;\n private userId!: string;\n\n private reconnectTimeout: any = null;\n private chunkedMessages: Map<string, ChunkedUpdateMessage[]> = new Map();\n private cachedMessages: ChunkedUpdateMessage[] = [];\n\n private intervalId: any = null;\n\n public constructor(rtmClient: RTMClient) {\n super();\n this.rtmClient = rtmClient;\n }\n\n private roomChannel(): string {\n return `r_${this.roomId}`;\n }\n\n private userChannel(userId: string): string {\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 public async resubscribe() {\n try {\n await this.rtmClient.subscribe(this.roomChannel());\n await this.rtmClient.subscribe(this.userChannel(this.userId));\n } catch(error: any) {\n this.emit(\"error\", `rtm subscribe fail, ${error}`);\n log(`rtm subscribe fail`, {\n error: error.toString(),\n }, \"error\");\n }\n }\n\n public async initialize(roomId: string, userId: string): Promise<void> {\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: any) {\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, { customType: msg.customType }).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\n private handleRtmMessage = (evt: RTMEvents.MessageEvent) => {\n this.receiveChunkMessage(ChunkedUpdateMessage.fromBuffer(evt.message as Uint8Array, \"\", evt.customType), evt.publisher);\n };\n\n private handleStatus = (connectionStatus: RTMEvents.RTMConnectionStatusChangeEvent) => {\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\n private handlePresence = (evt: RTMEvents.PresenceEvent) => {\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\n private receiveChunkMessage(msg: ChunkedUpdateMessage, publisher: string) {\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)\n .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\n public publish(buf: Uint8Array, customType: string, target: string = \"\") {\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\n public async userList(): Promise<Set<string>> {\n const output = new Set<string>();\n const result = await this.rtmClient.presence.whoNow(this.roomChannel(), \"MESSAGE\", {\n includedState: false,\n });\n var nextPage: string | null = result.nextPage;\n result.occupants.forEach((userInfo) => {\n const { userId } = 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 { userId } = userInfo;\n output.add(userId);\n });\n }\n return output;\n }\n}\n", "export const cyrb53 = (str: string, seed = 0) => {\n let h1 = 0xdeadbeef ^ seed, 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\n return 4294967296 * (2097151 & h2) + (h1 >>> 0);\n};", "export type ChunkedUpdateMessageType = {\n buf: Uint8Array;\n index: number;\n length: number;\n session: string;\n}\n\nexport class ChunkedUpdateMessage {\n\n static fromObject(obj: ChunkedUpdateMessageType, target: string, customType: string): ChunkedUpdateMessage {\n const msg = new ChunkedUpdateMessage();\n msg.target = target;\n msg.customType = customType;\n\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\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\n msg.buffer = new Uint8Array(\n obj.buf.length + sessionBuf.length + msg.header.buffer.byteLength\n );\n\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\n return msg;\n }\n\n static fromBuffer(buf: Uint8Array, target: string, customType: string) {\n const msg = new ChunkedUpdateMessage();\n\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\n return msg;\n }\n\n public target!: string;\n public customType!: string;\n public buffer!: Uint8Array;\n private header!: DataView;\n\n public get buf(): Uint8Array {\n const len = this.header.getInt32(0);\n return this.buffer.slice(0, len);\n }\n\n public get index(): number {\n return this.header.getUint8(8);\n }\n\n public get length(): number {\n return this.header.getUint8(9);\n }\n\n public get session(): string {\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\n private constructor() {}\n}", "import { SocketProvider, SocketProviderEvent, log } from \"@netless/forge-room\";\nimport EventEmitter from \"eventemitter3\";\nimport {v4 as uuidv4} from \"uuid\";\nimport {cyrb53} from \"./utils\";\n\nimport type {RTMClient, RTMEvents} from \"agora-rtm\";\nimport {ChunkedUpdateMessage} from \"./ChunkedUpdateMessage\";\n\nexport class RTMProvider_2_2 extends EventEmitter<SocketProviderEvent> implements SocketProvider {\n\n private rtmClient!: RTMClient;\n private roomId!: string;\n private userId!: string;\n\n private reconnectTimeout: any = null;\n private chunkedMessages: Map<string, ChunkedUpdateMessage[]> = new Map();\n private cachedMessages: ChunkedUpdateMessage[] = [];\n\n private intervalId: any = null;\n\n public constructor(rtmClient: RTMClient) {\n super();\n this.rtmClient = rtmClient;\n }\n\n private roomChannel(): string {\n return `r_${this.roomId}`;\n }\n\n private userChannel(userId: string): string {\n if (userId.length > 16) {\n userId = `${cyrb53(userId)}`;\n }\n return `${this.roomChannel()}_u_${userId}`;\n }\n\n public async initialize(roomId: string, userId: string): Promise<void> {\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: any) {\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, { customType: msg.customType }).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 private handleRtmMessage = (evt: RTMEvents.MessageEvent) => {\n this.receiveChunkMessage(ChunkedUpdateMessage.fromBuffer(evt.message as Uint8Array, \"\", evt.customType), evt.publisher);\n };\n\n private handleStatus = (connectionStatus: RTMEvents.RTMConnectionStatusChangeEvent) => {\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\n private handlePresence = (evt: RTMEvents.PresenceEvent) => {\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\n private receiveChunkMessage(msg: ChunkedUpdateMessage, publisher: string) {\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)\n .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\n public publish(buf: Uint8Array, customType: string, target: string = \"\") {\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\n public async userList(): Promise<Set<string>> {\n const output = new Set<string>();\n const result = await this.rtmClient.presence.whoNow(this.roomChannel(), \"MESSAGE\", {\n includedState: false,\n });\n var nextPage: string | null = result.nextPage;\n result.occupants.forEach((userInfo) => {\n const { userId } = 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 { userId } = userInfo;\n output.add(userId);\n });\n }\n return output;\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { SocketProvider, SocketProviderEvent, log } from \"@netless/forge-room\";\nimport EventEmitter from \"eventemitter3\";\nimport {v4 as uuidv4} from \"uuid\";\nimport {cyrb53} from \"./utils\";\n\nimport type {RTMClient, RTMEvents} from \"agora-rtm\";\n\nimport {ChunkedUpdateMessage} from \"./ChunkedUpdateMessage\";\n\nexport class RTMProvider_2_1 extends EventEmitter<SocketProviderEvent> implements SocketProvider {\n\n private rtmClient!: RTMClient;\n private roomId!: string;\n private userId!: string;\n\n private reconnectTimeout: any = null;\n private chunkedMessages: Map<string, ChunkedUpdateMessage[]> = new Map();\n private cachedMessages: ChunkedUpdateMessage[] = [];\n\n private intervalId: any = null;\n\n public constructor(rtmClient: RTMClient) {\n super();\n this.rtmClient = rtmClient;\n }\n\n private roomChannel(): string {\n return `r_${this.roomId}`;\n }\n\n private userChannel(userId: string): string {\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 public async resubscribe() {\n try {\n await this.rtmClient.subscribe(this.roomChannel());\n await this.rtmClient.subscribe(this.userChannel(this.userId));\n } catch(error: any) {\n this.emit(\"error\", `rtm subscribe fail, ${error}`);\n log(`rtm subscribe fail`, {\n error: error.toString(),\n }, \"error\");\n }\n }\n\n public async initialize(roomId: string, userId: string): Promise<void> {\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: any) {\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, { customType: msg.customType }).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\n public async dispose(): Promise<void> {\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\n private handleRtmMessage = (evt: RTMEvents.MessageEvent) => {\n this.receiveChunkMessage(ChunkedUpdateMessage.fromBuffer(evt.message as Uint8Array, \"\", evt.customType), evt.publisher);\n };\n\n private handleStatus = (connectionStatus: RTMEvents.RTMConnectionStatusChangeEvent) => {\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\n private handlePresence = (evt: RTMEvents.PresenceEvent) => {\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\n private receiveChunkMessage(msg: ChunkedUpdateMessage, publisher: string) {\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)\n .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\n public publish(buf: Uint8Array, customType: string, target: string = \"\") {\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\n public async userList(): Promise<Set<string>> {\n const output = new Set<string>();\n const result = await this.rtmClient.presence.whoNow(this.roomChannel(), \"MESSAGE\", {\n includedState: false,\n });\n var nextPage: string | null = result.nextPage;\n result.occupants.forEach((userInfo) => {\n const { userId } = 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 { userId } = userInfo;\n output.add(userId);\n });\n }\n return output;\n }\n}\n", "export const cyrb53 = (str: string, seed = 0) => {\n let h1 = 0xdeadbeef ^ seed, 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\n return 4294967296 * (2097151 & h2) + (h1 >>> 0);\n};", "export type ChunkedUpdateMessageType = {\n buf: Uint8Array;\n index: number;\n length: number;\n session: string;\n}\n\nexport class ChunkedUpdateMessage {\n\n static fromObject(obj: ChunkedUpdateMessageType, target: string, customType: string): ChunkedUpdateMessage {\n const msg = new ChunkedUpdateMessage();\n msg.target = target;\n msg.customType = customType;\n\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\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\n msg.buffer = new Uint8Array(\n obj.buf.length + sessionBuf.length + msg.header.buffer.byteLength\n );\n\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\n return msg;\n }\n\n static fromBuffer(buf: Uint8Array, target: string, customType: string) {\n const msg = new ChunkedUpdateMessage();\n\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\n return msg;\n }\n\n public target!: string;\n public customType!: string;\n public buffer!: Uint8Array;\n private header!: DataView;\n\n public get buf(): Uint8Array {\n const len = this.header.getInt32(0);\n return this.buffer.slice(0, len);\n }\n\n public get index(): number {\n return this.header.getUint8(8);\n }\n\n public get length(): number {\n return this.header.getUint8(9);\n }\n\n public get session(): string {\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\n private constructor() {}\n}", "import { SocketProvider, SocketProviderEvent, log } from \"@netless/forge-room\";\nimport EventEmitter from \"eventemitter3\";\nimport {v4 as uuidv4} from \"uuid\";\nimport {cyrb53} from \"./utils\";\n\nimport type {RTMClient, RTMEvents} from \"agora-rtm\";\nimport {ChunkedUpdateMessage} from \"./ChunkedUpdateMessage\";\n\nexport class RTMProvider_2_2 extends EventEmitter<SocketProviderEvent> implements SocketProvider {\n\n private rtmClient!: RTMClient;\n private roomId!: string;\n private userId!: string;\n\n private reconnectTimeout: any = null;\n private chunkedMessages: Map<string, ChunkedUpdateMessage[]> = new Map();\n private cachedMessages: ChunkedUpdateMessage[] = [];\n\n private intervalId: any = null;\n\n public constructor(rtmClient: RTMClient) {\n super();\n this.rtmClient = rtmClient;\n }\n\n private roomChannel(): string {\n return `r_${this.roomId}`;\n }\n\n private userChannel(userId: string): string {\n if (userId.length > 16) {\n userId = `${cyrb53(userId)}`;\n }\n return `${this.roomChannel()}_u_${userId}`;\n }\n\n public async initialize(roomId: string, userId: string): Promise<void> {\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: any) {\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, { customType: msg.customType }).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 public async resubscribe() {\n try {\n await this.rtmClient.subscribe(this.roomChannel());\n await this.rtmClient.subscribe(this.userChannel(this.userId));\n } catch(error: any) {\n this.emit(\"error\", `rtm subscribe fail, ${error}`);\n log(`rtm subscribe fail`, {\n error: error.toString(),\n }, \"error\");\n }\n }\n\n public async dispose(): Promise<void> {\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\n private handleRtmMessage = (evt: RTMEvents.MessageEvent) => {\n this.receiveChunkMessage(ChunkedUpdateMessage.fromBuffer(evt.message as Uint8Array, \"\", evt.customType), evt.publisher);\n };\n\n private handleStatus = (connectionStatus: RTMEvents.RTMConnectionStatusChangeEvent) => {\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\n private handlePresence = (evt: RTMEvents.PresenceEvent) => {\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\n private receiveChunkMessage(msg: ChunkedUpdateMessage, publisher: string) {\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)\n .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\n public publish(buf: Uint8Array, customType: string, target: string = \"\") {\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\n public async userList(): Promise<Set<string>> {\n const output = new Set<string>();\n const result = await this.rtmClient.presence.whoNow(this.roomChannel(), \"MESSAGE\", {\n includedState: false,\n });\n var nextPage: string | null = result.nextPage;\n result.occupants.forEach((userInfo) => {\n const { userId } = 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 { userId } = userInfo;\n output.add(userId);\n });\n }\n return output;\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["result", "log", "EventEmitter", "uuidv4", "EventEmitter", "log", "uuidv4", "result"]
|
|
7
7
|
}
|
package/dist/rtm-provider.js
CHANGED
|
@@ -177,6 +177,14 @@ var RTMProvider_2_1 = class extends import_eventemitter3.default {
|
|
|
177
177
|
}
|
|
178
178
|
}, 32);
|
|
179
179
|
}
|
|
180
|
+
async dispose() {
|
|
181
|
+
this.rtmClient.removeEventListener("message", this.handleRtmMessage);
|
|
182
|
+
this.rtmClient.removeEventListener("presence", this.handlePresence);
|
|
183
|
+
this.rtmClient.removeEventListener("status", this.handleStatus);
|
|
184
|
+
await this.rtmClient.unsubscribe(this.roomChannel());
|
|
185
|
+
await this.rtmClient.unsubscribe(this.userChannel(this.userId));
|
|
186
|
+
window.clearInterval(this.intervalId);
|
|
187
|
+
}
|
|
180
188
|
handleRtmMessage = (evt) => {
|
|
181
189
|
this.receiveChunkMessage(ChunkedUpdateMessage.fromBuffer(evt.message, "", evt.customType), evt.publisher);
|
|
182
190
|
};
|
|
@@ -341,6 +349,28 @@ var RTMProvider_2_2 = class extends import_eventemitter32.default {
|
|
|
341
349
|
}
|
|
342
350
|
}, 32);
|
|
343
351
|
}
|
|
352
|
+
/**
|
|
353
|
+
* 重新订阅频道
|
|
354
|
+
*/
|
|
355
|
+
async resubscribe() {
|
|
356
|
+
try {
|
|
357
|
+
await this.rtmClient.subscribe(this.roomChannel());
|
|
358
|
+
await this.rtmClient.subscribe(this.userChannel(this.userId));
|
|
359
|
+
} catch (error) {
|
|
360
|
+
this.emit("error", `rtm subscribe fail, ${error}`);
|
|
361
|
+
(0, import_forge_room2.log)(`rtm subscribe fail`, {
|
|
362
|
+
error: error.toString()
|
|
363
|
+
}, "error");
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
async dispose() {
|
|
367
|
+
this.rtmClient.removeEventListener("message", this.handleRtmMessage);
|
|
368
|
+
this.rtmClient.removeEventListener("presence", this.handlePresence);
|
|
369
|
+
this.rtmClient.removeEventListener("status", this.handleStatus);
|
|
370
|
+
await this.rtmClient.unsubscribe(this.roomChannel());
|
|
371
|
+
await this.rtmClient.unsubscribe(this.userChannel(this.userId));
|
|
372
|
+
window.clearInterval(this.intervalId);
|
|
373
|
+
}
|
|
344
374
|
handleRtmMessage = (evt) => {
|
|
345
375
|
this.receiveChunkMessage(ChunkedUpdateMessage.fromBuffer(evt.message, "", evt.customType), evt.publisher);
|
|
346
376
|
};
|
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\";", "import { SocketProvider, SocketProviderEvent, log } from \"@netless/forge-room\";\nimport EventEmitter from \"eventemitter3\";\nimport {v4 as uuidv4} from \"uuid\";\nimport {cyrb53} from \"./utils\";\n\nimport type {RTMClient, RTMEvents} from \"agora-rtm\";\n\nimport {ChunkedUpdateMessage} from \"./ChunkedUpdateMessage\";\n\nexport class RTMProvider_2_1 extends EventEmitter<SocketProviderEvent> implements SocketProvider {\n\n private rtmClient!: RTMClient;\n private roomId!: string;\n private userId!: string;\n\n private reconnectTimeout: any = null;\n private chunkedMessages: Map<string, ChunkedUpdateMessage[]> = new Map();\n private cachedMessages: ChunkedUpdateMessage[] = [];\n\n private intervalId: any = null;\n\n public constructor(rtmClient: RTMClient) {\n super();\n this.rtmClient = rtmClient;\n }\n\n private roomChannel(): string {\n return `r_${this.roomId}`;\n }\n\n private userChannel(userId: string): string {\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 public async resubscribe() {\n try {\n await this.rtmClient.subscribe(this.roomChannel());\n await this.rtmClient.subscribe(this.userChannel(this.userId));\n } catch(error: any) {\n this.emit(\"error\", `rtm subscribe fail, ${error}`);\n log(`rtm subscribe fail`, {\n error: error.toString(),\n }, \"error\");\n }\n }\n\n public async initialize(roomId: string, userId: string): Promise<void> {\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: any) {\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, { customType: msg.customType }).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\n private handleRtmMessage = (evt: RTMEvents.MessageEvent) => {\n this.receiveChunkMessage(ChunkedUpdateMessage.fromBuffer(evt.message as Uint8Array, \"\", evt.customType), evt.publisher);\n };\n\n private handleStatus = (connectionStatus: RTMEvents.RTMConnectionStatusChangeEvent) => {\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\n private handlePresence = (evt: RTMEvents.PresenceEvent) => {\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\n private receiveChunkMessage(msg: ChunkedUpdateMessage, publisher: string) {\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)\n .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\n public publish(buf: Uint8Array, customType: string, target: string = \"\") {\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\n public async userList(): Promise<Set<string>> {\n const output = new Set<string>();\n const result = await this.rtmClient.presence.whoNow(this.roomChannel(), \"MESSAGE\", {\n includedState: false,\n });\n var nextPage: string | null = result.nextPage;\n result.occupants.forEach((userInfo) => {\n const { userId } = 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 { userId } = userInfo;\n output.add(userId);\n });\n }\n return output;\n }\n}\n", "export const cyrb53 = (str: string, seed = 0) => {\n let h1 = 0xdeadbeef ^ seed, 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\n return 4294967296 * (2097151 & h2) + (h1 >>> 0);\n};", "export type ChunkedUpdateMessageType = {\n buf: Uint8Array;\n index: number;\n length: number;\n session: string;\n}\n\nexport class ChunkedUpdateMessage {\n\n static fromObject(obj: ChunkedUpdateMessageType, target: string, customType: string): ChunkedUpdateMessage {\n const msg = new ChunkedUpdateMessage();\n msg.target = target;\n msg.customType = customType;\n\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\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\n msg.buffer = new Uint8Array(\n obj.buf.length + sessionBuf.length + msg.header.buffer.byteLength\n );\n\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\n return msg;\n }\n\n static fromBuffer(buf: Uint8Array, target: string, customType: string) {\n const msg = new ChunkedUpdateMessage();\n\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\n return msg;\n }\n\n public target!: string;\n public customType!: string;\n public buffer!: Uint8Array;\n private header!: DataView;\n\n public get buf(): Uint8Array {\n const len = this.header.getInt32(0);\n return this.buffer.slice(0, len);\n }\n\n public get index(): number {\n return this.header.getUint8(8);\n }\n\n public get length(): number {\n return this.header.getUint8(9);\n }\n\n public get session(): string {\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\n private constructor() {}\n}", "import { SocketProvider, SocketProviderEvent, log } from \"@netless/forge-room\";\nimport EventEmitter from \"eventemitter3\";\nimport {v4 as uuidv4} from \"uuid\";\nimport {cyrb53} from \"./utils\";\n\nimport type {RTMClient, RTMEvents} from \"agora-rtm\";\nimport {ChunkedUpdateMessage} from \"./ChunkedUpdateMessage\";\n\nexport class RTMProvider_2_2 extends EventEmitter<SocketProviderEvent> implements SocketProvider {\n\n private rtmClient!: RTMClient;\n private roomId!: string;\n private userId!: string;\n\n private reconnectTimeout: any = null;\n private chunkedMessages: Map<string, ChunkedUpdateMessage[]> = new Map();\n private cachedMessages: ChunkedUpdateMessage[] = [];\n\n private intervalId: any = null;\n\n public constructor(rtmClient: RTMClient) {\n super();\n this.rtmClient = rtmClient;\n }\n\n private roomChannel(): string {\n return `r_${this.roomId}`;\n }\n\n private userChannel(userId: string): string {\n if (userId.length > 16) {\n userId = `${cyrb53(userId)}`;\n }\n return `${this.roomChannel()}_u_${userId}`;\n }\n\n public async initialize(roomId: string, userId: string): Promise<void> {\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: any) {\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, { customType: msg.customType }).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 private handleRtmMessage = (evt: RTMEvents.MessageEvent) => {\n this.receiveChunkMessage(ChunkedUpdateMessage.fromBuffer(evt.message as Uint8Array, \"\", evt.customType), evt.publisher);\n };\n\n private handleStatus = (connectionStatus: RTMEvents.RTMConnectionStatusChangeEvent) => {\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\n private handlePresence = (evt: RTMEvents.PresenceEvent) => {\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\n private receiveChunkMessage(msg: ChunkedUpdateMessage, publisher: string) {\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)\n .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\n public publish(buf: Uint8Array, customType: string, target: string = \"\") {\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\n public async userList(): Promise<Set<string>> {\n const output = new Set<string>();\n const result = await this.rtmClient.presence.whoNow(this.roomChannel(), \"MESSAGE\", {\n includedState: false,\n });\n var nextPage: string | null = result.nextPage;\n result.occupants.forEach((userInfo) => {\n const { userId } = 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 { userId } = userInfo;\n output.add(userId);\n });\n }\n return output;\n }\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\";", "import { SocketProvider, SocketProviderEvent, log } from \"@netless/forge-room\";\nimport EventEmitter from \"eventemitter3\";\nimport {v4 as uuidv4} from \"uuid\";\nimport {cyrb53} from \"./utils\";\n\nimport type {RTMClient, RTMEvents} from \"agora-rtm\";\n\nimport {ChunkedUpdateMessage} from \"./ChunkedUpdateMessage\";\n\nexport class RTMProvider_2_1 extends EventEmitter<SocketProviderEvent> implements SocketProvider {\n\n private rtmClient!: RTMClient;\n private roomId!: string;\n private userId!: string;\n\n private reconnectTimeout: any = null;\n private chunkedMessages: Map<string, ChunkedUpdateMessage[]> = new Map();\n private cachedMessages: ChunkedUpdateMessage[] = [];\n\n private intervalId: any = null;\n\n public constructor(rtmClient: RTMClient) {\n super();\n this.rtmClient = rtmClient;\n }\n\n private roomChannel(): string {\n return `r_${this.roomId}`;\n }\n\n private userChannel(userId: string): string {\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 public async resubscribe() {\n try {\n await this.rtmClient.subscribe(this.roomChannel());\n await this.rtmClient.subscribe(this.userChannel(this.userId));\n } catch(error: any) {\n this.emit(\"error\", `rtm subscribe fail, ${error}`);\n log(`rtm subscribe fail`, {\n error: error.toString(),\n }, \"error\");\n }\n }\n\n public async initialize(roomId: string, userId: string): Promise<void> {\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: any) {\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, { customType: msg.customType }).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\n public async dispose(): Promise<void> {\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\n private handleRtmMessage = (evt: RTMEvents.MessageEvent) => {\n this.receiveChunkMessage(ChunkedUpdateMessage.fromBuffer(evt.message as Uint8Array, \"\", evt.customType), evt.publisher);\n };\n\n private handleStatus = (connectionStatus: RTMEvents.RTMConnectionStatusChangeEvent) => {\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\n private handlePresence = (evt: RTMEvents.PresenceEvent) => {\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\n private receiveChunkMessage(msg: ChunkedUpdateMessage, publisher: string) {\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)\n .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\n public publish(buf: Uint8Array, customType: string, target: string = \"\") {\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\n public async userList(): Promise<Set<string>> {\n const output = new Set<string>();\n const result = await this.rtmClient.presence.whoNow(this.roomChannel(), \"MESSAGE\", {\n includedState: false,\n });\n var nextPage: string | null = result.nextPage;\n result.occupants.forEach((userInfo) => {\n const { userId } = 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 { userId } = userInfo;\n output.add(userId);\n });\n }\n return output;\n }\n}\n", "export const cyrb53 = (str: string, seed = 0) => {\n let h1 = 0xdeadbeef ^ seed, 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\n return 4294967296 * (2097151 & h2) + (h1 >>> 0);\n};", "export type ChunkedUpdateMessageType = {\n buf: Uint8Array;\n index: number;\n length: number;\n session: string;\n}\n\nexport class ChunkedUpdateMessage {\n\n static fromObject(obj: ChunkedUpdateMessageType, target: string, customType: string): ChunkedUpdateMessage {\n const msg = new ChunkedUpdateMessage();\n msg.target = target;\n msg.customType = customType;\n\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\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\n msg.buffer = new Uint8Array(\n obj.buf.length + sessionBuf.length + msg.header.buffer.byteLength\n );\n\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\n return msg;\n }\n\n static fromBuffer(buf: Uint8Array, target: string, customType: string) {\n const msg = new ChunkedUpdateMessage();\n\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\n return msg;\n }\n\n public target!: string;\n public customType!: string;\n public buffer!: Uint8Array;\n private header!: DataView;\n\n public get buf(): Uint8Array {\n const len = this.header.getInt32(0);\n return this.buffer.slice(0, len);\n }\n\n public get index(): number {\n return this.header.getUint8(8);\n }\n\n public get length(): number {\n return this.header.getUint8(9);\n }\n\n public get session(): string {\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\n private constructor() {}\n}", "import { SocketProvider, SocketProviderEvent, log } from \"@netless/forge-room\";\nimport EventEmitter from \"eventemitter3\";\nimport {v4 as uuidv4} from \"uuid\";\nimport {cyrb53} from \"./utils\";\n\nimport type {RTMClient, RTMEvents} from \"agora-rtm\";\nimport {ChunkedUpdateMessage} from \"./ChunkedUpdateMessage\";\n\nexport class RTMProvider_2_2 extends EventEmitter<SocketProviderEvent> implements SocketProvider {\n\n private rtmClient!: RTMClient;\n private roomId!: string;\n private userId!: string;\n\n private reconnectTimeout: any = null;\n private chunkedMessages: Map<string, ChunkedUpdateMessage[]> = new Map();\n private cachedMessages: ChunkedUpdateMessage[] = [];\n\n private intervalId: any = null;\n\n public constructor(rtmClient: RTMClient) {\n super();\n this.rtmClient = rtmClient;\n }\n\n private roomChannel(): string {\n return `r_${this.roomId}`;\n }\n\n private userChannel(userId: string): string {\n if (userId.length > 16) {\n userId = `${cyrb53(userId)}`;\n }\n return `${this.roomChannel()}_u_${userId}`;\n }\n\n public async initialize(roomId: string, userId: string): Promise<void> {\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: any) {\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, { customType: msg.customType }).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 public async resubscribe() {\n try {\n await this.rtmClient.subscribe(this.roomChannel());\n await this.rtmClient.subscribe(this.userChannel(this.userId));\n } catch(error: any) {\n this.emit(\"error\", `rtm subscribe fail, ${error}`);\n log(`rtm subscribe fail`, {\n error: error.toString(),\n }, \"error\");\n }\n }\n\n public async dispose(): Promise<void> {\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\n private handleRtmMessage = (evt: RTMEvents.MessageEvent) => {\n this.receiveChunkMessage(ChunkedUpdateMessage.fromBuffer(evt.message as Uint8Array, \"\", evt.customType), evt.publisher);\n };\n\n private handleStatus = (connectionStatus: RTMEvents.RTMConnectionStatusChangeEvent) => {\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\n private handlePresence = (evt: RTMEvents.PresenceEvent) => {\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\n private receiveChunkMessage(msg: ChunkedUpdateMessage, publisher: string) {\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)\n .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\n public publish(buf: Uint8Array, customType: string, target: string = \"\") {\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\n public async userList(): Promise<Set<string>> {\n const output = new Set<string>();\n const result = await this.rtmClient.presence.whoNow(this.roomChannel(), \"MESSAGE\", {\n includedState: false,\n });\n var nextPage: string | null = result.nextPage;\n result.occupants.forEach((userInfo) => {\n const { userId } = 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 { userId } = userInfo;\n output.add(userId);\n });\n }\n return output;\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["EventEmitter", "uuidv4", "result", "import_forge_room", "import_eventemitter3", "import_uuid", "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.6",
|
|
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.3"
|
|
15
15
|
},
|
|
16
16
|
"keywords": [],
|
|
17
17
|
"author": "",
|