Example #1
0
        /// <summary>
        /// Test that a small piece of data can be sent over the unreliable protocol.
        /// </summary>
        public void TestUnreliableData()
        {
            const string Text = @"hello";

            var dispatcher1 = new MxDispatcher(9021);
            var dispatcher2 = new MxDispatcher(9023);

            try
            {
                string receivedText = null;

                dispatcher1.MessageReceived +=
                    (sender, args) => { receivedText = Encoding.ASCII.GetString(args.Payload); };

                dispatcher2.Connect(new IPEndPoint(IPAddress.Loopback, 9021));

                this.SimulateNetworkCycles(4, dispatcher1, dispatcher2);

                dispatcher2.Send(new IPEndPoint(IPAddress.Loopback, 9021), Encoding.ASCII.GetBytes(Text));

                _assert.Null(receivedText);

                this.SimulateNetworkCycles(4, dispatcher1, dispatcher2);

                _assert.Equal(Text, receivedText);
            }
            finally
            {
                dispatcher1.Close();
                dispatcher2.Close();
            }
        }
Example #2
0
        /// <summary>
        /// Test that the dispatcher can be constructed without throwing an exception.
        /// </summary>
        public void TestConstruction()
        {
            var dispatcher1 = new MxDispatcher(9009);
            var dispatcher2 = new MxDispatcher(9011);

            dispatcher1.Close();
            dispatcher2.Close();
        }
Example #3
0
 /// <summary>
 /// Simulate a series of network cycles on the specified dispatchers.
 /// </summary>
 /// <param name="cycles">
 /// The number of cycles to run.
 /// </param>
 /// <param name="dispatcher1">
 /// The first dispatcher.
 /// </param>
 /// <param name="dispatcher2">
 /// The second dispatcher.
 /// </param>
 private void SimulateNetworkCycles(int cycles, MxDispatcher dispatcher1, MxDispatcher dispatcher2)
 {
     for (var i = 0; i < cycles; i++)
     {
         dispatcher1.Update();
         dispatcher2.Update();
         Thread.Sleep(1000 / 30);
     }
 }
Example #4
0
        /// <summary>
        /// Test that large amounts of data can be sent over the reliable connection
        /// without data becoming corrupt or lost.
        /// </summary>
        public void TestLargeReliableData()
        {
            const string Text = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
Sed id enim et est aliquet mollis. Suspendisse tempus libero in mauris 
iaculis interdum. Ut quis purus in libero euismod suscipit a non est. 
Vestibulum nec scelerisque tellus. Nullam porttitor, metus vitae placerat 
dignissim, nibh ante vehicula felis, vestibulum commodo dui urna sed enim. 
Fusce id neque non neque pellentesque tincidunt. In vehicula lacus vitae nibh 
iaculis scelerisque. Ut libero felis, aliquet nec fringilla sit amet, dignissim
sed quam. Ut a pulvinar quam. Proin mollis dictum ante vel elementum. Sed 
elementum neque libero, ac hendrerit ante semper at. Donec pretium hendrerit 
nisl, non dapibus urna. Phasellus et suscipit nibh, sed tempus magna. Aliquam 
porttitor malesuada ligula, a posuere enim pellentesque quis.

Proin id neque varius, porta eros eget, pellentesque massa. Suspendisse viverra
ligula at lorem dignissim fringilla. Proin viverra nunc neque, nec dignissim 
velit viverra vitae. Vestibulum fringilla eget nunc id cursus cras amet.";

            var udpClient1 = new UdpClient(0);
            var udpClient2 = new UdpClient(0);

            var dispatcher1 = new MxDispatcher(udpClient1);
            var dispatcher2 = new MxDispatcher(udpClient2);

            var port1 = ((IPEndPoint)udpClient1.Client.LocalEndPoint).Port;
            var port2 = ((IPEndPoint)udpClient2.Client.LocalEndPoint).Port;

            try
            {
                string receivedText = null;

                dispatcher1.MessageReceived +=
                    (sender, args) => { receivedText = Encoding.ASCII.GetString(args.Payload); };

                var client      = dispatcher2.Connect(new IPEndPoint(IPAddress.Loopback, port1));
                var clientGroup = dispatcher2.PlaceInGroup(client, "Group2");

                this.SimulateNetworkCycles(4, dispatcher1, dispatcher2);

                dispatcher2.Send(
                    clientGroup,
                    Encoding.ASCII.GetBytes(Text),
                    true);

                _assert.Null(receivedText);

                this.SimulateNetworkCycles(14, dispatcher1, dispatcher2);

                _assert.Equal(Text, receivedText);
            }
            finally
            {
                dispatcher1.Close();
                dispatcher2.Close();
            }
        }
