public override async Task OnConnectedAsync(ConnectionContext connection) { var tcpClient = new TcpClientAdapter(connection); if (!_portEndPoints.TryGetValue(((IPEndPoint)connection.LocalEndPoint).Port, out var transportEndPoint)) { // This should never occur, but handling anyway. await connection.DisposeAsync(); return; } using var transport = new TcpTransport(tcpClient, _envelopeSerializer, transportEndPoint.ServerCertificate); await transport.OpenAsync(null, default); try { await _listener.ListenAsync(transport, connection.ConnectionClosed); } finally { if (transport.IsConnected) { using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5)); await transport.CloseAsync(cts.Token); } } }
public async Task TeardownAsync() { await _clientTcpTransport.CloseAsync(CancellationToken.None); await _serverTcpTransport.CloseAsync(CancellationToken.None); await _tcpTransportListener.StopAsync(_cancellationToken); }