NativeWebSocket icon indicating copy to clipboard operation
NativeWebSocket copied to clipboard

WebSocketConnect in reconnect case

Open VarnavaA opened this issue 2 years ago • 2 comments

Hi @endel Thank you for your great work I have tryed to resolve issue with reconnect socket that was close before In jslib there is method WebSocketConnect and in this method we have condition if (instance.ws !== null) {...} but if we called close socket before, we deleted instance.ws

instance.ws.onclose = function (ev) {
     if (webSocketState.onClose)
         Module.dynCall_vii(webSocketState.onClose, instanceId, ev.code);
     delete instance.ws;
};

then I try to connect web socket again and instance.ws !== null will be always true in this case "instance.ws" will be 'undefined', so the better condition will be '!=' not '!==' Does it make sense? Thank you

VarnavaA avatar Jun 13 '23 00:06 VarnavaA

You can easily automatically reconnected by checking the socket status and attempting to connect if it is equal to WebSocketState.Closed in a loop. (Eg. in the Update() method or with InvokeRepeating().

void TryReconnect() { if (ws.State == WebSocketState.Closed) { ws.Connect(); } }

Edit: This worked fine on my editor, but doesn't seem to work on my Quest 2. I have to restart the app every time the websocket connection closes, even if I try to create a new websocket instance.

LittleNyanCat avatar Oct 18 '23 18:10 LittleNyanCat

This approach void TryReconnect() { if (ws.State == WebSocketState.Closed) { ws.Connect(); } } doesn't seems to work neither in Editor nor in build in my case.

I found that full deleting of WebSocket object, "unreferencing" and recreating it and reconnecting works in my case.

I also noticed that connection can be interrupted by OnApplicationFocus(false), so in this case reconecting on OnApplicationFocus(true) helps.

LinaEagle avatar Jul 05 '24 10:07 LinaEagle