Ver Fonte

fix: windows下连接状态不对齐的问题

Tony há 1 mês atrás
pai
commit
483a85e811

+ 13 - 13
lib/app/controllers/windows/vpn_service.dart

@@ -32,8 +32,8 @@ class VpnService {
 
   final _rpcDio = Dio();
 
-  ConnectionState _status = ConnectionState.disconnected;
-  final _ecStatus = StreamController<(ConnectionState, dynamic)>.broadcast();
+  VpnStatus _status = VpnStatus.idle;
+  final _ecStatus = StreamController<(VpnStatus, dynamic)>.broadcast();
 
   bool _isOnline = false;
   final _ecOnline = StreamController<bool>.broadcast();
@@ -50,7 +50,7 @@ class VpnService {
 
   Map<String, dynamic>? _connectionParams;
 
-  void _setStatus(ConnectionState value, dynamic data) {
+  void _setStatus(VpnStatus value, dynamic data) {
     if (_status != value) {
       _status = value;
       _ecStatus.add((_status, data));
@@ -178,13 +178,13 @@ class VpnService {
     _connectionParams = null;
 
     // 通知正在连接
-    _setStatus(ConnectionState.connecting, params);
+    _setStatus(VpnStatus.connecting, params);
 
     try {
       final result = await _rpcPost('connect', params);
       if (!result.success) {
         log(_tag, 'start call error: ${result.message}');
-        _setStatus(ConnectionState.error, Errors.ERROR_RPC_RETURN_FALSE);
+        _setStatus(VpnStatus.error, Errors.ERROR_RPC_RETURN_FALSE);
       } else {
         _connectionParams = params;
         log(_tag, 'start call success.');
@@ -192,7 +192,7 @@ class VpnService {
     } catch (e, stack) {
       log(_tag, 'start call exception: $e\nStack: $stack');
       // 通知连接失败
-      _setStatus(ConnectionState.error, Errors.ERROR_RPC_CALL_FAILED);
+      _setStatus(VpnStatus.error, Errors.ERROR_RPC_CALL_FAILED);
     }
   }
 
@@ -284,8 +284,8 @@ class VpnService {
                 _setIsOnline(true);
                 // 保存重连状态
                 try {
-                  if (_status == ConnectionState.connected ||
-                      _status == ConnectionState.connecting) {
+                  if (_status == VpnStatus.connected ||
+                      _status == VpnStatus.connecting) {
                     _needRecoverConnection = true;
                   }
                 } catch (e, stack) {
@@ -300,15 +300,15 @@ class VpnService {
                 );
                 break;
               case VpnMessageType.stateSync:
-                log(_tag, 'stateSync message got');
                 try {
                   final data = vpnMessage.data;
+                  log(_tag, 'stateSync message got: ${vpnMessage.data}');
                   if (data == null) {
                     return;
                   }
                   final int state = data['state'] as int;
                   final dynamic param = data['param'];
-                  _setStatus(ConnectionState.values[state], param);
+                  _setStatus(VpnStatus.values[state], param);
 
                   // 恢复连接
                   if (_needRecoverConnection) {
@@ -392,7 +392,7 @@ class VpnService {
 
     _isStarted = false;
     _needRecoverConnection = false;
-    _setStatus(ConnectionState.disconnected, null);
+    _setStatus(VpnStatus.idle, null);
     log(_tag, 'shutdown finished. _isStarted: $_isStarted');
   }
 
@@ -437,9 +437,9 @@ class VpnService {
 
   bool get isOnline => _isOnline;
 
-  ConnectionState get status => _status;
+  VpnStatus get status => _status;
 
   Stream<bool> get onOnlineChanged => _ecOnline.stream;
 
-  Stream<(ConnectionState, dynamic)> get onStatusChanged => _ecStatus.stream;
+  Stream<(VpnStatus, dynamic)> get onStatusChanged => _ecStatus.stream;
 }

+ 4 - 10
lib/app/controllers/windows_core_api.dart

@@ -108,25 +108,19 @@ class WindowsCoreApi implements BaseCoreApi {
       final (status, data) = event;
       // 处理VPN连接状态
       switch (status) {
-        case ConnectionState.connectingVirtual:
-          // 虚拟连接中
-          break;
-        case ConnectionState.connecting:
+        case VpnStatus.connecting:
           _handleStateConnecting();
           break;
-        case ConnectionState.connected:
+        case VpnStatus.connected:
           _handleStateConnected();
           break;
-        case ConnectionState.error:
+        case VpnStatus.error:
           final code = data != null ? data as int : -1;
           _handleStateError(code);
           break;
-        case ConnectionState.disconnected:
+        case VpnStatus.idle:
           _handleStateDisconnected();
           break;
-        case ConnectionState.disconnecting:
-          // 断开中
-          break;
       }
     });
   }