Fix out of order WS issues on firefox
This commit is contained in:
parent
a605f1672a
commit
3cdb1bb8e1
2 changed files with 82 additions and 60 deletions
|
@ -143,37 +143,18 @@ class Localuser {
|
|||
let w;
|
||||
let r;
|
||||
let arr;
|
||||
let build = "";
|
||||
if (DecompressionStream) {
|
||||
ds = new DecompressionStream("deflate");
|
||||
w = ds.writable.getWriter();
|
||||
r = ds.readable.getReader();
|
||||
arr = new Uint8Array();
|
||||
}
|
||||
let build = "";
|
||||
this.ws.addEventListener('message', async (event) => {
|
||||
let temp;
|
||||
if (event.data instanceof Blob) {
|
||||
const buff = await event.data.arrayBuffer();
|
||||
const array = new Uint8Array(buff);
|
||||
const temparr = new Uint8Array(array.length + arr.length);
|
||||
temparr.set(arr, 0);
|
||||
temparr.set(array, arr.length);
|
||||
arr = temparr;
|
||||
const len = array.length;
|
||||
if (!(array[len - 1] === 255 && array[len - 2] === 255 && array[len - 3] === 0 && array[len - 4] === 0)) {
|
||||
return;
|
||||
}
|
||||
w.write(arr.buffer);
|
||||
arr = new Uint8Array();
|
||||
//console.log(data,test);
|
||||
(async () => {
|
||||
let temp;
|
||||
while (true) {
|
||||
const read = (await r.read());
|
||||
const data = new TextDecoder().decode(read.value);
|
||||
if (data === "") {
|
||||
break;
|
||||
}
|
||||
build += data;
|
||||
console.log("temp");
|
||||
try {
|
||||
temp = JSON.parse(build);
|
||||
build = "";
|
||||
|
@ -185,14 +166,45 @@ class Localuser {
|
|||
catch {
|
||||
}
|
||||
}
|
||||
})();
|
||||
}
|
||||
let order = new Promise((res) => (res()));
|
||||
this.ws.addEventListener('message', async (event) => {
|
||||
const temp2 = order;
|
||||
let res;
|
||||
order = new Promise((r) => (res = r));
|
||||
await temp2;
|
||||
let temp;
|
||||
try {
|
||||
if (event.data instanceof Blob) {
|
||||
const buff = await event.data.arrayBuffer();
|
||||
const array = new Uint8Array(buff);
|
||||
const temparr = new Uint8Array(array.length + arr.length);
|
||||
temparr.set(arr, 0);
|
||||
temparr.set(array, arr.length);
|
||||
arr = temparr;
|
||||
const len = array.length;
|
||||
if (!(array[len - 1] === 255 && array[len - 2] === 255 && array[len - 3] === 0 && array[len - 4] === 0)) {
|
||||
return;
|
||||
}
|
||||
w.write(arr.buffer);
|
||||
arr = new Uint8Array();
|
||||
return; //had to move the while loop due to me being dumb
|
||||
}
|
||||
else {
|
||||
temp = JSON.parse(event.data);
|
||||
}
|
||||
if (temp.op === 0 && temp.t === "READY") {
|
||||
returny();
|
||||
}
|
||||
this.handleEvent(temp);
|
||||
}
|
||||
else {
|
||||
temp = JSON.parse(event.data);
|
||||
catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
if (temp.op === 0 && temp.t === "READY") {
|
||||
returny();
|
||||
finally {
|
||||
res();
|
||||
}
|
||||
this.handleEvent(temp);
|
||||
});
|
||||
this.ws.addEventListener("close", event => {
|
||||
this.ws = undefined;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue