using System.Net.Sockets; using SinMaiLauncher.Models; namespace SinMaiLauncher.ChildProcessHolder; internal class ProcessStateBagAquaDx(ILogger logger, SettingReader infra) : ChildProcessStateBagForConsole(ChildProcessKind.AquaDx, infra.AquaDx) { protected override async Task CheckReadyAsync() { if (await base.CheckReadyAsync()) { //尝试连接 const int timeoutSecond = 90; const int retryIntervalMs = 1000; // 每秒重试一次 var startTime = DateTime.Now; var settings = infra.Settings.Infra.AquaDx; while (DateTime.Now - startTime < TimeSpan.FromSeconds(timeoutSecond)) { try { using var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); logger.LogInformation("Attempting to connect to AquaDx at {Host}:{Port}", settings.Host, settings.Port); await socket.ConnectAsync(settings.Host, settings.Port); return true; // 连接成功 } catch (Exception ex) { logger.LogWarning(ex, "Connection failed. Retrying..."); await Task.Delay(retryIntervalMs); } } } return false; } }