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 w;
|
||||||
let r;
|
let r;
|
||||||
let arr;
|
let arr;
|
||||||
|
let build = "";
|
||||||
if (DecompressionStream) {
|
if (DecompressionStream) {
|
||||||
ds = new DecompressionStream("deflate");
|
ds = new DecompressionStream("deflate");
|
||||||
w = ds.writable.getWriter();
|
w = ds.writable.getWriter();
|
||||||
r = ds.readable.getReader();
|
r = ds.readable.getReader();
|
||||||
arr = new Uint8Array();
|
arr = new Uint8Array();
|
||||||
}
|
(async () => {
|
||||||
let build = "";
|
let temp;
|
||||||
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);
|
|
||||||
while (true) {
|
while (true) {
|
||||||
const read = (await r.read());
|
const read = (await r.read());
|
||||||
const data = new TextDecoder().decode(read.value);
|
const data = new TextDecoder().decode(read.value);
|
||||||
if (data === "") {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
build += data;
|
build += data;
|
||||||
console.log("temp");
|
|
||||||
try {
|
try {
|
||||||
temp = JSON.parse(build);
|
temp = JSON.parse(build);
|
||||||
build = "";
|
build = "";
|
||||||
|
@ -185,14 +166,45 @@ class Localuser {
|
||||||
catch {
|
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 {
|
catch (e) {
|
||||||
temp = JSON.parse(event.data);
|
console.error(e);
|
||||||
}
|
}
|
||||||
if (temp.op === 0 && temp.t === "READY") {
|
finally {
|
||||||
returny();
|
res();
|
||||||
}
|
}
|
||||||
this.handleEvent(temp);
|
|
||||||
});
|
});
|
||||||
this.ws.addEventListener("close", event => {
|
this.ws.addEventListener("close", event => {
|
||||||
this.ws = undefined;
|
this.ws = undefined;
|
||||||
|
|
|
@ -149,41 +149,18 @@ class Localuser{
|
||||||
let w:WritableStreamDefaultWriter;
|
let w:WritableStreamDefaultWriter;
|
||||||
let r:ReadableStreamDefaultReader;
|
let r:ReadableStreamDefaultReader;
|
||||||
let arr:Uint8Array;
|
let arr:Uint8Array;
|
||||||
|
let build="";
|
||||||
if(DecompressionStream){
|
if(DecompressionStream){
|
||||||
ds = new DecompressionStream("deflate");
|
ds = new DecompressionStream("deflate");
|
||||||
w= ds.writable.getWriter();
|
w= ds.writable.getWriter();
|
||||||
r=ds.readable.getReader();
|
r=ds.readable.getReader();
|
||||||
arr=new Uint8Array();
|
arr=new Uint8Array();
|
||||||
}
|
(async ()=>{
|
||||||
|
let temp:any;
|
||||||
|
|
||||||
let build="";
|
|
||||||
this.ws.addEventListener('message', async (event) => {
|
|
||||||
let temp:{op:number,t:string};
|
|
||||||
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);
|
|
||||||
while(true){
|
while(true){
|
||||||
const read=(await r.read());
|
const read=(await r.read());
|
||||||
const data=new TextDecoder().decode(read.value);
|
const data=new TextDecoder().decode(read.value);
|
||||||
if(data===""){
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
build+=data;
|
build+=data;
|
||||||
console.log("temp");
|
|
||||||
try{
|
try{
|
||||||
temp=JSON.parse(build);
|
temp=JSON.parse(build);
|
||||||
build="";
|
build="";
|
||||||
|
@ -194,14 +171,47 @@ class Localuser{
|
||||||
}catch{
|
}catch{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}else{
|
})();
|
||||||
temp=JSON.parse(event.data);
|
}
|
||||||
}
|
|
||||||
if(temp.op===0&&temp.t==="READY"){
|
|
||||||
returny();
|
|
||||||
}
|
|
||||||
this.handleEvent(temp);
|
|
||||||
|
|
||||||
|
|
||||||
|
let order=new Promise<void>((res)=>(res()));
|
||||||
|
|
||||||
|
this.ws.addEventListener('message', async (event) => {
|
||||||
|
const temp2=order;
|
||||||
|
let res:Function;
|
||||||
|
order=new Promise<void>((r)=>(res=r))
|
||||||
|
await temp2;
|
||||||
|
let temp:{op:number,t:string};
|
||||||
|
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);
|
||||||
|
}catch(e){
|
||||||
|
console.error(e);
|
||||||
|
}finally{
|
||||||
|
res();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
this.ws.addEventListener("close", event => {
|
this.ws.addEventListener("close", event => {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue