From 8968d684b1c78103eb64c10f4d7a6b3784b25690 Mon Sep 17 00:00:00 2001 From: John St Leger Date: Wed, 2 Feb 2022 17:09:02 +0000 Subject: [PATCH 1/2] Call onclose when closing the connection in the check interval Websocket does not call onclose when the socket is closed manually --- src/y-websocket.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/y-websocket.js b/src/y-websocket.js index cd7c8f33..212b27c6 100644 --- a/src/y-websocket.js +++ b/src/y-websocket.js @@ -290,6 +290,9 @@ export class WebsocketProvider extends Observable { // no message received in a long time - not even your own awareness // updates (which are updated every 15 seconds) /** @type {WebSocket} */ (this.ws).close() + + // Websocket does not call onclose when the socket is closed manually + /** @type {WebSocket} */ (this.ws).onclose() } }, messageReconnectTimeout / 10)) if (connect) { From 2f33ae273e6e01a912ee4a203ce79dc387d26f90 Mon Sep 17 00:00:00 2001 From: John St Leger Date: Mon, 7 Feb 2022 11:44:42 +0000 Subject: [PATCH 2/2] Amend types and build --- src/y-websocket.js | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/y-websocket.js b/src/y-websocket.js index 212b27c6..6b79c251 100644 --- a/src/y-websocket.js +++ b/src/y-websocket.js @@ -289,10 +289,18 @@ export class WebsocketProvider extends Observable { if (this.wsconnected && messageReconnectTimeout < time.getUnixTime() - this.wsLastMessageReceived) { // no message received in a long time - not even your own awareness // updates (which are updated every 15 seconds) - /** @type {WebSocket} */ (this.ws).close() - // Websocket does not call onclose when the socket is closed manually - /** @type {WebSocket} */ (this.ws).onclose() + if (!this.ws) { + setupWS(this); + return; + }; + + this.ws.close(); + + if (typeof this.ws.onclose === 'function') { + // ws.onclose is not called after the websocket is closed manually in Safari + this.ws.onclose(new CloseEvent('manual close')); + } } }, messageReconnectTimeout / 10)) if (connect) {