нахуевертил

This commit is contained in:
Jganenokk
2026-04-12 14:18:26 +07:00
parent 6f2dae7032
commit 24b7ff6aff
11 changed files with 213 additions and 62 deletions
+12 -4
View File
@@ -32,6 +32,7 @@ class Api {
final _stateController = StreamController<SessionState>.broadcast();
final _sessionExpiredController =
StreamController<SessionExpiredException>.broadcast();
final _handshakeSuccessController = StreamController<String>.broadcast();
Map<dynamic, dynamic>? _userAgent;
Map<dynamic, dynamic>? get userAgent => _userAgent;
@@ -44,6 +45,8 @@ class Api {
Stream<SessionState> get stateStream => _stateController.stream;
Stream<SessionExpiredException> get sessionExpiredStream =>
_sessionExpiredController.stream;
Stream<String> get handshakeSuccessStream =>
_handshakeSuccessController.stream;
SessionState get state => _sessionState;
StreamSubscription<Uint8List>? _dataSubscription;
@@ -93,6 +96,12 @@ class Api {
_setSessionState(SessionState.online);
_startPinging();
logger.i('Сессия онлайн, хэндшейк ок');
_handshakeSuccessController.add(
response.payload['device_name'] as String? ?? 'Unknown',
);
if (_onReconnectCallback != null) {
_onReconnectCallback!();
}
} else {
logger.e('Хэндшейк отклонён: ${response.payload}');
}
@@ -254,7 +263,8 @@ class Api {
await for (final packet in _receiver.feed(data)) {
if (packet.isError &&
packet.payload is Map &&
packet.payload['message'] == 'FAIL_LOGIN_TOKEN') {
(packet.payload['message'] == 'FAIL_LOGIN_TOKEN' ||
packet.payload['message'] == 'FAIL_WRONG_PASSWORD')) {
_sessionExpiredController.add(
SessionExpiredException(messageFromErrorPayload(packet.payload)),
);
@@ -277,13 +287,11 @@ class Api {
_socketStateSubscription = null;
_receiver.reset();
_dispatcher.clearPending();
_handshakeSuccessController.add('disconnected');
}
Future<void> reconnectAndLogin() async {
await connect();
if (_sessionState == SessionState.online && _onReconnectCallback != null) {
_onReconnectCallback!();
}
}
void Function()? _onReconnectCallback;
+3 -1
View File
@@ -1022,7 +1022,9 @@ class AccountModule {
void _checkPacketError(Packet packet, String method) {
if (packet.isError) {
final payload = packet.payload;
if (payload is Map && payload['message'] == 'FAIL_LOGIN_TOKEN') {
if (payload is Map &&
(payload['message'] == 'FAIL_LOGIN_TOKEN' ||
payload['message'] == 'FAIL_WRONG_PASSWORD')) {
throw SessionExpiredException(messageFromErrorPayload(payload));
}
throw PacketError(messageFromErrorPayload(payload));