From da4c568cbab8b6d0df79e7092cc10dcb826c4ea6 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Tue, 15 Mar 2022 13:50:52 +0100 Subject: [PATCH 1/4] fix(llc): make ws reconnection more robust --- packages/stream_chat/lib/src/client/client.dart | 1 + packages/stream_chat/lib/src/ws/websocket.dart | 8 ++++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/stream_chat/lib/src/client/client.dart b/packages/stream_chat/lib/src/client/client.dart index c3605ac5..00b0433b 100644 --- a/packages/stream_chat/lib/src/client/client.dart +++ b/packages/stream_chat/lib/src/client/client.dart @@ -374,6 +374,7 @@ class StreamChatClient { final event = await _ws.connect(user); return user.merge(event.me); } catch (e, stk) { + _wsConnectionStatus = ConnectionStatus.disconnected; logger.severe('error connecting ws', e, stk); rethrow; } diff --git a/packages/stream_chat/lib/src/ws/websocket.dart b/packages/stream_chat/lib/src/ws/websocket.dart index 82c7d7c1..20d54879 100644 --- a/packages/stream_chat/lib/src/ws/websocket.dart +++ b/packages/stream_chat/lib/src/ws/websocket.dart @@ -190,8 +190,12 @@ class WebSocket with TimerHelper { _connectionStatus = ConnectionStatus.connecting; connectionCompleter = Completer(); - final uri = await _buildUri(); - _initWebSocketChannel(uri); + try { + final uri = await _buildUri(); + _initWebSocketChannel(uri); + } catch (e, stk) { + _onConnectionError(e, stk); + } return connectionCompleter!.future; } From f301a467bafc28b6321478e6184135cd5aeed179 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Tue, 15 Mar 2022 13:51:31 +0100 Subject: [PATCH 2/4] chore(llc): update changelog --- packages/stream_chat/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/stream_chat/CHANGELOG.md b/packages/stream_chat/CHANGELOG.md index ccd95ccf..14f23f4c 100644 --- a/packages/stream_chat/CHANGELOG.md +++ b/packages/stream_chat/CHANGELOG.md @@ -2,6 +2,7 @@ 🐞 Fixed - Unread count specific to channel setting global unread count on a specific case. +- The reconnection logic for the ws is now more robust. ## 3.5.0 From 56b3506da35027bce26f6a6e3efc8ecd7e0384d4 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Tue, 15 Mar 2022 15:56:26 +0100 Subject: [PATCH 3/4] fix(llc): ensure reconnection is automatic --- packages/stream_chat/lib/src/client/client.dart | 1 - packages/stream_chat/lib/src/ws/websocket.dart | 7 ++++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/stream_chat/lib/src/client/client.dart b/packages/stream_chat/lib/src/client/client.dart index 00b0433b..c3605ac5 100644 --- a/packages/stream_chat/lib/src/client/client.dart +++ b/packages/stream_chat/lib/src/client/client.dart @@ -374,7 +374,6 @@ class StreamChatClient { final event = await _ws.connect(user); return user.merge(event.me); } catch (e, stk) { - _wsConnectionStatus = ConnectionStatus.disconnected; logger.severe('error connecting ws', e, stk); rethrow; } diff --git a/packages/stream_chat/lib/src/ws/websocket.dart b/packages/stream_chat/lib/src/ws/websocket.dart index 20d54879..28f99fc5 100644 --- a/packages/stream_chat/lib/src/ws/websocket.dart +++ b/packages/stream_chat/lib/src/ws/websocket.dart @@ -112,6 +112,7 @@ class WebSocket with TimerHelper { if (_webSocketChannel != null) { _closeWebSocketChannel(); } + // throw Error(); _webSocketChannel = webSocketChannelProvider?.call(uri) ?? WebSocketChannel.connect(uri); _subscribeToWebSocketChannel(); @@ -220,7 +221,11 @@ class WebSocket with TimerHelper { Duration(milliseconds: delay), () async { final uri = await _buildUri(refreshToken: refreshToken); - _initWebSocketChannel(uri); + try { + _initWebSocketChannel(uri); + } catch (e, stk) { + _onConnectionError(e, stk); + } }, ); } From 8f7908f319952010f2613a0538bc594b909c4187 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Tue, 15 Mar 2022 16:16:52 +0100 Subject: [PATCH 4/4] Update packages/stream_chat/lib/src/ws/websocket.dart Co-authored-by: Gordon --- packages/stream_chat/lib/src/ws/websocket.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/stream_chat/lib/src/ws/websocket.dart b/packages/stream_chat/lib/src/ws/websocket.dart index 28f99fc5..888ba08b 100644 --- a/packages/stream_chat/lib/src/ws/websocket.dart +++ b/packages/stream_chat/lib/src/ws/websocket.dart @@ -112,7 +112,6 @@ class WebSocket with TimerHelper { if (_webSocketChannel != null) { _closeWebSocketChannel(); } - // throw Error(); _webSocketChannel = webSocketChannelProvider?.call(uri) ?? WebSocketChannel.connect(uri); _subscribeToWebSocketChannel();