@netless/forge-rtm 0.1.5 → 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 -1
- package/dist/RTM_2_2.d.ts +4 -0
- package/dist/RTM_2_2.d.ts.map +1 -1
- package/dist/rtm-provider.esm.js +14 -0
- package/dist/rtm-provider.esm.js.map +2 -2
- package/dist/rtm-provider.js +14 -0
- package/dist/rtm-provider.js.map +2 -2
- package/package.json +2 -2
package/README.md
CHANGED
package/dist/RTM_2_2.d.ts
CHANGED
|
@@ -13,6 +13,10 @@ 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>;
|
|
16
20
|
dispose(): Promise<void>;
|
|
17
21
|
private handleRtmMessage;
|
|
18
22
|
private handleStatus;
|
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;
|
|
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
|
@@ -312,6 +312,20 @@ var RTMProvider_2_2 = class extends EventEmitter2 {
|
|
|
312
312
|
}
|
|
313
313
|
}, 32);
|
|
314
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
|
+
}
|
|
315
329
|
async dispose() {
|
|
316
330
|
this.rtmClient.removeEventListener("message", this.handleRtmMessage);
|
|
317
331
|
this.rtmClient.removeEventListener("presence", this.handlePresence);
|
|
@@ -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 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 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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",
|
|
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
|
@@ -349,6 +349,20 @@ var RTMProvider_2_2 = class extends import_eventemitter32.default {
|
|
|
349
349
|
}
|
|
350
350
|
}, 32);
|
|
351
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
|
+
}
|
|
352
366
|
async dispose() {
|
|
353
367
|
this.rtmClient.removeEventListener("message", this.handleRtmMessage);
|
|
354
368
|
this.rtmClient.removeEventListener("presence", this.handlePresence);
|
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 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 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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",
|
|
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": "",
|