diff --git a/packages/lib/link/connectors.js b/packages/lib/link/connectors.js index 1dd60cbe..8b797fbb 100644 --- a/packages/lib/link/connectors.js +++ b/packages/lib/link/connectors.js @@ -178,7 +178,7 @@ class WebSocketClientConnector extends WebSocketBaseConnector { setTimeout(timeout) { this._timeout = timeout; - if (this._reconnectId && this.timeout < this._reconnectDelay / 2) { + if (this._reconnectId && this._timeout < this._reconnectDelay / 2) { clearTimeout(this._reconnectId); this.reconnect(); } @@ -280,6 +280,7 @@ class WebSocketClientConnector extends WebSocketBaseConnector { this._lastReceivedSeq = null; this._sessionToken = null; this._sendBuffer.length = 0; + this._state = "new"; this._connected = false; this.emit("close"); return; diff --git a/packages/web_ui/src/bootstrap.jsx b/packages/web_ui/src/bootstrap.jsx index 6acef556..2de400dc 100644 --- a/packages/web_ui/src/bootstrap.jsx +++ b/packages/web_ui/src/bootstrap.jsx @@ -87,6 +87,7 @@ export default async function bootstrap() { wsUrl.protocol = wsUrl.protocol.replace("http", "ws"); let controlConnector = new ControlConnector(wsUrl, 10); + controlConnector.setTimeout(15); let control = new Control(controlConnector, plugins); ReactDOM.render(, document.getElementById("root")); diff --git a/packages/web_ui/src/components/App.jsx b/packages/web_ui/src/components/App.jsx index b5ea5aa8..89feee57 100644 --- a/packages/web_ui/src/components/App.jsx +++ b/packages/web_ui/src/components/App.jsx @@ -31,6 +31,7 @@ export default function App(props) { function clearToken() { setToken(null); + connector.token = null; localStorage.removeItem("master_token"); } @@ -54,6 +55,14 @@ export default function App(props) { connector.on("close", onClose); connector.on("error", onError); + return () => { + connector.off("error", onError); + connector.off("close", onClose); + connector.off("connect", onConnect); + }; + }, [props.control]); + + useEffect(() => { if (token && !connected) { if (props.control.loggingOut) { clearToken(); @@ -63,13 +72,7 @@ export default function App(props) { connector.connect(); } } - - return () => { - connector.off("error", onError); - connector.off("close", onClose); - connector.off("connect", onConnect); - }; - }); + }, [token, connected]); let page; if (connected) { diff --git a/packages/web_ui/src/util/websocket.jsx b/packages/web_ui/src/util/websocket.jsx index f0611eb8..dd93c94a 100644 --- a/packages/web_ui/src/util/websocket.jsx +++ b/packages/web_ui/src/util/websocket.jsx @@ -122,6 +122,10 @@ export class Control extends libLink.Link { } async updateLogSubscriptions() { + if (!this.connector.connected) { + return; + } + await libLink.messages.setLogSubscriptions.send(this, { all: false, master: false, @@ -137,8 +141,6 @@ export class Control extends libLink.Link { } async shutdown() { - this.connector.setTimeout(5); - try { await libLink.messages.prepareDisconnect.send(this); } catch (err) {