Example #5
0
        /// <summary>
        /// Test that the dispatcher can be constructed without throwing an exception.
        /// </summary>
        public void TestConstruction()
        {
            var udpClient1 = new UdpClient(0);
            var udpClient2 = new UdpClient(0);

            var dispatcher1 = new MxDispatcher(udpClient1);
            var dispatcher2 = new MxDispatcher(udpClient2);

            dispatcher1.Close();
            dispatcher2.Close();
        }
Example #6
0
        /// <summary>
        /// Test that the dispatcher can be constructed without throwing an exception.
        /// </summary>
        public void TestConstruction()
        {
            var udpClient1 = new UdpClient(0);
            var udpClient2 = new UdpClient(0);

            var dispatcher1 = new MxDispatcher(udpClient1);
            var dispatcher2 = new MxDispatcher(udpClient2);

            dispatcher1.Close();
            dispatcher2.Close();
        }
Example #7
0
        /// <summary>
        /// Test that a small piece of data can be sent over the unreliable protocol.
        /// </summary>
        public void TestLostIsNotTriggered()
        {
            const string Text = @"hello";

            var udpClient1 = new UdpClient(0);
            var udpClient2 = new UdpClient(0);

            var dispatcher1 = new MxDispatcher(udpClient1);
            var dispatcher2 = new MxDispatcher(udpClient2);

            var port1 = ((IPEndPoint)udpClient1.Client.LocalEndPoint).Port;
            var port2 = ((IPEndPoint)udpClient2.Client.LocalEndPoint).Port;

            try
            {
                string receivedText = null;
                bool   lost         = false;
                var    bytes        = Encoding.ASCII.GetBytes(Text);

                dispatcher1.MessageReceived +=
                    (sender, args) =>
                {
                    receivedText = Encoding.ASCII.GetString(args.Payload);
                };

                dispatcher2.MessageLost += (sender, args) =>
                {
                    if (args.Payload == bytes)
                    {
                        lost = true;
                    }
                };

                var client      = dispatcher2.Connect(new IPEndPoint(IPAddress.Loopback, port1));
                var clientGroup = dispatcher2.PlaceInGroup(client, "Group2");

                this.SimulateNetworkCycles(4, dispatcher1, dispatcher2);

                dispatcher2.Send(clientGroup, bytes);

                _assert.Null(receivedText);

                this.SimulateNetworkCycles(8, dispatcher1, dispatcher2);

                _assert.Equal(Text, receivedText);
                _assert.False(lost);
            }
            finally
            {
                dispatcher1.Close();
                dispatcher2.Close();
            }
        }
Example #8
0
        /// <summary>
        /// Test that the dispatcher can connect without throwing an exception.
        /// </summary>
        public void TestConnectionWithoutUpdate()
        {
            var dispatcher1 = new MxDispatcher(9005);
            var dispatcher2 = new MxDispatcher(9007);

            try
            {
                dispatcher2.Connect(new IPEndPoint(IPAddress.Loopback, 9005));
            }
            finally
            {
                dispatcher1.Close();
                dispatcher2.Close();
            }
        }
Example #9
0
        public void TestConnectionWithoutUpdate()
        {
            var dispatcher1 = new MxDispatcher(9005);
            var dispatcher2 = new MxDispatcher(9007);

            try
            {
                dispatcher2.Connect(new IPEndPoint(IPAddress.Loopback, 9005));
            }
            finally
            {
                dispatcher1.Close();
                dispatcher2.Close();
            }
        }
