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"
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
}
}
......
......@@ -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") {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment