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); } }
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}"); } }