优化核心在切换节点时候以往的浏览器保持长连接导致无法使用新节点的逻辑

(cherry picked from commit c920d9fbcd0589f1051bac5bb5bcb5f5deca1017)
This commit is contained in:
Rust 2025-11-01 15:59:53 +08:00 committed by speakeloudest
parent f71575ee91
commit 8b982d1ba8

View File

@ -988,9 +988,9 @@ class KRHomeController extends GetxController with WidgetsBindingObserver {
return true;
}
// 4. VPN已连接
// 4. VPN已连接VPN以断开现有连接并应用新节点
try {
KRLogUtil.kr_i('🔌 VPN已连接开始切换后台节点: $tag', tag: 'HomeController');
KRLogUtil.kr_i('🔌 VPN已连接将重启VPN以断开现有连接: $tag', tag: 'HomeController');
// 🔧
KRLogUtil.kr_i('📊 当前活动组数量: ${KRSingBoxImp.instance.kr_activeGroups.length}', tag: 'HomeController');
@ -1007,10 +1007,23 @@ class KRHomeController extends GetxController with WidgetsBindingObserver {
kr_currentNodeLatency.value = -1;
kr_isLatency.value = true; //
//
KRLogUtil.kr_i('⏳ 调用 kr_selectOutbound($tag),等待完成...', tag: 'HomeController');
await KRSingBoxImp.instance.kr_selectOutbound(tag);
KRLogUtil.kr_i('✅ kr_selectOutbound 完成,开始更新 UI', tag: 'HomeController');
// 🔧
KRLogUtil.kr_i('💾 保存新节点选择: $tag', tag: 'HomeController');
await KRSecureStorage().kr_saveData(key: 'SELECTED_NODE_TAG', value: tag);
// 🔧 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)); //
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)); //
// UI
kr_cutSeletedTag.value = tag;
@ -1022,7 +1035,7 @@ class KRHomeController extends GetxController with WidgetsBindingObserver {
await Future.delayed(const Duration(milliseconds: 200)); //
_kr_updateLatencyOnConnected();
KRLogUtil.kr_i('✅ 节点切换成功: $tag', tag: 'HomeController');
KRLogUtil.kr_i('✅ 节点切换成功(已重启VPN断开旧连接): $tag', tag: 'HomeController');
return true;
} catch (switchError) {
@ -1034,6 +1047,13 @@ class KRHomeController extends GetxController with WidgetsBindingObserver {
kr_currentNodeName.value = originalTag; // 🔧
kr_currentNodeLatency.value = -2; //
//
try {
await KRSecureStorage().kr_saveData(key: 'SELECTED_NODE_TAG', value: originalTag);
} catch (e) {
KRLogUtil.kr_e('❌ 恢复节点选择失败: $e', tag: 'HomeController');
}
//
KRCommonUtil.kr_showToast('节点切换失败,已恢复为: $originalTag');