Esempio n. 1
0
        public void TestTransportServerEvent()
        {
            ICodec <TestEvent> codec = new TestEventCodec();

            BlockingCollection <TestEvent> queue = new BlockingCollection <TestEvent>();
            List <TestEvent> events = new List <TestEvent>();

            IPEndPoint endpoint      = new IPEndPoint(_localIpAddress, 0);
            var        remoteHandler = Observer.Create <TransportEvent <TestEvent> >(tEvent => queue.Add(tEvent.Data));

            using (var server = new TransportServer <TestEvent>(endpoint, remoteHandler, codec, _tcpPortProvider))
            {
                server.Run();

                IPEndPoint remoteEndpoint = new IPEndPoint(_localIpAddress, server.LocalEndpoint.Port);
                using (var client = new TransportClient <TestEvent>(remoteEndpoint, codec))
                {
                    client.Send(new TestEvent("Hello"));
                    client.Send(new TestEvent(", "));
                    client.Send(new TestEvent("World!"));

                    events.Add(queue.Take());
                    events.Add(queue.Take());
                    events.Add(queue.Take());
                }
            }

            Assert.Equal(3, events.Count);
            Assert.Equal(events[0].Message, "Hello");
            Assert.Equal(events[1].Message, ", ");
            Assert.Equal(events[2].Message, "World!");
        }
Esempio n. 2
0
        /// <summary>
        /// Look up IPEndPoints that have been registered with the NameService
        /// </summary>
        /// <param name="ids">The list of ids to look up</param>
        /// <returns>A list of NameAssignments representing the mapped identifier/IPEndpoint
        /// pairs</returns>
        public List <NameAssignment> Lookup(List <string> ids)
        {
            _client.Send(new NamingLookupRequest(ids));
            NamingLookupResponse response = _lookupResponseQueue.Take();

            return(response.NameAssignments);
        }
Esempio n. 3
0
        public void TestTransportSenderStage()
        {
            ICodec <string> codec    = new StringCodec();
            IPEndPoint      endpoint = new IPEndPoint(_localIpAddress, 0);

            List <string> events = new List <string>();
            BlockingCollection <string> queue = new BlockingCollection <string>();

            // Server echoes the message back to the client
            var remoteHandler = Observer.Create <TransportEvent <string> >(tEvent => tEvent.Link.Write(tEvent.Data));

            using (TransportServer <string> server = new TransportServer <string>(endpoint, remoteHandler, codec, _tcpPortProvider))
            {
                server.Run();

                var        clientHandler  = Observer.Create <TransportEvent <string> >(tEvent => queue.Add(tEvent.Data));
                IPEndPoint remoteEndpoint = new IPEndPoint(_localIpAddress, server.LocalEndpoint.Port);
                using (var client = new TransportClient <string>(remoteEndpoint, codec, clientHandler))
                {
                    client.Send("Hello");
                    client.Send(", ");
                    client.Send(" World");

                    events.Add(queue.Take());
                    events.Add(queue.Take());
                    events.Add(queue.Take());
                }
            }

            Assert.Equal(3, events.Count);
            Assert.Equal(events[0], "Hello");
            Assert.Equal(events[1], ", ");
            Assert.Equal(events[2], " World");
        }
Esempio n. 4
0
        /// <summary>
        /// Synchronously register the id and endpoint with the NameServer.
        /// </summary>
        /// <param name="id">The identifier</param>
        /// <param name="endpoint">The endpoint</param>
        public void Register(string id, IPEndPoint endpoint)
        {
            NameAssignment assignment = new NameAssignment(id, endpoint);

            _client.Send(new NamingRegisterRequest(assignment));
            _registerResponseQueue.Take();
        }
