public static async Task <EchoClient_Rfc_862.EchoResult> RunTcpAsync()
        {
            // Hint: the using here means that the server is automatically closed
            // after the code is done. If you don't do that, the server stays open.
            using (var server = new EchoServer_Rfc_862())
            {
                await server.StartAsync();

                var client = new EchoClient_Rfc_862();
                // You only get the echo'd result from TCP with the final CloseAsync()
                // But for UDP  you get the returned packet.
                var partialResult = await client.WriteAsync(
                    new Windows.Networking.HostName("localhost"),
                    server.Options.Service,
                    EchoClient_Rfc_862.ProtocolType.Tcp,
                    "Hello, echo server!");

                // TODO: remove magic value?
                // Wait for the echo to have worked. The server is right here, so the
                // echo should be almost instantaneous.
                await Task.Delay(100);

                var completeResult = await client.CloseAsync(); // Close is essential for TCP.

                return(completeResult);
            }
        }
 private async void OnClose(object sender, RoutedEventArgs e)
 {
     if (client != null)
     {
         await client.CloseAsync();
     }
     client = null;
 }
        public static async Task <EchoClient_Rfc_862.EchoResult> RunUdpAsync()
        {
            // Hint: the using here means that the server is automatically closed
            // after the code is done. If you don't do that, the server stays open.
            using (var server = new EchoServer_Rfc_862())
            {
                await server.StartAsync();

                var client = new EchoClient_Rfc_862();
                var result = await client.WriteAsync(
                    new Windows.Networking.HostName("localhost"),
                    server.Options.Service,
                    EchoClient_Rfc_862.ProtocolType.Udp,
                    "Hello, echo server!");

                await client.CloseAsync(); // Close is really needed for TCP.

                return(result);
            }
        }
예제 #4
0
        public async Task Test_Echo_Good_Path_Tcp()
        {
            using (var server = new EchoServer_Rfc_862())
            {
                var client = new EchoClient_Rfc_862();
                await server.StartAsync();

                var result1 = await client.WriteAsync(new HostName("localhost"), server.Options.Service, EchoClient_Rfc_862.ProtocolType.Tcp, "ABCdef");

                Infrastructure.IfTrueError(result1.Succeeded != EchoClient_Rfc_862.EchoResult.State.InProgress, "TCP status should be in progress");

                var result2 = await client.WriteAsync(new HostName("localhost"), server.Options.Service, EchoClient_Rfc_862.ProtocolType.Tcp, "123456");

                Infrastructure.IfTrueError(result2.Succeeded != EchoClient_Rfc_862.EchoResult.State.InProgress, "TCP status should be in progress");

                await Task.Delay(100); //TODO: artificial delay to get the results.

                var result3 = await client.CloseAsync();

                Infrastructure.IfTrueError(result3.Succeeded != EchoClient_Rfc_862.EchoResult.State.Succeeded, "Close TCP status should be succeeded");
                Infrastructure.IfTrueError(result3.Value != "ABCdef123456", $"Should have gotten back abcDEF123456, not {result3.Value}");
            }
        }