Skip to content
Snippets Groups Projects
Commit 876088d0 authored by Moritz Langenstein's avatar Moritz Langenstein
Browse files

(ml5717) Refactoring of queue.js

parent 7467756d
No related branches found
No related tags found
1 merge request!47Partial Mesh and connection stability
Pipeline #103642 passed
...@@ -4,11 +4,18 @@ import MessagePack from "what-the-pack" ...@@ -4,11 +4,18 @@ import MessagePack from "what-the-pack"
import pako from "pako" import pako from "pako"
import uuidv4 from "uuid/v4" 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) => { self.onmessage = (event) => {
if (!event || !event.data) {
return
}
if (event.data.method == "send" || event.data.method == "broadcast") { if (event.data.method == "send" || event.data.method == "broadcast") {
let message = event.data.message let message = event.data.message
const compressed = typeof message == "object" const compressed = typeof message == "object"
...@@ -20,12 +27,16 @@ self.onmessage = (event) => { ...@@ -20,12 +27,16 @@ self.onmessage = (event) => {
message = pako.deflate(message) 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 = { event.data.message = {
uuid, uuid,
message: message.subarray(offset, offset + 2 ** 10), message: message.subarray(offset, offset + MESSAGE_SLICE_SIZE),
slice: offset / 2 ** 10, slice: offset / MESSAGE_SLICE_SIZE,
length: Math.ceil(message.length / 2 ** 10), length: Math.ceil(message.length / MESSAGE_SLICE_SIZE),
compressed, compressed,
} }
...@@ -35,16 +46,16 @@ self.onmessage = (event) => { ...@@ -35,16 +46,16 @@ self.onmessage = (event) => {
let message = event.data.message.message let message = event.data.message.message
if (event.data.message.length > 1) { if (event.data.message.length > 1) {
let messages = buffer.get(event.data.peer.id) let messages = buffer[event.data.peer.id]
if (!messages) { if (!messages) {
messages = new Map() messages = {}
buffer.set(event.data.peer.id, messages) buffer[event.data.peer.id] = messages
} }
let slices = messages.get(event.data.message.uuid) let slices = messages[event.data.message.uuid]
if (!slices) { if (!slices) {
slices = [] slices = []
messages.set(event.data.message.uuid, slices) messages[event.data.message.uuid] = slices
} }
slices.push(event.data.message) slices.push(event.data.message)
...@@ -62,7 +73,7 @@ self.onmessage = (event) => { ...@@ -62,7 +73,7 @@ self.onmessage = (event) => {
let offset = 0 let offset = 0
for (const slice of slices) { for (const slice of slices) {
message.set(slice.message, offset) message[slice.message] = offset
offset += slice.message.length offset += slice.message.length
} }
} }
......
...@@ -97,7 +97,7 @@ class Room extends EventTarget { ...@@ -97,7 +97,7 @@ class Room extends EventTarget {
new CustomEvent("userConnection", { detail: quality }), new CustomEvent("userConnection", { detail: quality }),
) )
} else if (event.action == "userID") { } else if (event.action == "userID") {
const { id } = event const { user: id } = event
this.ownID = id this.ownID = id
this.dispatchEvent(new CustomEvent("allocateOwnID", { detail: id })) this.dispatchEvent(new CustomEvent("allocateOwnID", { detail: id }))
} else if (event.action == "userJoined") { } else if (event.action == "userJoined") {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment