diff --git a/src/queue.js b/src/queue.js index e9359b8e902a21518621bb0337864e6fb1578542..b138bccc09c6bbaeea0bfd2a339e57bb56189fd3 100644 --- a/src/queue.js +++ b/src/queue.js @@ -4,11 +4,18 @@ import MessagePack from "what-the-pack" import pako from "pako" import uuidv4 from "uuid/v4" -const { encode, decode } = MessagePack.initialize(2 ** 22) +const MESSAGE_BUFFER_SIZE = 2 ** 24 // 16MB +const MESSAGE_SLICE_SIZE = 2 ** 10 // 1KB -const buffer = new Map() +const { encode, decode } = MessagePack.initialize(MESSAGE_BUFFER_SIZE) + +const buffer = {} self.onmessage = (event) => { + if (!event || !event.data) { + return + } + if (event.data.method == "send" || event.data.method == "broadcast") { let message = event.data.message const compressed = typeof message == "object" @@ -20,12 +27,16 @@ self.onmessage = (event) => { message = pako.deflate(message) } - for (let offset = 0; offset < message.length; offset += 2 ** 10) { + for ( + let offset = 0; + offset < message.length; + offset += MESSAGE_SLICE_SIZE + ) { event.data.message = { uuid, - message: message.subarray(offset, offset + 2 ** 10), - slice: offset / 2 ** 10, - length: Math.ceil(message.length / 2 ** 10), + message: message.subarray(offset, offset + MESSAGE_SLICE_SIZE), + slice: offset / MESSAGE_SLICE_SIZE, + length: Math.ceil(message.length / MESSAGE_SLICE_SIZE), compressed, } @@ -35,16 +46,16 @@ self.onmessage = (event) => { let message = event.data.message.message if (event.data.message.length > 1) { - let messages = buffer.get(event.data.peer.id) + let messages = buffer[event.data.peer.id] if (!messages) { - messages = new Map() - buffer.set(event.data.peer.id, messages) + messages = {} + buffer[event.data.peer.id] = messages } - let slices = messages.get(event.data.message.uuid) + let slices = messages[event.data.message.uuid] if (!slices) { slices = [] - messages.set(event.data.message.uuid, slices) + messages[event.data.message.uuid] = slices } slices.push(event.data.message) @@ -62,7 +73,7 @@ self.onmessage = (event) => { let offset = 0 for (const slice of slices) { - message.set(slice.message, offset) + message[slice.message] = offset offset += slice.message.length } } diff --git a/src/room.js b/src/room.js index 3f17a313f5c5b184f14a9dbb0f1bfb69ea3c90e9..88bf53474ae64d960cc451e03ddb64e9c1ead3d3 100644 --- a/src/room.js +++ b/src/room.js @@ -97,7 +97,7 @@ class Room extends EventTarget { new CustomEvent("userConnection", { detail: quality }), ) } else if (event.action == "userID") { - const { id } = event + const { user: id } = event this.ownID = id this.dispatchEvent(new CustomEvent("allocateOwnID", { detail: id })) } else if (event.action == "userJoined") {