Example #10
0
        /// <summary>
        /// Test that a small piece of data can be sent over the unreliable protocol.
        /// </summary>
        public void TestLostIsNotTriggered()
        {
            const string Text = @"hello";

            var dispatcher1 = new MxDispatcher(9027);
            var dispatcher2 = new MxDispatcher(9029);

            try
            {
                string receivedText = null;
                bool   lost         = false;
                var    bytes        = Encoding.ASCII.GetBytes(Text);

                dispatcher1.MessageReceived +=
                    (sender, args) =>
                {
                    receivedText = Encoding.ASCII.GetString(args.Payload);
                };

                dispatcher2.MessageLost += (sender, args) =>
                {
                    if (args.Payload == bytes)
                    {
                        lost = true;
                    }
                };

                dispatcher2.Connect(new IPEndPoint(IPAddress.Loopback, 9027));

                this.SimulateNetworkCycles(4, dispatcher1, dispatcher2);

                dispatcher2.Send(new IPEndPoint(IPAddress.Loopback, 9027), bytes);

                _assert.Null(receivedText);

                this.SimulateNetworkCycles(8, dispatcher1, dispatcher2);

                _assert.Equal(Text, receivedText);
                _assert.False(lost);
            }
            finally
            {
                dispatcher1.Close();
                dispatcher2.Close();
            }
        }
Example #11
0
        /// <summary>
        /// Test that the dispatcher can connect and update without throwing an exception.
        /// </summary>
        public void TestConnectionWithUpdate()
        {
            var dispatcher1 = new MxDispatcher(9001);
            var dispatcher2 = new MxDispatcher(9003);

            try
            {
                dispatcher2.Connect(new IPEndPoint(IPAddress.Loopback, 9001));

                this.SimulateNetworkCycles(8, dispatcher1, dispatcher2);
            }
            finally
            {
                dispatcher1.Close();
                dispatcher2.Close();
            }
        }
Example #12
0
        /// <summary>
        /// Test that a small piece of data can be sent over the unreliable protocol.
        /// </summary>
        public void TestAcknowledgeEventData()
        {
            const string Text = @"hello";

            var dispatcher1 = new MxDispatcher(9033);
            var dispatcher2 = new MxDispatcher(9035);

            try
            {
                string receivedText = null;
                bool   acknowledged = false;

                dispatcher1.MessageReceived +=
                    (sender, args) =>
                {
                    receivedText = Encoding.ASCII.GetString(args.Payload);
                };

                dispatcher2.MessageAcknowledged += (sender, args) =>
                {
                    acknowledged = true;
                };

                var client      = dispatcher2.Connect(new IPEndPoint(IPAddress.Loopback, 9033));
                var clientGroup = dispatcher2.PlaceInGroup(client, "Group2");

                this.SimulateNetworkCycles(4, dispatcher1, dispatcher2);

                dispatcher2.Send(clientGroup, Encoding.ASCII.GetBytes(Text));

                _assert.Null(receivedText);

                this.SimulateNetworkCycles(8, dispatcher1, dispatcher2);

                _assert.Equal(Text, receivedText);
                _assert.True(acknowledged);
            }
            finally
            {
                dispatcher1.Close();
                dispatcher2.Close();
            }
        }
Example #13
0
        public void TestAcknowledgeEventData()
        {
            const string Text = @"hello";

            var dispatcher1 = new MxDispatcher(9023);
            var dispatcher2 = new MxDispatcher(9025);

            try
            {
                string receivedText = null;
                bool acknowledged = false;

                dispatcher1.MessageReceived +=
                    (sender, args) =>
                    {
                        receivedText = Encoding.ASCII.GetString(args.Payload);
                    };

                dispatcher2.MessageAcknowledged += (sender, args) =>
                {
                    acknowledged = true;
                };

                dispatcher2.Connect(new IPEndPoint(IPAddress.Loopback, 9023));

                this.SimulateNetworkCycles(4, dispatcher1, dispatcher2);

                dispatcher2.Send(new IPEndPoint(IPAddress.Loopback, 9023), Encoding.ASCII.GetBytes(Text));

                Assert.Null(receivedText);

                this.SimulateNetworkCycles(8, dispatcher1, dispatcher2);

                Assert.Equal(Text, receivedText);
                Assert.True(acknowledged);
            }
            finally
            {
                dispatcher1.Close();
                dispatcher2.Close();
            }
        }
Example #14
0
        /// <summary>
        /// Test that the dispatcher can connect without throwing an exception.
        /// </summary>
        public void TestConnectionWithoutUpdate()
        {
            var udpClient1 = new UdpClient(0);
            var udpClient2 = new UdpClient(0);

            var dispatcher1 = new MxDispatcher(udpClient1);
            var dispatcher2 = new MxDispatcher(udpClient2);

            var port1 = ((IPEndPoint)udpClient1.Client.LocalEndPoint).Port;
            var port2 = ((IPEndPoint)udpClient2.Client.LocalEndPoint).Port;

            try
            {
                dispatcher2.Connect(new IPEndPoint(IPAddress.Loopback, port1));
            }
            finally
            {
                dispatcher1.Close();
                dispatcher2.Close();
            }
        }
