Пример #1
0
        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));
        }
Пример #2
0
        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);
        }