修正切换节点长连接还存在的问题,目前使用切换之后先关闭服务在启动服务
(cherry picked from commit 3c0c6dde0969fa9847fa77db78abbb6a098e50ef)
This commit is contained in:
parent
b7a78aa76a
commit
b3ee1cc6dc
@ -1011,28 +1011,54 @@ class KRHomeController extends GetxController with WidgetsBindingObserver {
|
||||
KRLogUtil.kr_i('💾 保存新节点选择: $tag', tag: 'HomeController');
|
||||
await KRSecureStorage().kr_saveData(key: 'SELECTED_NODE_TAG', value: tag);
|
||||
|
||||
// 🔧 关键修复:重启VPN连接以断开所有现有长连接
|
||||
KRLogUtil.kr_i('🔄 停止VPN连接以断开现有连接...', tag: 'HomeController');
|
||||
// 🔧 方案A增强:重启VPN连接以断开所有现有长连接
|
||||
KRLogUtil.kr_i('🔄 [增强] 停止VPN连接以断开现有连接...', tag: 'HomeController');
|
||||
await KRSingBoxImp.instance.kr_stop(); // 先停止VPN
|
||||
|
||||
KRLogUtil.kr_i('⏳ 等待VPN完全停止...', tag: 'HomeController');
|
||||
await Future.delayed(const Duration(milliseconds: 800)); // 等待停止完成
|
||||
// 🚀 方案A增强:增加等待时间,确保所有连接完全释放
|
||||
KRLogUtil.kr_i('⏳ [增强] 等待VPN完全停止(1500ms,确保旧连接全部断开)...', tag: 'HomeController');
|
||||
await Future.delayed(const Duration(milliseconds: 1500)); // 从800ms增加到1500ms
|
||||
|
||||
KRLogUtil.kr_i('🔄 启动VPN并应用新节点: $tag', tag: 'HomeController');
|
||||
KRLogUtil.kr_i('🔄 [增强] 启动VPN并应用新节点: $tag', tag: 'HomeController');
|
||||
await KRSingBoxImp.instance.kr_start(); // 重新启动VPN,会自动使用新保存的节点
|
||||
|
||||
// 等待VPN启动完成
|
||||
KRLogUtil.kr_i('⏳ 等待VPN启动完成...', tag: 'HomeController');
|
||||
await Future.delayed(const Duration(milliseconds: 1500)); // 等待启动完成
|
||||
// 🚀 方案A增强:增加启动等待时间,确保新VPN完全建立
|
||||
KRLogUtil.kr_i('⏳ [增强] 等待VPN完全启动(2500ms,确保新连接完全建立)...', tag: 'HomeController');
|
||||
await Future.delayed(const Duration(milliseconds: 2500)); // 从1500ms增加到2500ms
|
||||
|
||||
// 后台切换成功,更新UI
|
||||
kr_cutSeletedTag.value = tag;
|
||||
kr_updateConnectionInfo();
|
||||
kr_moveToSelectedNode();
|
||||
|
||||
// 🔧 关键修复:节点切换完成后,立即获取新节点的延迟值
|
||||
// 这样可以避免UI继续显示"正在连接"状态
|
||||
await Future.delayed(const Duration(milliseconds: 200)); // 等待活动组更新
|
||||
// 🚀 方案A增强:增加验证前等待时间,确保活动组完全更新
|
||||
KRLogUtil.kr_i('⏳ [增强] 等待活动组更新(500ms)...', tag: 'HomeController');
|
||||
await Future.delayed(const Duration(milliseconds: 500)); // 从200ms增加到500ms
|
||||
|
||||
// 🚀 方案A增强:验证节点是否真正切换成功
|
||||
KRLogUtil.kr_i('🔍 [增强] 验证节点切换是否成功...', tag: 'HomeController');
|
||||
try {
|
||||
// 刷新活动组信息
|
||||
final activeGroups = KRSingBoxImp.instance.kr_activeGroups;
|
||||
final selectGroup = activeGroups.firstWhere(
|
||||
(group) => group.tag == 'select',
|
||||
orElse: () => throw Exception('未找到 select 组'),
|
||||
);
|
||||
|
||||
KRLogUtil.kr_i('📊 [增强] Select组当前选中: ${selectGroup.selected}', tag: 'HomeController');
|
||||
KRLogUtil.kr_i('📊 [增强] 目标节点: $tag', tag: 'HomeController');
|
||||
|
||||
if (selectGroup.selected != tag) {
|
||||
KRLogUtil.kr_w('⚠️ [增强] 节点选择验证失败,实际选中: ${selectGroup.selected}', tag: 'HomeController');
|
||||
// 不抛出异常,但记录警告
|
||||
} else {
|
||||
KRLogUtil.kr_i('✅ [增强] 节点选择验证成功!', tag: 'HomeController');
|
||||
}
|
||||
} catch (e) {
|
||||
KRLogUtil.kr_w('⚠️ [增强] 节点验证过程出错: $e', tag: 'HomeController');
|
||||
}
|
||||
|
||||
// 更新延迟信息
|
||||
_kr_updateLatencyOnConnected();
|
||||
|
||||
KRLogUtil.kr_i('✅ 节点切换成功(已重启VPN断开旧连接): $tag', tag: 'HomeController');
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user