修正VMess 和 VLESS TLS配置问题,并且修改了切换节点的逻辑
(cherry picked from commit 8c34c2b0d31ee37a566de6dcb3ec62b7bb0a7222)
This commit is contained in:
@@ -525,6 +525,8 @@ class KRHomeController extends GetxController with WidgetsBindingObserver {
|
||||
break;
|
||||
case SingboxStarted():
|
||||
KRLogUtil.kr_i('🟢 状态: 已启动', tag: 'HomeController');
|
||||
print('🔵 状态变为 Started, 当前延迟=${kr_currentNodeLatency.value}');
|
||||
|
||||
// 取消连接超时处理
|
||||
_cancelConnectionTimeout();
|
||||
kr_connectText.value = AppTranslations.kr_home.connected;
|
||||
@@ -533,6 +535,14 @@ class KRHomeController extends GetxController with WidgetsBindingObserver {
|
||||
kr_isLatency.value = false;
|
||||
kr_isConnected.value = true;
|
||||
|
||||
// 🔧 关键修复:如果延迟还是-1(连接中状态),立即设置为0(已连接但延迟未知)
|
||||
if (kr_currentNodeLatency.value == -1) {
|
||||
print('🔵 强制将延迟从 -1 更新为 0');
|
||||
kr_currentNodeLatency.value = 0;
|
||||
kr_currentNodeLatency.refresh(); // 强制刷新延迟值
|
||||
print('🔵 延迟值已刷新');
|
||||
}
|
||||
|
||||
// 🔧 修复:立即尝试更新延迟值
|
||||
_kr_updateLatencyOnConnected();
|
||||
|
||||
@@ -540,6 +550,7 @@ class KRHomeController extends GetxController with WidgetsBindingObserver {
|
||||
kr_isConnected.refresh();
|
||||
// 强制更新UI
|
||||
update();
|
||||
print('🔵 状态更新完成,当前延迟=${kr_currentNodeLatency.value}');
|
||||
break;
|
||||
case SingboxStopping():
|
||||
KRLogUtil.kr_i('🟠 状态: 正在停止', tag: 'HomeController');
|
||||
@@ -1110,9 +1121,8 @@ class KRHomeController extends GetxController with WidgetsBindingObserver {
|
||||
}
|
||||
|
||||
// 选择节点
|
||||
void kr_selectNode(String tag) {
|
||||
void kr_selectNode(String tag) async {
|
||||
try {
|
||||
kr_currentNodeLatency.value = -1;
|
||||
kr_cutTag.value = tag;
|
||||
kr_currentNodeName.value = tag;
|
||||
|
||||
@@ -1124,7 +1134,18 @@ class KRHomeController extends GetxController with WidgetsBindingObserver {
|
||||
|
||||
// 🔧 修复:只有在核心已启动时才选择节点,避免触发重启
|
||||
if (KRSingBoxImp.instance.kr_status.value == SingboxStarted()) {
|
||||
KRSingBoxImp.instance.kr_selectOutbound(tag);
|
||||
print('🔵 节点已选择且VPN正在运行,切换到: $tag');
|
||||
// 🔧 关键修复:切换节点时设置为-1(切换中)
|
||||
kr_currentNodeLatency.value = -1;
|
||||
|
||||
// 🔧 关键修复:使用 await 等待节点切换完成
|
||||
try {
|
||||
await KRSingBoxImp.instance.kr_selectOutbound(tag);
|
||||
print('🔵 节点切换命令已执行完成: $tag');
|
||||
} catch (e) {
|
||||
KRLogUtil.kr_e('❌ 节点切换失败: $e', tag: 'HomeController');
|
||||
print('🔵 节点切换失败: $e');
|
||||
}
|
||||
|
||||
// 🔧 修复:选择节点后启动延迟值更新(带超时保护)
|
||||
Future.delayed(const Duration(milliseconds: 500), () {
|
||||
@@ -1132,10 +1153,22 @@ class KRHomeController extends GetxController with WidgetsBindingObserver {
|
||||
KRLogUtil.kr_w('⚠️ 选择节点后延迟值未更新,尝试手动更新', tag: 'HomeController');
|
||||
if (!_kr_tryUpdateDelayFromActiveGroups()) {
|
||||
kr_currentNodeLatency.value = 0;
|
||||
kr_currentNodeLatency.refresh();
|
||||
}
|
||||
}
|
||||
});
|
||||
} else {
|
||||
// 🔧 关键修复:核心未启动时,根据连接状态设置延迟
|
||||
print('🔵 节点已选择但VPN未运行: $tag, 当前状态=${KRSingBoxImp.instance.kr_status.value}');
|
||||
if (kr_isConnected.value) {
|
||||
// 如果显示已连接但实际未运行,重置状态
|
||||
kr_currentNodeLatency.value = -2;
|
||||
} else {
|
||||
// 正常未连接状态
|
||||
kr_currentNodeLatency.value = -2;
|
||||
}
|
||||
kr_currentNodeLatency.refresh();
|
||||
|
||||
// 🔧 修复:核心未启动时,仍需保存用户选择,以便启动VPN时应用
|
||||
KRLogUtil.kr_i('💾 核心未启动,保存节点选择以便稍后应用: $tag', tag: 'HomeController');
|
||||
KRSecureStorage().kr_saveData(key: 'SELECTED_NODE_TAG', value: tag).then((_) {
|
||||
|
||||
@@ -99,6 +99,7 @@ class KRHomeConnectionInfoView extends GetView<KRHomeController> {
|
||||
children: [
|
||||
Obx(() {
|
||||
final delay = controller.kr_currentNodeLatency.value;
|
||||
print('🔵 UI延迟显示更新: delay=$delay');
|
||||
|
||||
// 获取延迟颜色
|
||||
Color getLatencyColor(int delay) {
|
||||
|
||||
Reference in New Issue
Block a user