From 45eeb550b37ab0815434c37156df1993732020b4 Mon Sep 17 00:00:00 2001 From: Max Nuding Date: Sat, 15 Apr 2023 09:56:03 +0200 Subject: [PATCH] Auto reconnect to Mastodon WebSocket if it fails --- src/lib/server/timeline.ts | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/lib/server/timeline.ts b/src/lib/server/timeline.ts index 59bd80d..23defa6 100644 --- a/src/lib/server/timeline.ts +++ b/src/lib/server/timeline.ts @@ -78,7 +78,7 @@ export class TimelineReader { return false; } - private constructor() { + private startWebsocket() { const socket = new WebSocket(`wss://${MASTODON_INSTANCE}/api/v1/streaming`); socket.onopen = () => { socket.send('{ "type": "subscribe", "stream": "public:local"}'); @@ -113,13 +113,25 @@ export class TimelineReader { } }; socket.onclose = (event) => { - console.log('Closed', event, event.code, event.reason); + console.warn( + `Websocket connection to ${MASTODON_INSTANCE} closed. Code: ${event.code}, reason: '${event.reason}'` + ); + setTimeout(() => { + console.info(`Attempting to reconenct to WS`); + this.startWebsocket(); + }, 10000); }; socket.onerror = (event) => { - console.log('error', event, event.message, event.error); + console.error( + `Websocket connection to ${MASTODON_INSTANCE} failed. ${event.type}: ${event.error}, message: '${event.message}'` + ); }; } + private constructor() { + this.startWebsocket(); + } + public static init() { if (this._instance === undefined) { this._instance = new TimelineReader();