From bdbbe1d596fc8f3dbcbfa89ade52259eb9dba522 Mon Sep 17 00:00:00 2001 From: Jakob Ackermann Date: Mon, 30 Mar 2020 12:19:48 +0200 Subject: [PATCH] Merge pull request #2687 from overleaf/jpa-fix-failing-reconnect-caused-by-backend [frontend] ConnectionManager: fix failing reconnects (caused by backend) GitOrigin-RevId: f66e45fcb22849c2057b24eabde319ae7781ec51 --- .../js/ide/connection/ConnectionManager.js | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/services/web/frontend/js/ide/connection/ConnectionManager.js b/services/web/frontend/js/ide/connection/ConnectionManager.js index c892a843f6..5a7021bd72 100644 --- a/services/web/frontend/js/ide/connection/ConnectionManager.js +++ b/services/web/frontend/js/ide/connection/ConnectionManager.js @@ -270,6 +270,8 @@ The editor will refresh in automatically in 10 seconds.\ this.$scope.connection.stillReconnecting = true } }, 1000) + } else if (state === 'reconnectFailed') { + // reconnect attempt failed } else if (state === 'authenticating') { // socket connection has been established, trying to authenticate } else if (state === 'joining') { @@ -507,6 +509,24 @@ Something went wrong connecting to your project. Please refresh if this continue } this.updateConnectionManagerState('reconnecting') sl_console.log('[ConnectionManager] Starting new connection') + + const removeHandler = () => { + this.ide.socket.removeListener('error', handleFailure) + this.ide.socket.removeListener('connect', handleSuccess) + } + const handleFailure = () => { + sl_console.log('[ConnectionManager] tryReconnect: failed') + removeHandler() + this.updateConnectionManagerState('reconnectFailed') + this.tryReconnectWithRateLimit({ force: true }) + } + const handleSuccess = () => { + sl_console.log('[ConnectionManager] tryReconnect: success') + removeHandler() + } + this.ide.socket.on('error', handleFailure) + this.ide.socket.on('connect', handleSuccess) + // use socket.io connect() here to make a single attempt, the // reconnect() method makes multiple attempts this.ide.socket.socket.connect()