diff --git a/gulp/res/js/live.js b/gulp/res/js/live.js index 276a74ac..19652405 100644 --- a/gulp/res/js/live.js +++ b/gulp/res/js/live.js @@ -21,6 +21,7 @@ window.addEventListener('settingsReady', function() { //after domcontentloaded }; let lastPostIds = {}; let liveTimeout; + let retrySocketTimeout; const postContainers = document.getElementsByClassName('post-container'); for (let i = 0; i < postContainers.length; i++) { const postContainer = postContainers[i]; @@ -227,6 +228,17 @@ window.addEventListener('settingsReady', function() { //after domcontentloaded updateLive(`Connected for live posts (${latency}ms)`, '#0de600'); }); }; + const fallbackToPolling = () => { + console.log('falling back to polling'); + socket.close(); + supportsWebSockets = false; + enableLive(); + clearTimeout(retrySocketTimeout); + retrySocketTimeout = setTimeout(() => { + supportsWebSockets = true; + enableLive(); + }, 6000); + }; socket.on('connect', async () => { console.log('socket connected'); await fetchNewPosts(); @@ -259,6 +271,7 @@ window.addEventListener('settingsReady', function() { //after domcontentloaded socket.on('connect_error', (e) => { updateLive('Error connecting', 'orange'); console.error(e); + fallbackToPolling(); }); socket.on('reconnect_error', (e) => { updateLive('Error reconnecting', 'orange'); @@ -267,10 +280,7 @@ window.addEventListener('settingsReady', function() { //after domcontentloaded socket.on('reconnect_failed', (e) => { updateLive('Failed reconnecting', 'orange'); console.error(e); - console.log('failed to reconnnect, falling back to polling'); - socket.close(); - supportsWebSockets = false; - enableLive(); + fallbackToPolling(); }); socket.on('newPost', newPost); socket.on('markPost', markPost);