core_controller.dart 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. import 'dart:async';
  2. import 'dart:convert';
  3. import 'package:get/get.dart';
  4. import '../../pigeons/core_api.g.dart';
  5. import '../../utils/haptic_feedback_manager.dart';
  6. import '../../utils/log/logger.dart';
  7. import '../constants/enums.dart';
  8. class CoreController extends GetxService {
  9. final TAG = 'CoreController';
  10. final _state = ConnectionState.disconnected.obs;
  11. ConnectionState get state => _state.value;
  12. set state(ConnectionState value) => _state.value = value;
  13. // 事件流订阅
  14. StreamSubscription<String>? _eventSubscription;
  15. @override
  16. void onInit() {
  17. super.onInit();
  18. _initCheckConnect();
  19. _startListeningToEvents();
  20. }
  21. @override
  22. void onClose() {
  23. super.onClose();
  24. // 取消事件流订阅
  25. _eventSubscription?.cancel();
  26. _eventSubscription = null;
  27. }
  28. void _initCheckConnect() {
  29. CoreApi().isConnected().then((value) {
  30. if (value == true) {
  31. state = ConnectionState.connected;
  32. CoreApi().reconnect();
  33. } else {
  34. state = ConnectionState.disconnected;
  35. }
  36. });
  37. }
  38. void handleConnection() {
  39. if (state == ConnectionState.disconnected) {
  40. // 开始连接 - 轻微震动
  41. state = ConnectionState.connecting;
  42. HapticFeedbackManager.connectionStart();
  43. CoreApi().connect();
  44. } else {
  45. // 断开连接
  46. state = ConnectionState.disconnecting;
  47. HapticFeedbackManager.connectionDisconnected();
  48. CoreApi().disconnect();
  49. }
  50. }
  51. /// 开始监听来自 Android 的事件
  52. void _startListeningToEvents() {
  53. _eventSubscription = onEventChange().listen(
  54. _handleEventChange,
  55. onError: (error) {
  56. log(TAG, '事件流错误: $error');
  57. },
  58. );
  59. }
  60. /// 处理来自 Android 的事件变化
  61. void _handleEventChange(String event) {
  62. log(TAG, '收到事件: $event');
  63. if (event.startsWith('connecting')) {
  64. state = ConnectionState.connecting;
  65. HapticFeedbackManager.connectionStart();
  66. } else if (event.startsWith('connected')) {
  67. state = ConnectionState.connected;
  68. HapticFeedbackManager.connectionSuccess();
  69. } else if (event.startsWith('disconnecting')) {
  70. state = ConnectionState.disconnecting;
  71. } else if (event.startsWith('disconnected')) {
  72. state = ConnectionState.disconnected;
  73. HapticFeedbackManager.connectionDisconnected();
  74. } else if (event.startsWith('failed')) {
  75. state = ConnectionState.disconnected;
  76. HapticFeedbackManager.connectionDisconnected();
  77. // 可以显示错误提示
  78. Get.snackbar('连接失败', '无法建立连接,请重试');
  79. } else if (event.startsWith('permission_denied')) {
  80. state = ConnectionState.disconnected;
  81. HapticFeedbackManager.connectionDisconnected();
  82. // 可以显示错误提示
  83. Get.snackbar('权限拒绝', '无法建立连接,请重试');
  84. } else if (event.startsWith('stats_update:')) {
  85. _handleStatsUpdate(event);
  86. } else if (event.startsWith('delay_measured:')) {
  87. _handleDelayUpdate(event);
  88. } else if (event.startsWith('error:')) {
  89. _handleError(event);
  90. } else if (event.startsWith('service_status:')) {
  91. _handleServiceStatus(event);
  92. }
  93. }
  94. /// 处理统计信息更新
  95. void _handleStatsUpdate(String event) {
  96. try {
  97. final jsonStr = event.substring('stats_update:'.length);
  98. final stats = jsonDecode(jsonStr);
  99. stats['uplink'] ?? 0;
  100. stats['downlink'] ?? 0;
  101. // TODO: 处理统计信息更新
  102. } catch (e) {
  103. log(TAG, '解析统计信息失败: $e');
  104. }
  105. }
  106. /// 处理延迟更新
  107. void _handleDelayUpdate(String event) {
  108. try {
  109. event.substring('delay_measured:'.length);
  110. // TODO: 处理延迟更新
  111. } catch (e) {
  112. log(TAG, '解析延迟信息失败: $e');
  113. }
  114. }
  115. /// 处理错误信息
  116. void _handleError(String event) {
  117. final errorMessage = event.substring('error:'.length);
  118. Get.snackbar('错误', errorMessage);
  119. }
  120. /// 处理服务状态
  121. void _handleServiceStatus(String event) {
  122. final status = event.substring('service_status:'.length);
  123. log(TAG, '服务状态: $status');
  124. }
  125. }