perf: 优化 connect 逻辑 (#10571)

* chore: 优化 connect 对实体设备和已有错误路径下自动检测的支持

* perf: 优化 core 对 connect 成功的判断逻辑

may fix 类似 #10426 的异常情况
This commit is contained in:
uye
2024-09-12 13:07:36 +08:00
committed by GitHub
parent 7110f093f5
commit 0ac0ebaad2
3 changed files with 30 additions and 18 deletions

View File

@@ -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) {
}

View File

@@ -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))
{

View File

@@ -4066,7 +4066,7 @@ namespace MaaWpfGui.ViewModels.UI
get => _connectAddress;
set
{
if (ConnectAddress == value || string.IsNullOrEmpty(value))
if (ConnectAddress == value)
{
return;
}