Example #15
0
        /// <summary>
        /// Test that the dispatcher can connect without throwing an exception.
        /// </summary>
        public void TestConnectionWithoutUpdate()
        {
            var udpClient1 = new UdpClient(0);
            var udpClient2 = new UdpClient(0);

            var dispatcher1 = new MxDispatcher(udpClient1);
            var dispatcher2 = new MxDispatcher(udpClient2);

            var port1 = ((IPEndPoint)udpClient1.Client.LocalEndPoint).Port;
            var port2 = ((IPEndPoint)udpClient2.Client.LocalEndPoint).Port;

            try
            {
                dispatcher2.Connect(new IPEndPoint(IPAddress.Loopback, port1));
            }
            finally
            {
                dispatcher1.Close();
                dispatcher2.Close();
            }
        }
Example #16
0
        /// <summary>
        /// Test that a small piece of data can be sent over the unreliable protocol.
        /// </summary>
        public void TestUnreliableData()
        {
            const string Text = @"hello";

            var udpClient1 = new UdpClient(0);
            var udpClient2 = new UdpClient(0);

            var dispatcher1 = new MxDispatcher(udpClient1);
            var dispatcher2 = new MxDispatcher(udpClient2);

            var port1 = ((IPEndPoint)udpClient1.Client.LocalEndPoint).Port;
            var port2 = ((IPEndPoint)udpClient2.Client.LocalEndPoint).Port;

            try
            {
                string receivedText = null;

                dispatcher1.MessageReceived +=
                    (sender, args) => { receivedText = Encoding.ASCII.GetString(args.Payload); };

                var client      = dispatcher2.Connect(new IPEndPoint(IPAddress.Loopback, port1));
                var clientGroup = dispatcher2.PlaceInGroup(client, "Group2");

                this.SimulateNetworkCycles(4, dispatcher1, dispatcher2);

                dispatcher2.Send(clientGroup, Encoding.ASCII.GetBytes(Text));

                _assert.Null(receivedText);

                this.SimulateNetworkCycles(4, dispatcher1, dispatcher2);

                _assert.Equal(Text, receivedText);
            }
            finally
            {
                dispatcher1.Close();
                dispatcher2.Close();
            }
        }
Example #17
0
        public DefaultNetworkAPI(bool join, IPAddress address)
        {
            if (!join)
            {
                this.m_MxDispatcher = new MxDispatcher(9000, 9001);
            }
            else
            {
                this.m_MxDispatcher = new MxDispatcher(9002, 9003);
            }
            this.m_MxDispatcher.MessageReceived         += this.OnMessageReceived;
            this.m_MxDispatcher.ClientDisconnected      += this.OnClientDisconnected;
            this.m_MxDispatcher.ClientDisconnectWarning += this.OnClientDisconnectWarning;

            this.m_MessageEvents = new Dictionary <string, List <Action <string> > >();

            this.WasJoin = join;

            if (join)
            {
                this.m_MxDispatcher.Connect(new DualIPEndPoint(address, 9000, 9001));
            }
        }
Example #18
0
        public void TestConnectionWithUpdate()
        {
            var dispatcher1 = new MxDispatcher(9001);
            var dispatcher2 = new MxDispatcher(9003);

            try
            {
                dispatcher2.Connect(new IPEndPoint(IPAddress.Loopback, 9001));

                this.SimulateNetworkCycles(8, dispatcher1, dispatcher2);
            }
            finally
            {
                dispatcher1.Close();
                dispatcher2.Close();
            }
        }
