コード例 #1
0
        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);
                }
            }
        }
コード例 #2
0
        public async Task TeardownAsync()
        {
            await _clientTcpTransport.CloseAsync(CancellationToken.None);

            await _serverTcpTransport.CloseAsync(CancellationToken.None);

            await _tcpTransportListener.StopAsync(_cancellationToken);
        }