123456789101112131415161718192021222324252627282930313233343536373839 |
- using System.Net.Sockets;
- using SinMaiLauncher.Models;
- namespace SinMaiLauncher.ChildProcessHolder;
- internal class ProcessStateBagAquaDx(ILogger<ProcessStateBagAquaDx> logger, SettingReader infra) : ChildProcessStateBagForConsole(ChildProcessKind.AquaDx, infra.AquaDx)
- {
- protected override async Task<bool> 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;
- }
- }
|