Example #19
0
        /// <summary>
        /// Test that a small piece of data can be sent over the unreliable protocol.
        /// </summary>
        public void TestUnreliableData()
        {
            const string Text = @"hello";

            var udpClient1 = new UdpClient(0);
            var udpClient2 = new UdpClient(0);

            var dispatcher1 = new MxDispatcher(udpClient1);
            var dispatcher2 = new MxDispatcher(udpClient2);

            var port1 = ((IPEndPoint)udpClient1.Client.LocalEndPoint).Port;
            var port2 = ((IPEndPoint)udpClient2.Client.LocalEndPoint).Port;

            try
            {
                string receivedText = null;

                dispatcher1.MessageReceived +=
                    (sender, args) => { receivedText = Encoding.ASCII.GetString(args.Payload); };

                var client = dispatcher2.Connect(new IPEndPoint(IPAddress.Loopback, port1));
                var clientGroup = dispatcher2.PlaceInGroup(client, "Group2");

                this.SimulateNetworkCycles(4, dispatcher1, dispatcher2);

                dispatcher2.Send(clientGroup, Encoding.ASCII.GetBytes(Text));

                _assert.Null(receivedText);

                this.SimulateNetworkCycles(4, dispatcher1, dispatcher2);

                _assert.Equal(Text, receivedText);
            }
            finally
            {
                dispatcher1.Close();
                dispatcher2.Close();
            }
        }
Example #20
0
 /// <summary>
 /// Simulate a series of network cycles on the specified dispatchers.
 /// </summary>
 /// <param name="cycles">
 /// The number of cycles to run.
 /// </param>
 /// <param name="dispatcher1">
 /// The first dispatcher.
 /// </param>
 /// <param name="dispatcher2">
 /// The second dispatcher.
 /// </param>
 private void SimulateNetworkCycles(int cycles, MxDispatcher dispatcher1, MxDispatcher dispatcher2)
 {
     for (var i = 0; i < cycles; i++)
     {
         dispatcher1.Update();
         dispatcher2.Update();
         Thread.Sleep(1000 / 30);
     }
 }
Example #21
0
        public void TestUnreliableData()
        {
            const string Text = @"hello";

            var dispatcher1 = new MxDispatcher(9021);
            var dispatcher2 = new MxDispatcher(9023);

            try
            {
                string receivedText = null;

                dispatcher1.MessageReceived +=
                    (sender, args) => { receivedText = Encoding.ASCII.GetString(args.Payload); };

                dispatcher2.Connect(new IPEndPoint(IPAddress.Loopback, 9021));

                this.SimulateNetworkCycles(4, dispatcher1, dispatcher2);

                dispatcher2.Send(new IPEndPoint(IPAddress.Loopback, 9021), Encoding.ASCII.GetBytes(Text));

                Assert.Null(receivedText);

                this.SimulateNetworkCycles(4, dispatcher1, dispatcher2);

                Assert.Equal(Text, receivedText);
            }
            finally
            {
                dispatcher1.Close();
                dispatcher2.Close();
            }
        }
Example #22
0
        public void TestLostIsNotTriggered()
        {
            const string Text = @"hello";

            var dispatcher1 = new MxDispatcher(9027);
            var dispatcher2 = new MxDispatcher(9029);

            try
            {
                string receivedText = null;
                bool lost = false;
                var bytes = Encoding.ASCII.GetBytes(Text);

                dispatcher1.MessageReceived +=
                    (sender, args) =>
                    {
                        receivedText = Encoding.ASCII.GetString(args.Payload);
                    };

                dispatcher2.MessageLost += (sender, args) =>
                {
                    if (args.Payload == bytes)
                    {
                        lost = true;
                    }
                };

                dispatcher2.Connect(new IPEndPoint(IPAddress.Loopback, 9027));

                this.SimulateNetworkCycles(4, dispatcher1, dispatcher2);

                dispatcher2.Send(new IPEndPoint(IPAddress.Loopback, 9027), bytes);

                Assert.Null(receivedText);

                this.SimulateNetworkCycles(8, dispatcher1, dispatcher2);

                Assert.Equal(Text, receivedText);
                Assert.False(lost);
            }
            finally
            {
                dispatcher1.Close();
                dispatcher2.Close();
            }
        }
