diff --git a/lib/pods/websocket.dart b/lib/pods/websocket.dart index fdd41b9..6fcdeab 100644 --- a/lib/pods/websocket.dart +++ b/lib/pods/websocket.dart @@ -17,6 +17,7 @@ sealed class WebSocketState with _$WebSocketState { const factory WebSocketState.connected() = _Connected; const factory WebSocketState.connecting() = _Connecting; const factory WebSocketState.disconnected() = _Disconnected; + const factory WebSocketState.serverDown() = _ServerDown; const factory WebSocketState.duplicateDevice() = _DuplicateDevice; const factory WebSocketState.error(String message) = _Error; } @@ -81,6 +82,11 @@ class WebSocketService { final dataStr = data is Uint8List ? utf8.decode(data) : data.toString(); final packet = WebSocketPacket.fromJson(jsonDecode(dataStr)); + if (packet.type == 'error.dupe') { + _statusStreamController.sink.add(WebSocketState.duplicateDevice()); + _channel!.sink.close(); + return; + } _streamController.sink.add(packet); log( "[WebSocket] Received packet: ${packet.type} ${packet.errorMessage}", @@ -94,16 +100,9 @@ class WebSocketService { } }, onDone: () { - if (_channel?.closeCode == 1006) { - log( - '[WebSocket] Connection closed due to duplicate device. Not going to reconnect...', - ); - _statusStreamController.sink.add(WebSocketState.duplicateDevice()); - } else { - log('[WebSocket] Connection closed, attempting to reconnect...'); - _scheduleReconnect(); - _statusStreamController.sink.add(WebSocketState.disconnected()); - } + log('[WebSocket] Connection closed, attempting to reconnect...'); + _scheduleReconnect(); + _statusStreamController.sink.add(WebSocketState.disconnected()); }, onError: (error) { log('[WebSocket] Error occurred: $error, attempting to reconnect...'); diff --git a/lib/pods/websocket.freezed.dart b/lib/pods/websocket.freezed.dart index 83e9597..94a0e0b 100644 --- a/lib/pods/websocket.freezed.dart +++ b/lib/pods/websocket.freezed.dart @@ -61,13 +61,14 @@ extension WebSocketStatePatterns on WebSocketState { /// } /// ``` -@optionalTypeArgs TResult maybeMap({TResult Function( _Connected value)? connected,TResult Function( _Connecting value)? connecting,TResult Function( _Disconnected value)? disconnected,TResult Function( _DuplicateDevice value)? duplicateDevice,TResult Function( _Error value)? error,required TResult orElse(),}){ +@optionalTypeArgs TResult maybeMap({TResult Function( _Connected value)? connected,TResult Function( _Connecting value)? connecting,TResult Function( _Disconnected value)? disconnected,TResult Function( _ServerDown value)? serverDown,TResult Function( _DuplicateDevice value)? duplicateDevice,TResult Function( _Error value)? error,required TResult orElse(),}){ final _that = this; switch (_that) { case _Connected() when connected != null: return connected(_that);case _Connecting() when connecting != null: return connecting(_that);case _Disconnected() when disconnected != null: -return disconnected(_that);case _DuplicateDevice() when duplicateDevice != null: +return disconnected(_that);case _ServerDown() when serverDown != null: +return serverDown(_that);case _DuplicateDevice() when duplicateDevice != null: return duplicateDevice(_that);case _Error() when error != null: return error(_that);case _: return orElse(); @@ -87,13 +88,14 @@ return error(_that);case _: /// } /// ``` -@optionalTypeArgs TResult map({required TResult Function( _Connected value) connected,required TResult Function( _Connecting value) connecting,required TResult Function( _Disconnected value) disconnected,required TResult Function( _DuplicateDevice value) duplicateDevice,required TResult Function( _Error value) error,}){ +@optionalTypeArgs TResult map({required TResult Function( _Connected value) connected,required TResult Function( _Connecting value) connecting,required TResult Function( _Disconnected value) disconnected,required TResult Function( _ServerDown value) serverDown,required TResult Function( _DuplicateDevice value) duplicateDevice,required TResult Function( _Error value) error,}){ final _that = this; switch (_that) { case _Connected(): return connected(_that);case _Connecting(): return connecting(_that);case _Disconnected(): -return disconnected(_that);case _DuplicateDevice(): +return disconnected(_that);case _ServerDown(): +return serverDown(_that);case _DuplicateDevice(): return duplicateDevice(_that);case _Error(): return error(_that);} } @@ -109,13 +111,14 @@ return error(_that);} /// } /// ``` -@optionalTypeArgs TResult? mapOrNull({TResult? Function( _Connected value)? connected,TResult? Function( _Connecting value)? connecting,TResult? Function( _Disconnected value)? disconnected,TResult? Function( _DuplicateDevice value)? duplicateDevice,TResult? Function( _Error value)? error,}){ +@optionalTypeArgs TResult? mapOrNull({TResult? Function( _Connected value)? connected,TResult? Function( _Connecting value)? connecting,TResult? Function( _Disconnected value)? disconnected,TResult? Function( _ServerDown value)? serverDown,TResult? Function( _DuplicateDevice value)? duplicateDevice,TResult? Function( _Error value)? error,}){ final _that = this; switch (_that) { case _Connected() when connected != null: return connected(_that);case _Connecting() when connecting != null: return connecting(_that);case _Disconnected() when disconnected != null: -return disconnected(_that);case _DuplicateDevice() when duplicateDevice != null: +return disconnected(_that);case _ServerDown() when serverDown != null: +return serverDown(_that);case _DuplicateDevice() when duplicateDevice != null: return duplicateDevice(_that);case _Error() when error != null: return error(_that);case _: return null; @@ -134,12 +137,13 @@ return error(_that);case _: /// } /// ``` -@optionalTypeArgs TResult maybeWhen({TResult Function()? connected,TResult Function()? connecting,TResult Function()? disconnected,TResult Function()? duplicateDevice,TResult Function( String message)? error,required TResult orElse(),}) {final _that = this; +@optionalTypeArgs TResult maybeWhen({TResult Function()? connected,TResult Function()? connecting,TResult Function()? disconnected,TResult Function()? serverDown,TResult Function()? duplicateDevice,TResult Function( String message)? error,required TResult orElse(),}) {final _that = this; switch (_that) { case _Connected() when connected != null: return connected();case _Connecting() when connecting != null: return connecting();case _Disconnected() when disconnected != null: -return disconnected();case _DuplicateDevice() when duplicateDevice != null: +return disconnected();case _ServerDown() when serverDown != null: +return serverDown();case _DuplicateDevice() when duplicateDevice != null: return duplicateDevice();case _Error() when error != null: return error(_that.message);case _: return orElse(); @@ -159,12 +163,13 @@ return error(_that.message);case _: /// } /// ``` -@optionalTypeArgs TResult when({required TResult Function() connected,required TResult Function() connecting,required TResult Function() disconnected,required TResult Function() duplicateDevice,required TResult Function( String message) error,}) {final _that = this; +@optionalTypeArgs TResult when({required TResult Function() connected,required TResult Function() connecting,required TResult Function() disconnected,required TResult Function() serverDown,required TResult Function() duplicateDevice,required TResult Function( String message) error,}) {final _that = this; switch (_that) { case _Connected(): return connected();case _Connecting(): return connecting();case _Disconnected(): -return disconnected();case _DuplicateDevice(): +return disconnected();case _ServerDown(): +return serverDown();case _DuplicateDevice(): return duplicateDevice();case _Error(): return error(_that.message);} } @@ -180,12 +185,13 @@ return error(_that.message);} /// } /// ``` -@optionalTypeArgs TResult? whenOrNull({TResult? Function()? connected,TResult? Function()? connecting,TResult? Function()? disconnected,TResult? Function()? duplicateDevice,TResult? Function( String message)? error,}) {final _that = this; +@optionalTypeArgs TResult? whenOrNull({TResult? Function()? connected,TResult? Function()? connecting,TResult? Function()? disconnected,TResult? Function()? serverDown,TResult? Function()? duplicateDevice,TResult? Function( String message)? error,}) {final _that = this; switch (_that) { case _Connected() when connected != null: return connected();case _Connecting() when connecting != null: return connecting();case _Disconnected() when disconnected != null: -return disconnected();case _DuplicateDevice() when duplicateDevice != null: +return disconnected();case _ServerDown() when serverDown != null: +return serverDown();case _DuplicateDevice() when duplicateDevice != null: return duplicateDevice();case _Error() when error != null: return error(_that.message);case _: return null; @@ -309,6 +315,44 @@ String toString({ DiagnosticLevel minLevel = DiagnosticLevel.info }) { +/// @nodoc + + +class _ServerDown with DiagnosticableTreeMixin implements WebSocketState { + const _ServerDown(); + + + + + + +@override +void debugFillProperties(DiagnosticPropertiesBuilder properties) { + properties + ..add(DiagnosticsProperty('type', 'WebSocketState.serverDown')) + ; +} + +@override +bool operator ==(Object other) { + return identical(this, other) || (other.runtimeType == runtimeType&&other is _ServerDown); +} + + +@override +int get hashCode => runtimeType.hashCode; + +@override +String toString({ DiagnosticLevel minLevel = DiagnosticLevel.info }) { + return 'WebSocketState.serverDown()'; +} + + +} + + + + /// @nodoc diff --git a/lib/screens/developers/apps.g.dart b/lib/screens/developers/apps.g.dart index 74a23e0..f91f0f2 100644 --- a/lib/screens/developers/apps.g.dart +++ b/lib/screens/developers/apps.g.dart @@ -6,7 +6,7 @@ part of 'apps.dart'; // RiverpodGenerator // ************************************************************************** -String _$customAppsHash() => r'1dec11573b9d987c3adbdf4732b3781a6f40172a'; +String _$customAppsHash() => r'c6ac78060eb51a2b208a749a81ecbe0a9c608ce1'; /// Copied from Dart SDK class _SystemHash { diff --git a/lib/screens/developers/edit_app.g.dart b/lib/screens/developers/edit_app.g.dart index f60d07b..99a76d2 100644 --- a/lib/screens/developers/edit_app.g.dart +++ b/lib/screens/developers/edit_app.g.dart @@ -6,7 +6,7 @@ part of 'edit_app.dart'; // RiverpodGenerator // ************************************************************************** -String _$customAppHash() => r'aa4d1fb803c47a99cbacf6d91481f4fce3fda457'; +String _$customAppHash() => r'42ad937b8439c793e3c5c35568bb5fa4da017df3'; /// Copied from Dart SDK class _SystemHash { diff --git a/lib/screens/developers/hub.g.dart b/lib/screens/developers/hub.g.dart index 732c4b5..44d93c1 100644 --- a/lib/screens/developers/hub.g.dart +++ b/lib/screens/developers/hub.g.dart @@ -6,7 +6,7 @@ part of 'hub.dart'; // RiverpodGenerator // ************************************************************************** -String _$developerStatsHash() => r'baa708f3586e8987e221cc8ab825d759658c0f55'; +String _$developerStatsHash() => r'45546f29ec7cd1a9c3a4e0f4e39275e78bf34755'; /// Copied from Dart SDK class _SystemHash { @@ -149,7 +149,7 @@ class _DeveloperStatsProviderElement String? get uname => (origin as DeveloperStatsProvider).uname; } -String _$developersHash() => r'f11335fdf553c661110281edeec70ef89c64727d'; +String _$developersHash() => r'04f25db31f511f651a5add128d56631236ed0b39'; /// See also [developers]. @ProviderFor(developers) diff --git a/lib/widgets/content/network_status_sheet.dart b/lib/widgets/content/network_status_sheet.dart index bbc7fb2..017ff02 100644 --- a/lib/widgets/content/network_status_sheet.dart +++ b/lib/widgets/content/network_status_sheet.dart @@ -40,6 +40,11 @@ class NetworkStatusSheet extends HookConsumerWidget { 'Disconnected from server', style: Theme.of(context).textTheme.bodyLarge, ), + serverDown: + () => Text( + 'The server is not available right now... Please try again later...', + style: Theme.of(context).textTheme.bodyLarge, + ), duplicateDevice: () => Text( 'Another device has connected with the same account.',