public void SendReceiveTest(AnyBarImage color) { const int ackTimeout = 1000; const int testTimeout = 30000; var datagram = Encoding.UTF8.GetBytes(color.ToString().ToLowerInvariant()); var datagramSize = datagram.Length; var address = IPAddress.Loopback; var server = new Socket(address.AddressFamily, SocketType.Dgram, ProtocolType.Udp); var port = server.BindToAnonymousPort(address); var client = new AnyBarClient(address, port); var receiverAck = new ManualResetEventSlim(); var senderAck = new ManualResetEventSlim(); var serverThread = new Thread(() => { using (server) { var endpoint = (IPEndPoint)server.LocalEndPoint; var remote = endpoint.Create(endpoint.Serialize()); var recvBuffer = new byte[datagramSize]; int received = server.ReceiveFrom(recvBuffer, SocketFlags.None, ref remote); Assert.Equal(datagramSize, received); var receivedChecksums = Fletcher32.Checksum(recvBuffer, 0, received); receiverAck.Set(); Assert.True(senderAck.Wait(ackTimeout)); senderAck.Reset(); } }); serverThread.Start(); using (client) { client.Change(color); Assert.True(receiverAck.Wait(ackTimeout)); receiverAck.Reset(); senderAck.Set(); } Assert.True(serverThread.Join(testTimeout)); }
public static int Main(string[] args) { var parser = new Parser(s => { s.CaseInsensitiveEnumValues = true; }); var exitCode = parser .ParseArguments <Options>(args) .MapResult( options => { Console.WriteLine($"[{options.Host}:{options.Port} => {options.Color}]"); IPAddress ipAddress; AnyBarClient client; if (IPAddress.TryParse(options.Host, out ipAddress)) { client = new AnyBarClient(ipAddress, options.Port); } else { client = new AnyBarClient(options.Host, options.Port); } client.Change(options.Color); return(0); }, errors => { var colorError = (errors as IEnumerable <Error>) .FirstOrDefault(e => e is BadFormatConversionError) as BadFormatConversionError; if (colorError?.NameInfo.LongName == "color") { Console.WriteLine("Color can be one of: {0}", String.Join(", ", Enum.GetNames(typeof(AnyBarImage)))); } return(1); }); return(exitCode); }