♻️ Rebuild the dupe device
This commit is contained in:
@@ -17,6 +17,7 @@ sealed class WebSocketState with _$WebSocketState {
|
|||||||
const factory WebSocketState.connected() = _Connected;
|
const factory WebSocketState.connected() = _Connected;
|
||||||
const factory WebSocketState.connecting() = _Connecting;
|
const factory WebSocketState.connecting() = _Connecting;
|
||||||
const factory WebSocketState.disconnected() = _Disconnected;
|
const factory WebSocketState.disconnected() = _Disconnected;
|
||||||
|
const factory WebSocketState.serverDown() = _ServerDown;
|
||||||
const factory WebSocketState.duplicateDevice() = _DuplicateDevice;
|
const factory WebSocketState.duplicateDevice() = _DuplicateDevice;
|
||||||
const factory WebSocketState.error(String message) = _Error;
|
const factory WebSocketState.error(String message) = _Error;
|
||||||
}
|
}
|
||||||
@@ -81,6 +82,11 @@ class WebSocketService {
|
|||||||
final dataStr =
|
final dataStr =
|
||||||
data is Uint8List ? utf8.decode(data) : data.toString();
|
data is Uint8List ? utf8.decode(data) : data.toString();
|
||||||
final packet = WebSocketPacket.fromJson(jsonDecode(dataStr));
|
final packet = WebSocketPacket.fromJson(jsonDecode(dataStr));
|
||||||
|
if (packet.type == 'error.dupe') {
|
||||||
|
_statusStreamController.sink.add(WebSocketState.duplicateDevice());
|
||||||
|
_channel!.sink.close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
_streamController.sink.add(packet);
|
_streamController.sink.add(packet);
|
||||||
log(
|
log(
|
||||||
"[WebSocket] Received packet: ${packet.type} ${packet.errorMessage}",
|
"[WebSocket] Received packet: ${packet.type} ${packet.errorMessage}",
|
||||||
@@ -94,16 +100,9 @@ class WebSocketService {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
onDone: () {
|
onDone: () {
|
||||||
if (_channel?.closeCode == 1006) {
|
log('[WebSocket] Connection closed, attempting to reconnect...');
|
||||||
log(
|
_scheduleReconnect();
|
||||||
'[WebSocket] Connection closed due to duplicate device. Not going to reconnect...',
|
_statusStreamController.sink.add(WebSocketState.disconnected());
|
||||||
);
|
|
||||||
_statusStreamController.sink.add(WebSocketState.duplicateDevice());
|
|
||||||
} else {
|
|
||||||
log('[WebSocket] Connection closed, attempting to reconnect...');
|
|
||||||
_scheduleReconnect();
|
|
||||||
_statusStreamController.sink.add(WebSocketState.disconnected());
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
onError: (error) {
|
onError: (error) {
|
||||||
log('[WebSocket] Error occurred: $error, attempting to reconnect...');
|
log('[WebSocket] Error occurred: $error, attempting to reconnect...');
|
||||||
|
@@ -61,13 +61,14 @@ extension WebSocketStatePatterns on WebSocketState {
|
|||||||
/// }
|
/// }
|
||||||
/// ```
|
/// ```
|
||||||
|
|
||||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>({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 extends Object?>({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;
|
final _that = this;
|
||||||
switch (_that) {
|
switch (_that) {
|
||||||
case _Connected() when connected != null:
|
case _Connected() when connected != null:
|
||||||
return connected(_that);case _Connecting() when connecting != null:
|
return connected(_that);case _Connecting() when connecting != null:
|
||||||
return connecting(_that);case _Disconnected() when disconnected != 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 duplicateDevice(_that);case _Error() when error != null:
|
||||||
return error(_that);case _:
|
return error(_that);case _:
|
||||||
return orElse();
|
return orElse();
|
||||||
@@ -87,13 +88,14 @@ return error(_that);case _:
|
|||||||
/// }
|
/// }
|
||||||
/// ```
|
/// ```
|
||||||
|
|
||||||
@optionalTypeArgs TResult map<TResult extends Object?>({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<TResult extends Object?>({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;
|
final _that = this;
|
||||||
switch (_that) {
|
switch (_that) {
|
||||||
case _Connected():
|
case _Connected():
|
||||||
return connected(_that);case _Connecting():
|
return connected(_that);case _Connecting():
|
||||||
return connecting(_that);case _Disconnected():
|
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 duplicateDevice(_that);case _Error():
|
||||||
return error(_that);}
|
return error(_that);}
|
||||||
}
|
}
|
||||||
@@ -109,13 +111,14 @@ return error(_that);}
|
|||||||
/// }
|
/// }
|
||||||
/// ```
|
/// ```
|
||||||
|
|
||||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>({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 extends Object?>({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;
|
final _that = this;
|
||||||
switch (_that) {
|
switch (_that) {
|
||||||
case _Connected() when connected != null:
|
case _Connected() when connected != null:
|
||||||
return connected(_that);case _Connecting() when connecting != null:
|
return connected(_that);case _Connecting() when connecting != null:
|
||||||
return connecting(_that);case _Disconnected() when disconnected != 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 duplicateDevice(_that);case _Error() when error != null:
|
||||||
return error(_that);case _:
|
return error(_that);case _:
|
||||||
return null;
|
return null;
|
||||||
@@ -134,12 +137,13 @@ return error(_that);case _:
|
|||||||
/// }
|
/// }
|
||||||
/// ```
|
/// ```
|
||||||
|
|
||||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>({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 extends Object?>({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) {
|
switch (_that) {
|
||||||
case _Connected() when connected != null:
|
case _Connected() when connected != null:
|
||||||
return connected();case _Connecting() when connecting != null:
|
return connected();case _Connecting() when connecting != null:
|
||||||
return connecting();case _Disconnected() when disconnected != 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 duplicateDevice();case _Error() when error != null:
|
||||||
return error(_that.message);case _:
|
return error(_that.message);case _:
|
||||||
return orElse();
|
return orElse();
|
||||||
@@ -159,12 +163,13 @@ return error(_that.message);case _:
|
|||||||
/// }
|
/// }
|
||||||
/// ```
|
/// ```
|
||||||
|
|
||||||
@optionalTypeArgs TResult when<TResult extends Object?>({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<TResult extends Object?>({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) {
|
switch (_that) {
|
||||||
case _Connected():
|
case _Connected():
|
||||||
return connected();case _Connecting():
|
return connected();case _Connecting():
|
||||||
return connecting();case _Disconnected():
|
return connecting();case _Disconnected():
|
||||||
return disconnected();case _DuplicateDevice():
|
return disconnected();case _ServerDown():
|
||||||
|
return serverDown();case _DuplicateDevice():
|
||||||
return duplicateDevice();case _Error():
|
return duplicateDevice();case _Error():
|
||||||
return error(_that.message);}
|
return error(_that.message);}
|
||||||
}
|
}
|
||||||
@@ -180,12 +185,13 @@ return error(_that.message);}
|
|||||||
/// }
|
/// }
|
||||||
/// ```
|
/// ```
|
||||||
|
|
||||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>({TResult? Function()? connected,TResult? Function()? connecting,TResult? Function()? disconnected,TResult? Function()? duplicateDevice,TResult? Function( String message)? error,}) {final _that = this;
|
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>({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) {
|
switch (_that) {
|
||||||
case _Connected() when connected != null:
|
case _Connected() when connected != null:
|
||||||
return connected();case _Connecting() when connecting != null:
|
return connected();case _Connecting() when connecting != null:
|
||||||
return connecting();case _Disconnected() when disconnected != 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 duplicateDevice();case _Error() when error != null:
|
||||||
return error(_that.message);case _:
|
return error(_that.message);case _:
|
||||||
return null;
|
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
|
/// @nodoc
|
||||||
|
|
||||||
|
|
||||||
|
@@ -6,7 +6,7 @@ part of 'apps.dart';
|
|||||||
// RiverpodGenerator
|
// RiverpodGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
||||||
String _$customAppsHash() => r'1dec11573b9d987c3adbdf4732b3781a6f40172a';
|
String _$customAppsHash() => r'c6ac78060eb51a2b208a749a81ecbe0a9c608ce1';
|
||||||
|
|
||||||
/// Copied from Dart SDK
|
/// Copied from Dart SDK
|
||||||
class _SystemHash {
|
class _SystemHash {
|
||||||
|
@@ -6,7 +6,7 @@ part of 'edit_app.dart';
|
|||||||
// RiverpodGenerator
|
// RiverpodGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
||||||
String _$customAppHash() => r'aa4d1fb803c47a99cbacf6d91481f4fce3fda457';
|
String _$customAppHash() => r'42ad937b8439c793e3c5c35568bb5fa4da017df3';
|
||||||
|
|
||||||
/// Copied from Dart SDK
|
/// Copied from Dart SDK
|
||||||
class _SystemHash {
|
class _SystemHash {
|
||||||
|
@@ -6,7 +6,7 @@ part of 'hub.dart';
|
|||||||
// RiverpodGenerator
|
// RiverpodGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
||||||
String _$developerStatsHash() => r'baa708f3586e8987e221cc8ab825d759658c0f55';
|
String _$developerStatsHash() => r'45546f29ec7cd1a9c3a4e0f4e39275e78bf34755';
|
||||||
|
|
||||||
/// Copied from Dart SDK
|
/// Copied from Dart SDK
|
||||||
class _SystemHash {
|
class _SystemHash {
|
||||||
@@ -149,7 +149,7 @@ class _DeveloperStatsProviderElement
|
|||||||
String? get uname => (origin as DeveloperStatsProvider).uname;
|
String? get uname => (origin as DeveloperStatsProvider).uname;
|
||||||
}
|
}
|
||||||
|
|
||||||
String _$developersHash() => r'f11335fdf553c661110281edeec70ef89c64727d';
|
String _$developersHash() => r'04f25db31f511f651a5add128d56631236ed0b39';
|
||||||
|
|
||||||
/// See also [developers].
|
/// See also [developers].
|
||||||
@ProviderFor(developers)
|
@ProviderFor(developers)
|
||||||
|
@@ -40,6 +40,11 @@ class NetworkStatusSheet extends HookConsumerWidget {
|
|||||||
'Disconnected from server',
|
'Disconnected from server',
|
||||||
style: Theme.of(context).textTheme.bodyLarge,
|
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:
|
duplicateDevice:
|
||||||
() => Text(
|
() => Text(
|
||||||
'Another device has connected with the same account.',
|
'Another device has connected with the same account.',
|
||||||
|
Reference in New Issue
Block a user