mirror of
https://github.com/HeyPuter/puter.git
synced 2026-01-25 22:50:24 -06:00
automatic reconnection on disconnect
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user