automatic reconnection on disconnect

This commit is contained in:
ProgrammerIn-wonderland
2025-01-15 17:12:42 -05:00
parent 17d0738d62
commit 5798fcd042

View File

@@ -6,34 +6,40 @@ export class PWispHandler {
_bufferMax;
streamMap = new Map();
constructor(wispURL, puterAuth) {
this._ws = new WebSocket(wispURL);
this._ws.binaryType = "arraybuffer"
this._ws.onmessage = (event) => {
const parsed = parseIncomingPacket(new Uint8Array(event.data));
switch (parsed.packetType) {
case DATA:
this.streamMap.get(parsed.streamID).dataCallBack(parsed.payload.slice(0)) // return a copy for the user to do as they please
break;
case CONTINUE:
if (parsed.streamID === 0) {
this._bufferMax = parsed.remainingBuffer;
return;
}
this.streamMap.get(parsed.streamID).buffer = parsed.remainingBuffer;
this._continue()
break;
case CLOSE:
this.streamMap.get(parsed.streamID).closeCallBack(parsed.reason);
break;
case INFO:
puterAuth && this._ws.send(createWispPacket({
packetType: INFO,
streamID: 0,
puterAuth
}))
break;
const setup = () => {
this._ws = new WebSocket(wispURL);
this._ws.binaryType = "arraybuffer"
this._ws.onmessage = (event) => {
const parsed = parseIncomingPacket(new Uint8Array(event.data));
switch (parsed.packetType) {
case DATA:
this.streamMap.get(parsed.streamID).dataCallBack(parsed.payload.slice(0)) // return a copy for the user to do as they please
break;
case CONTINUE:
if (parsed.streamID === 0) {
this._bufferMax = parsed.remainingBuffer;
this._ws.onclose = () => {
setTimeout(setup(), 1000);
}
return;
}
this.streamMap.get(parsed.streamID).buffer = parsed.remainingBuffer;
this._continue()
break;
case CLOSE:
this.streamMap.get(parsed.streamID).closeCallBack(parsed.reason);
break;
case INFO:
puterAuth && this._ws.send(createWispPacket({
packetType: INFO,
streamID: 0,
puterAuth
}))
break;
}
}
}
setup();
}
_continue(streamID) {
const queue = this.streamMap.get(streamID).queue;