Esempio n. 5
0
        public void TestTransportServer()
        {
            ICodec <string> codec = new StringCodec();

            BlockingCollection <string> queue = new BlockingCollection <string>();
            List <string> events = new List <string>();

            IPEndPoint endpoint      = new IPEndPoint(_localIpAddress, 0);
            var        remoteHandler = Observer.Create <TransportEvent <string> >(tEvent => queue.Add(tEvent.Data));

            using (var server = new TransportServer <string>(endpoint, remoteHandler, codec, _tcpPortProvider))
            {
                server.Run();

                IPEndPoint remoteEndpoint = new IPEndPoint(_localIpAddress, server.LocalEndpoint.Port);
                using (var client = new TransportClient <string>(remoteEndpoint, codec, _tcpClientFactory))
                {
                    client.Send("TestTransportServer - 1");
                    client.Send("TestTransportServer - 2");
                    client.Send("TestTransportServer - 3");

                    events.Add(queue.Take());
                    events.Add(queue.Take());
                    events.Add(queue.Take());
                }
            }

            Assert.Equal(3, events.Count);
            Assert.Equal("TestTransportServer - 1", events[0]);
            Assert.Equal("TestTransportServer - 2", events[1]);
            Assert.Equal("TestTransportServer - 3", events[2]);
        }
Esempio n. 6
0
        public void TestTransportServerEvent()
        {
            ICodec <TestEvent> codec = new TestEventCodec();
            int port = NetworkUtils.GenerateRandomPort(6000, 7000);

            BlockingCollection <TestEvent> queue = new BlockingCollection <TestEvent>();
            List <TestEvent> events = new List <TestEvent>();

            IPEndPoint endpoint      = new IPEndPoint(IPAddress.Any, port);
            var        remoteHandler = Observer.Create <TransportEvent <TestEvent> >(tEvent => queue.Add(tEvent.Data));

            using (var server = new TransportServer <TestEvent>(endpoint, remoteHandler, codec))
            {
                server.Run();

                IPEndPoint remoteEndpoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), port);
                using (var client = new TransportClient <TestEvent>(remoteEndpoint, codec))
                {
                    client.Send(new TestEvent("Hello"));
                    client.Send(new TestEvent(", "));
                    client.Send(new TestEvent("World!"));

                    events.Add(queue.Take());
                    events.Add(queue.Take());
                    events.Add(queue.Take());
                }
            }

            Assert.AreEqual(3, events.Count);
        }
Esempio n. 7
0
        public void TestTransportSenderStage()
        {
            ICodec <string> codec    = new StringCodec();
            int             port     = NetworkUtils.GenerateRandomPort(6000, 7000);
            IPEndPoint      endpoint = new IPEndPoint(IPAddress.Any, port);

            List <string> events = new List <string>();
            BlockingCollection <string> queue = new BlockingCollection <string>();

            // Server echoes the message back to the client
            var remoteHandler = Observer.Create <TransportEvent <string> >(tEvent => tEvent.Link.Write(tEvent.Data));

            using (TransportServer <string> server = new TransportServer <string>(endpoint, remoteHandler, codec))
            {
                server.Run();

                var        clientHandler  = Observer.Create <TransportEvent <string> >(tEvent => queue.Add(tEvent.Data));
                IPEndPoint remoteEndpoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), port);
                using (var client = new TransportClient <string>(remoteEndpoint, codec, clientHandler))
                {
                    client.Send("Hello");
                    client.Send(", ");
                    client.Send(" World");

                    events.Add(queue.Take());
                    events.Add(queue.Take());
                    events.Add(queue.Take());
                }
            }

            Assert.AreEqual(3, events.Count);
        }
