From 0ac0ebaad2dbf831e02b05b3af6912a43553d77f Mon Sep 17 00:00:00 2001 From: uye <99072975+ABA2396@users.noreply.github.com> Date: Thu, 12 Sep 2024 13:07:36 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=20connect=20?= =?UTF-8?q?=E9=80=BB=E8=BE=91=20(#10571)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: 优化 connect 对实体设备和已有错误路径下自动检测的支持 * perf: 优化 core 对 connect 成功的判断逻辑 may fix 类似 #10426 的异常情况 --- src/MaaCore/Controller/AdbController.cpp | 4 +- src/MaaWpfGui/Main/AsstProxy.cs | 42 ++++++++++++------- .../ViewModels/UI/SettingsViewModel.cs | 2 +- 3 files changed, 30 insertions(+), 18 deletions(-) diff --git a/src/MaaCore/Controller/AdbController.cpp b/src/MaaCore/Controller/AdbController.cpp index 132a813e76..7e812e103f 100644 --- a/src/MaaCore/Controller/AdbController.cpp +++ b/src/MaaCore/Controller/AdbController.cpp @@ -761,7 +761,9 @@ bool asst::AdbController::connect( bool is_connect_success = false; if (connect_ret) { auto& connect_str = connect_ret.value(); - is_connect_success = connect_str.find("error") == std::string::npos; + // 检查连接字符串是否包含 "connected" 或 "device" + is_connect_success = connect_str.find("connected") != std::string::npos || + connect_str.find("device") != std::string::npos; if (connect_str.find("daemon started successfully") != std::string::npos && connect_str.find("daemon still not running") == std::string::npos) { } diff --git a/src/MaaWpfGui/Main/AsstProxy.cs b/src/MaaWpfGui/Main/AsstProxy.cs index 9d50d71b91..f8a9e6e323 100644 --- a/src/MaaWpfGui/Main/AsstProxy.cs +++ b/src/MaaWpfGui/Main/AsstProxy.cs @@ -1845,14 +1845,21 @@ namespace MaaWpfGui.Main private static bool AutoDetectConnection(ref string error) { - string bsHvAddress = Instances.SettingsViewModel.TryToSetBlueStacksHyperVAddress(); - + // 本地设备如果选了自动检测,还是重新检测一下,不然重新插拔地址变了之后就再也不会检测了 + /* // tcp连接测试端口是否有效,超时时间500ms // 如果是本地设备,没有冒号 - bool adbResult = - (!Instances.SettingsViewModel.ConnectAddress.Contains(':') && - !string.IsNullOrEmpty(Instances.SettingsViewModel.ConnectAddress)) || - IfPortEstablished(Instances.SettingsViewModel.ConnectAddress); + bool adbResult = !string.IsNullOrEmpty(Instances.SettingsViewModel.AdbPath) && + ((!Instances.SettingsViewModel.ConnectAddress.Contains(':') && + !string.IsNullOrEmpty(Instances.SettingsViewModel.ConnectAddress)) || + IfPortEstablished(Instances.SettingsViewModel.ConnectAddress)); + */ + + var adbPath = Instances.SettingsViewModel.AdbPath; + bool adbResult = !string.IsNullOrEmpty(adbPath) && + File.Exists(adbPath) && + Path.GetFileName(adbPath).Contains("adb", StringComparison.InvariantCultureIgnoreCase) && + IfPortEstablished(Instances.SettingsViewModel.ConnectAddress); if (adbResult) { @@ -1860,19 +1867,22 @@ namespace MaaWpfGui.Main return true; } - bool bsResult = IfPortEstablished(bsHvAddress); - - if (bsResult) + // 蓝叠的特殊处理 { - error = string.Empty; - if (string.IsNullOrEmpty(Instances.SettingsViewModel.AdbPath) && Instances.SettingsViewModel.DetectAdbConfig(ref error)) + string bsHvAddress = Instances.SettingsViewModel.TryToSetBlueStacksHyperVAddress() ?? string.Empty; + bool bsResult = IfPortEstablished(bsHvAddress); + if (bsResult) { - return string.IsNullOrEmpty(error); - } - Instances.SettingsViewModel.ConnectAddress = bsHvAddress; - return true; - } + error = string.Empty; + if (string.IsNullOrEmpty(Instances.SettingsViewModel.AdbPath) && Instances.SettingsViewModel.DetectAdbConfig(ref error)) + { + return string.IsNullOrEmpty(error); + } + Instances.SettingsViewModel.ConnectAddress = bsHvAddress; + return true; + } + } if (Instances.SettingsViewModel.DetectAdbConfig(ref error)) { diff --git a/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs b/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs index b13a278b95..d3605f7502 100755 --- a/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs +++ b/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs @@ -4066,7 +4066,7 @@ namespace MaaWpfGui.ViewModels.UI get => _connectAddress; set { - if (ConnectAddress == value || string.IsNullOrEmpty(value)) + if (ConnectAddress == value) { return; }