Example #23
0
        public void TestLargeReliableData()
        {
            const string Text = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit.
            Sed id enim et est aliquet mollis. Suspendisse tempus libero in mauris
            iaculis interdum. Ut quis purus in libero euismod suscipit a non est.
            Vestibulum nec scelerisque tellus. Nullam porttitor, metus vitae placerat
            dignissim, nibh ante vehicula felis, vestibulum commodo dui urna sed enim.
            Fusce id neque non neque pellentesque tincidunt. In vehicula lacus vitae nibh
            iaculis scelerisque. Ut libero felis, aliquet nec fringilla sit amet, dignissim
            sed quam. Ut a pulvinar quam. Proin mollis dictum ante vel elementum. Sed
            elementum neque libero, ac hendrerit ante semper at. Donec pretium hendrerit
            nisl, non dapibus urna. Phasellus et suscipit nibh, sed tempus magna. Aliquam
            porttitor malesuada ligula, a posuere enim pellentesque quis.

            Proin id neque varius, porta eros eget, pellentesque massa. Suspendisse viverra
            ligula at lorem dignissim fringilla. Proin viverra nunc neque, nec dignissim
            velit viverra vitae. Vestibulum fringilla eget nunc id cursus cras amet.";

            var dispatcher1 = new MxDispatcher(9013);
            var dispatcher2 = new MxDispatcher(9015);

            try
            {
                string receivedText = null;

                dispatcher1.MessageReceived +=
                    (sender, args) => { receivedText = Encoding.ASCII.GetString(args.Payload); };

                dispatcher2.Connect(new IPEndPoint(IPAddress.Loopback, 9013));

                this.SimulateNetworkCycles(4, dispatcher1, dispatcher2);

                dispatcher2.Send(
                    new IPEndPoint(IPAddress.Loopback, 9013),
                    Encoding.ASCII.GetBytes(Text),
                    true);

                Assert.Null(receivedText);

                this.SimulateNetworkCycles(14, dispatcher1, dispatcher2);

                Assert.Equal(Text, receivedText);
            }
            finally
            {
                dispatcher1.Close();
                dispatcher2.Close();
            }
        }
Example #24
0
        public void TestConstruction()
        {
            var dispatcher1 = new MxDispatcher(9009);
            var dispatcher2 = new MxDispatcher(9011);

            dispatcher1.Close();
            dispatcher2.Close();
        }
Example #25
0
        /// <summary>
        /// Test that a small piece of data can be sent over the unreliable protocol.
        /// </summary>
        public void TestLostIsNotTriggered()
        {
            const string Text = @"hello";

            var udpClient1 = new UdpClient(0);
            var udpClient2 = new UdpClient(0);

            var dispatcher1 = new MxDispatcher(udpClient1);
            var dispatcher2 = new MxDispatcher(udpClient2);

            var port1 = ((IPEndPoint)udpClient1.Client.LocalEndPoint).Port;
            var port2 = ((IPEndPoint)udpClient2.Client.LocalEndPoint).Port;

            try
            {
                string receivedText = null;
                bool lost = false;
                var bytes = Encoding.ASCII.GetBytes(Text);

                dispatcher1.MessageReceived +=
                    (sender, args) =>
                    {
                        receivedText = Encoding.ASCII.GetString(args.Payload);
                    };

                dispatcher2.MessageLost += (sender, args) =>
                {
                    if (args.Payload == bytes)
                    {
                        lost = true;
                    }
                };

                var client = dispatcher2.Connect(new IPEndPoint(IPAddress.Loopback, port1));
                var clientGroup = dispatcher2.PlaceInGroup(client, "Group2");

                this.SimulateNetworkCycles(4, dispatcher1, dispatcher2);

                dispatcher2.Send(clientGroup, bytes);

                _assert.Null(receivedText);

                this.SimulateNetworkCycles(8, dispatcher1, dispatcher2);

                _assert.Equal(Text, receivedText);
                _assert.False(lost);
            }
            finally
            {
                dispatcher1.Close();
                dispatcher2.Close();
            }
        }