Esempio n. 8
0
        public void TestRaceCondition()
        {
            ICodec <string> codec = new StringCodec();
            int             port  = NetworkUtils.GenerateRandomPort(6000, 7000);

            BlockingCollection <string> queue = new BlockingCollection <string>();
            List <string> events            = new List <string>();
            int           numEventsExpected = 150;

            IPEndPoint endpoint      = new IPEndPoint(IPAddress.Any, port);
            var        remoteHandler = Observer.Create <TransportEvent <string> >(tEvent => queue.Add(tEvent.Data));

            using (var server = new TransportServer <string>(endpoint, remoteHandler, codec))
            {
                server.Run();

                for (int i = 0; i < numEventsExpected / 3; i++)
                {
                    Task.Run(() =>
                    {
                        IPEndPoint remoteEndpoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), port);
                        using (var client = new TransportClient <string>(remoteEndpoint, codec))
                        {
                            client.Send("Hello");
                            client.Send(", ");
                            client.Send("World!");
                        }
                    });
                }

                for (int i = 0; i < numEventsExpected; i++)
                {
                    events.Add(queue.Take());
                }
            }

            Assert.AreEqual(numEventsExpected, events.Count);
        }
Esempio n. 9
0
        public void TestRaceCondition()
        {
            ICodec <string>             codec             = new StringCodec();
            var                         port              = 0;
            BlockingCollection <string> queue             = new BlockingCollection <string>();
            List <string>               events            = new List <string>();
            int                         numEventsExpected = 150;

            IPEndPoint endpoint      = new IPEndPoint(IPAddress.Any, port);
            var        remoteHandler = Observer.Create <TransportEvent <string> >(tEvent => queue.Add(tEvent.Data));

            using (var server = new TransportServer <string>(endpoint, remoteHandler, codec, _tcpPortProvider))
            {
                server.Run();

                for (int i = 0; i < numEventsExpected / 3; i++)
                {
                    Task.Run(() =>
                    {
                        IPEndPoint remoteEndpoint = new IPEndPoint(_localIpAddress, server.LocalEndpoint.Port);
                        using (var client = new TransportClient <string>(remoteEndpoint, codec))
                        {
                            client.Send("Hello");
                            client.Send(", ");
                            client.Send("World!");
                        }
                    });
                }

                for (int i = 0; i < numEventsExpected; i++)
                {
                    events.Add(queue.Take());
                }
            }

            Assert.Equal(numEventsExpected, events.Count);
        }
Esempio n. 10
0
        public void TestRaceCondition()
        {
            ICodec <string>             codec             = new StringCodec();
            var                         port              = 0;
            BlockingCollection <string> queue             = new BlockingCollection <string>();
            List <string>               events            = new List <string>();
            int                         numEventsExpected = 150;

            IPEndPoint endpoint      = new IPEndPoint(IPAddress.Any, port);
            var        remoteHandler = Observer.Create <TransportEvent <string> >(tEvent => queue.Add(tEvent.Data));

            using (var server = new TransportServer <string>(endpoint, remoteHandler, codec, _tcpPortProvider))
            {
                server.Run();

                int counter = 0;
                for (int i = 0; i < numEventsExpected / 3; i++)
                {
                    Task.Run(() =>
                    {
                        IPEndPoint remoteEndpoint = new IPEndPoint(_localIpAddress, server.LocalEndpoint.Port);
                        using (var client = new TransportClient <string>(remoteEndpoint, codec, _tcpClientFactory))
                        {
                            for (int j = 0; j < 3; j++)
                            {
                                client.Send("TestRaceCondition - " + counter++);
                            }
                        }
                    });
                }

                for (int i = 0; i < numEventsExpected; i++)
                {
                    string e;
                    do
                    {
                        e = queue.Take();
                    }while (e == null);

                    events.Add(e);
                }
            }

            Assert.Equal(numEventsExpected, events.Count);
            foreach (var e in events)
            {
                Assert.True(e.StartsWith("TestRaceCondition - "), "Unexpected event [" + e + "]");
            }
        }
Esempio n. 11
0
        protected override void Ping(TransportClient client)
        {
            var heartbeat = new Request(null);
            var header    = new RemotingHeader()
            {
                MagicCode = RemotingHeader.QmqMagicCode,
                Version   = RemotingHeader.Version8,
                Code      = CommandCode.Heartbeat,
                Flag      = 0,
                Opaque    = (int)heartbeat.Id,
            };

            client.Send(new Datagram()
            {
                Header        = header,
                PayloadHolder = null,
            });
        }