コード例 #1
0
        public async Task RespondsInParallelWithDelayAsync()
        {
            var serverEndPoint = new IPEndPoint(IPAddress.Loopback, new Random().Next(5000, 5500));
            var server         = new TotServer(serverEndPoint);

            var tcpClients = new List <TcpClient>();
            var totClients = new List <TotClient>();

            try
            {
                await server.StartAsync();

                server.RequestArrived += RespondsInParallelWithDelayTest_Server_RequestArrivedAsync;

                var times = 10;
                for (int i = 0; i < times; i++)
                {
                    var tcpClient = new TcpClient();
                    await tcpClient.ConnectAsync(serverEndPoint.Address, serverEndPoint.Port);

                    tcpClients.Add(tcpClient);
                    var totClient = new TotClient(tcpClient);
                    await totClient.StartAsync();

                    totClients.Add(totClient);
                }

                var requestJobs = new List <Task <TotContent> >();
                foreach (var totClient in totClients)
                {
                    requestJobs.Add(totClient.RequestAsync("hello"));
                }

                foreach (var job in requestJobs)
                {
                    var res = await job;
                    Assert.Equal("world", res.ToString());
                }

                Assert.Equal(times, Interlocked.Read(ref _respondsInParallelWithDelayCount));
            }
            finally
            {
                foreach (var totClient in totClients)
                {
                    await totClient?.StopAsync();
                }
                foreach (var tcpClient in tcpClients)
                {
                    tcpClient?.Dispose();                     // this is when tcpClient.ConnectAsync fails
                }
                server.RequestArrived -= RespondsInParallelWithDelayTest_Server_RequestArrivedAsync;
                await server.StopAsync();
            }
        }
コード例 #2
0
        public async Task RespondsAsync()
        {
            var       serverEndPoint = new IPEndPoint(IPAddress.Loopback, new Random().Next(5000, 5500));
            var       server         = new TotServer(serverEndPoint);
            var       tcpClient      = new TcpClient();
            TotClient totClient      = null;

            try
            {
                await server.StartAsync();

                server.RequestArrived += RespondsTest_Server_RequestArrivedAsync;
                await tcpClient.ConnectAsync(serverEndPoint.Address, serverEndPoint.Port);

                totClient = new TotClient(tcpClient);

                await totClient.StartAsync();

                var r1 = await totClient.RequestAsync("hello");

                Assert.Equal("world", r1.ToString());

                await Assert.ThrowsAsync <TotRequestException>(async() => await totClient.RequestAsync("hell"));

                await Assert.ThrowsAsync <TotRequestException>(async() => await totClient.RequestAsync(new TotRequest("hello")
                {
                    Version = new TotVersion(200)
                }));
            }
            finally
            {
                await totClient?.StopAsync();

                tcpClient?.Dispose();                 // this is when tcpClient.ConnectAsync fails
                server.RequestArrived -= RespondsTest_Server_RequestArrivedAsync;
                await server.StopAsync();
            }
        }