167 lines
5.9 KiB
Dart
167 lines
5.9 KiB
Dart
import 'package:flutter/foundation.dart';
|
||
import 'package:payloads_shared/payloads_shared.dart';
|
||
import 'package:payloads_app1/payloads_app1.dart';
|
||
|
||
/// Handler for incoming pings from Flutter Host (sends pong back)
|
||
class PingHandler implements PayloadHandler {
|
||
final Function(BridgePayload) _sendPayload;
|
||
|
||
PingHandler(this._sendPayload);
|
||
|
||
@override
|
||
Future<BridgePayload?> handle(BridgePayload payload) async {
|
||
debugPrint('📥 [PingHandler] Получен payload: ${payload.runtimeType}');
|
||
|
||
if (payload is PingPayload) {
|
||
debugPrint('🏓 [PingHandler] Обработка ping: "${payload.message}"');
|
||
|
||
// Handle incoming ping and send pong back
|
||
debugPrint('📤 [PingHandler] Отправка pong ответа...');
|
||
|
||
// Send pong response using the toPong method
|
||
final pongPayload = payload.toPong();
|
||
debugPrint(
|
||
'🔄 [PingHandler] Создан pong payload: "${pongPayload.message}"',
|
||
);
|
||
await Future.delayed(const Duration(seconds: 1));
|
||
_sendPayload(pongPayload);
|
||
debugPrint('✅ [PingHandler] Pong ответ отправлен');
|
||
} else {
|
||
debugPrint(
|
||
'⚠️ [PingHandler] Неожиданный тип payload: ${payload.runtimeType}',
|
||
);
|
||
}
|
||
return null;
|
||
}
|
||
}
|
||
|
||
/// Handler for ping responses from Flutter Host
|
||
class PingResponseHandler implements PayloadHandler {
|
||
@override
|
||
Future<BridgePayload?> handle(BridgePayload payload) async {
|
||
debugPrint(
|
||
'📥 [PingResponseHandler] Получен payload: ${payload.runtimeType}',
|
||
);
|
||
|
||
if (payload is PingPayload) {
|
||
debugPrint(
|
||
'🏓 [PingResponseHandler] Получен pong ответ: "${payload.message}"',
|
||
);
|
||
debugPrint('✅ [PingResponseHandler] Ping-pong цикл завершен');
|
||
} else {
|
||
debugPrint(
|
||
'⚠️ [PingResponseHandler] Неожиданный тип payload: ${payload.runtimeType}',
|
||
);
|
||
}
|
||
return null;
|
||
}
|
||
}
|
||
|
||
/// Handler for user info responses from Flutter Host
|
||
class UserInfoResponseHandler implements PayloadHandler {
|
||
@override
|
||
Future<BridgePayload?> handle(BridgePayload payload) async {
|
||
debugPrint(
|
||
'📥 [UserInfoResponseHandler] Получен payload: ${payload.runtimeType}',
|
||
);
|
||
|
||
if (payload is UserInfoResponsePayload) {
|
||
debugPrint(
|
||
'👤 [UserInfoResponseHandler] Обработка ответа с информацией о пользователе',
|
||
);
|
||
debugPrint('📊 [UserInfoResponseHandler] Успех: ${payload.success}');
|
||
|
||
if (payload.userInfo.isNotEmpty) {
|
||
debugPrint('📋 [UserInfoResponseHandler] Данные пользователя:');
|
||
payload.userInfo.forEach((key, value) {
|
||
debugPrint(' $key: $value');
|
||
});
|
||
} else {
|
||
debugPrint('⚠️ [UserInfoResponseHandler] Данные пользователя пусты');
|
||
}
|
||
|
||
if (payload.error != null) {
|
||
debugPrint('❌ [UserInfoResponseHandler] Ошибка: ${payload.error}');
|
||
}
|
||
} else {
|
||
debugPrint(
|
||
'⚠️ [UserInfoResponseHandler] Неожиданный тип payload: ${payload.runtimeType}',
|
||
);
|
||
}
|
||
return null;
|
||
}
|
||
}
|
||
|
||
/// Handler for login responses from Flutter Host
|
||
class LoginResponseHandler implements PayloadHandler {
|
||
@override
|
||
Future<BridgePayload?> handle(BridgePayload payload) async {
|
||
debugPrint(
|
||
'📥 [LoginResponseHandler] Получен payload: ${payload.runtimeType}',
|
||
);
|
||
|
||
if (payload is LoginResponsePayload) {
|
||
debugPrint('🔐 [LoginResponseHandler] Обработка ответа на логин');
|
||
debugPrint('📊 [LoginResponseHandler] Успех: ${payload.success}');
|
||
|
||
if (payload.success) {
|
||
debugPrint('✅ [LoginResponseHandler] Логин успешен');
|
||
debugPrint('🎫 [LoginResponseHandler] Токен: ${payload.token}');
|
||
|
||
if (payload.userData != null) {
|
||
debugPrint('👤 [LoginResponseHandler] Данные пользователя:');
|
||
payload.userData!.forEach((key, value) {
|
||
debugPrint(' $key: $value');
|
||
});
|
||
} else {
|
||
debugPrint(
|
||
'⚠️ [LoginResponseHandler] Данные пользователя отсутствуют',
|
||
);
|
||
}
|
||
} else {
|
||
debugPrint('❌ [LoginResponseHandler] Логин неудачен');
|
||
debugPrint('💬 [LoginResponseHandler] Ошибка: ${payload.error}');
|
||
}
|
||
} else {
|
||
debugPrint(
|
||
'⚠️ [LoginResponseHandler] Неожиданный тип payload: ${payload.runtimeType}',
|
||
);
|
||
}
|
||
return null;
|
||
}
|
||
}
|
||
|
||
/// Handler for quiz submission responses from Flutter Host
|
||
class QuizResponseHandler implements PayloadHandler {
|
||
@override
|
||
Future<BridgePayload?> handle(BridgePayload payload) async {
|
||
debugPrint(
|
||
'📥 [QuizResponseHandler] Получен payload: ${payload.runtimeType}',
|
||
);
|
||
|
||
if (payload is QuizSubmissionResponsePayload) {
|
||
debugPrint('📝 [QuizResponseHandler] Обработка ответа на отправку теста');
|
||
debugPrint('📊 [QuizResponseHandler] Успех: ${payload.success}');
|
||
debugPrint(
|
||
'📈 [QuizResponseHandler] Результат: ${payload.score}/${payload.totalQuestions}',
|
||
);
|
||
debugPrint(
|
||
'✅ [QuizResponseHandler] Правильных ответов: ${payload.correctAnswers}',
|
||
);
|
||
|
||
if (payload.detailedResults != null) {
|
||
debugPrint('📋 [QuizResponseHandler] Детальные результаты:');
|
||
payload.detailedResults!.forEach((key, value) {
|
||
debugPrint(' $key: $value');
|
||
});
|
||
} else {
|
||
debugPrint('⚠️ [QuizResponseHandler] Детальные результаты отсутствуют');
|
||
}
|
||
} else {
|
||
debugPrint(
|
||
'⚠️ [QuizResponseHandler] Неожиданный тип payload: ${payload.runtimeType}',
|
||
);
|
||
}
|
||
return null;
|
||
}
|
||
}
|