using System.Net; using System.Net.Quic; using DTLib.Logging; namespace Meum.Client; public class ServerConnection : IAsyncDisposable { private readonly QuicConnection _quicConnection; private readonly ILogger _logger; public DnsEndPoint ServerEndPoint { get; } private ServerConnection(QuicConnection quicConnection, DnsEndPoint serverEndPoint, ILogger logger) { ServerEndPoint = serverEndPoint; _quicConnection = quicConnection; _logger = logger; } public static async Task OpenAsync(QuicConnection quicConnection, DnsEndPoint serverEndPoint, ILogger logger, CancellationToken ct) { var serverConnection = new ServerConnection(quicConnection, serverEndPoint, logger); var systemStream = await quicConnection.OpenStreamAsync(QuicStreamType.Bidirectional, ct); await systemStream.SendPingReceivePong(); return serverConnection; } public override int GetHashCode() { return _quicConnection.RemoteEndPoint.GetHashCode(); } public async ValueTask DisposeAsync() { await _quicConnection.DisposeAsync(); } }