Example #26
0
        /// <summary>
        /// Test that large amounts of data can be sent over the reliable connection
        /// without data becoming corrupt or lost.
        /// </summary>
        public void TestHugeReliableData()
        {
            const string Content = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
Sed id enim et est aliquet mollis. Suspendisse tempus libero in mauris 
iaculis interdum. Ut quis purus in libero euismod suscipit a non est. 
Vestibulum nec scelerisque tellus. Nullam porttitor, metus vitae placerat 
dignissim, nibh ante vehicula felis, vestibulum commodo dui urna sed enim. 
Fusce id neque non neque pellentesque tincidunt. In vehicula lacus vitae nibh 
iaculis scelerisque. Ut libero felis, aliquet nec fringilla sit amet, dignissim
sed quam. Ut a pulvinar quam. Proin mollis dictum ante vel elementum. Sed 
elementum neque libero, ac hendrerit ante semper at. Donec pretium hendrerit 
nisl, non dapibus urna. Phasellus et suscipit nibh, sed tempus magna. Aliquam 
porttitor malesuada ligula, a posuere enim pellentesque quis.

Proin id neque varius, porta eros eget, pellentesque massa. Suspendisse viverra
ligula at lorem dignissim fringilla. Proin viverra nunc neque, nec dignissim 
velit viverra vitae. Vestibulum fringilla eget nunc id cursus cras amet.
";
            var          text    = string.Empty;

            while (text.Length < 128016 - Content.Length)
            {
                text += Content;
            }

            var dispatcher1 = new MxDispatcher(9017);
            var dispatcher2 = new MxDispatcher(9019);

            try
            {
                string receivedText = null;

                dispatcher1.MessageReceived +=
                    (sender, args) =>
                {
                    receivedText = Encoding.ASCII.GetString(args.Payload);
                };

                dispatcher2.Connect(new IPEndPoint(IPAddress.Loopback, 9017));

                this.SimulateNetworkCycles(4, dispatcher1, dispatcher2);

                dispatcher2.Send(
                    new IPEndPoint(IPAddress.Loopback, 9017),
                    Encoding.ASCII.GetBytes(text),
                    true);

                _assert.Null(receivedText);

                for (var i = 0; i < 246 * 1024 && receivedText == null; i++)
                {
                    this.SimulateNetworkCycles(2, dispatcher1, dispatcher2);
                }

                _assert.Equal(text, receivedText);
            }
            finally
            {
                dispatcher1.Close();
                dispatcher2.Close();
            }
        }
Example #27
0
        /// <summary>
        /// Test that large amounts of data can be sent over the reliable connection
        /// without data becoming corrupt or lost.
        /// </summary>
        public void TestHugeReliableData()
        {
            const string Content = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
Sed id enim et est aliquet mollis. Suspendisse tempus libero in mauris 
iaculis interdum. Ut quis purus in libero euismod suscipit a non est. 
Vestibulum nec scelerisque tellus. Nullam porttitor, metus vitae placerat 
dignissim, nibh ante vehicula felis, vestibulum commodo dui urna sed enim. 
Fusce id neque non neque pellentesque tincidunt. In vehicula lacus vitae nibh 
iaculis scelerisque. Ut libero felis, aliquet nec fringilla sit amet, dignissim
sed quam. Ut a pulvinar quam. Proin mollis dictum ante vel elementum. Sed 
elementum neque libero, ac hendrerit ante semper at. Donec pretium hendrerit 
nisl, non dapibus urna. Phasellus et suscipit nibh, sed tempus magna. Aliquam 
porttitor malesuada ligula, a posuere enim pellentesque quis.

Proin id neque varius, porta eros eget, pellentesque massa. Suspendisse viverra
ligula at lorem dignissim fringilla. Proin viverra nunc neque, nec dignissim 
velit viverra vitae. Vestibulum fringilla eget nunc id cursus cras amet.
";
            var text = string.Empty;

            while (text.Length < 128016 - Content.Length)
            {
                text += Content;
            }

            var udpClient1 = new UdpClient(0);
            var udpClient2 = new UdpClient(0);

            var dispatcher1 = new MxDispatcher(udpClient1);
            var dispatcher2 = new MxDispatcher(udpClient2);

            var port1 = ((IPEndPoint)udpClient1.Client.LocalEndPoint).Port;
            var port2 = ((IPEndPoint)udpClient2.Client.LocalEndPoint).Port;

            try
            {
                string receivedText = null;

                dispatcher1.MessageReceived +=
                    (sender, args) =>
                    {
                        receivedText = Encoding.ASCII.GetString(args.Payload);
                    };

                var client = dispatcher2.Connect(new IPEndPoint(IPAddress.Loopback, port1));
                var clientGroup = dispatcher2.PlaceInGroup(client, "Group2");

                this.SimulateNetworkCycles(4, dispatcher1, dispatcher2);

                dispatcher2.Send(
                    clientGroup,
                    Encoding.ASCII.GetBytes(text),
                    true);

                _assert.Null(receivedText);

                for (var i = 0; i < 246 * 1024 && receivedText == null; i++)
                {
                    this.SimulateNetworkCycles(2, dispatcher1, dispatcher2);
                }

                _assert.Equal(text, receivedText);
            }
            finally
            {
                dispatcher1.Close();
                dispatcher2.Close();
            }
        }