Exemple #1
0
        public void SimpleTimer()
        {
            using (NetMQContext contex = NetMQContext.Create())
            {
                // we are using three responses to make sure we actually move the correct socket and other sockets still work
                using (var router = contex.CreateRouterSocket())
                {
                    router.Bind("tcp://127.0.0.1:5002");

                    using (var dealer = contex.CreateDealerSocket())
                    using (Poller poller = new Poller())
                    {
                        dealer.Connect("tcp://127.0.0.1:5002");

                        bool messageArrived = false;

                        router.ReceiveReady += (s, a) =>
                                                                        {
                                                                            bool isMore;
                                                                            router.Receive(out isMore);
                                                                            router.Receive(out isMore);

                                                                            messageArrived = true;
                                                                        };

                        poller.AddSocket(router);

                        bool timerTriggered = false;

                        int count = 0;

                        NetMQTimer timer = new NetMQTimer(TimeSpan.FromMilliseconds(100));
                        timer.Elapsed += (a, s) =>
                                                            {
                                                                // the timer should jump before the message
                                                                Assert.IsFalse(messageArrived);
                                                                timerTriggered = true;
                                                                timer.Enable = false;
                                                                count++;
                                                            };
                        poller.AddTimer(timer);

                        Task.Factory.StartNew(poller.Start);

                        Thread.Sleep(150);

                        dealer.Send("hello");

                        Thread.Sleep(300);

                        poller.Stop();

                        Assert.IsTrue(messageArrived);
                        Assert.IsTrue(timerTriggered);
                        Assert.AreEqual(1, count);
                    }
                }
            }
        }
Exemple #2
0
        public void ResponsePoll()
        {
            using (NetMQContext contex = NetMQContext.Create())
            {
                using (var rep = contex.CreateResponseSocket())
                {
                    rep.Bind("tcp://127.0.0.1:5002");

                    using (var req = contex.CreateRequestSocket())
                    using (Poller poller = new Poller())
                    {
                        req.Connect("tcp://127.0.0.1:5002");

                        rep.ReceiveReady += (s, a) =>
                                                                    {
                                                                        bool more;
                                                                        string m = a.Socket.ReceiveString(out more);

                                                                        Assert.False(more);
                                                                        Assert.AreEqual("Hello", m);

                                                                        a.Socket.Send("World");
                                                                    };

                        poller.AddSocket(rep);

                        Task pollerTask = Task.Factory.StartNew(poller.Start);

                        req.Send("Hello");

                        bool more2;
                        string m1 = req.ReceiveString(out more2);

                        Assert.IsFalse(more2);
                        Assert.AreEqual("World", m1);

                        poller.Stop();

                        Thread.Sleep(100);
                        Assert.IsTrue(pollerTask.IsCompleted);
                    }
                }
            }
        }
Exemple #3
0
        public void CancelSocket()
        {
            using (NetMQContext contex = NetMQContext.Create())
            {
                // we are using three responses to make sure we actually move the correct socket and other sockets still work
                using (var router = contex.CreateRouterSocket())
                using (var router2 = contex.CreateRouterSocket())
                using (var router3 = contex.CreateRouterSocket())
                {
                    router.Bind("tcp://127.0.0.1:5002");
                    router2.Bind("tcp://127.0.0.1:5003");
                    router3.Bind("tcp://127.0.0.1:5004");

                    using (var dealer = contex.CreateDealerSocket())
                    using (var dealer2 = contex.CreateDealerSocket())
                    using (var dealer3 = contex.CreateDealerSocket())
                    using (Poller poller = new Poller())
                    {
                        dealer.Connect("tcp://127.0.0.1:5002");
                        dealer2.Connect("tcp://127.0.0.1:5003");
                        dealer3.Connect("tcp://127.0.0.1:5004");

                        bool first = true;

                        router2.ReceiveReady += (s, a) =>
                                                                            {
                                                                                bool more;

                                                                                // identity
                                                                                byte[] identity = a.Socket.Receive(out more);

                                                                                // message
                                                                                a.Socket.Receive(out more);

                                                                                a.Socket.SendMore(identity);
                                                                                a.Socket.Send("2");
                                                                            };

                        poller.AddSocket(router2);

                        router.ReceiveReady += (s, a) =>
                                                                        {
                                                                            if (!first)
                                                                            {
                                                                                Assert.Fail("This should happen because we cancelled the socket");
                                                                            }
                                                                            first = false;

                                                                            bool more;

                                                                            // identity
                                                                            a.Socket.Receive(out more);

                                                                            string m = a.Socket.ReceiveString(out more);

                                                                            Assert.False(more);
                                                                            Assert.AreEqual("Hello", m);

                                                                            // cancellign the socket
                                                                            poller.RemoveSocket(a.Socket);
                                                                        };

                        poller.AddSocket(router);

                        router3.ReceiveReady += (s, a) =>
                                                                            {
                                                                                bool more;

                                                                                // identity
                                                                                byte[] identity = a.Socket.Receive(out more);

                                                                                // message
                                                                                a.Socket.Receive(out more);

                                                                                a.Socket.SendMore(identity).Send("3");
                                                                            };

                        poller.AddSocket(router3);

                        Task pollerTask = Task.Factory.StartNew(poller.Start);

                        dealer.Send("Hello");

                        // sending this should not arrive on the poller, therefore response for this will never arrive
                        dealer.Send("Hello2");

                        Thread.Sleep(100);

                        // sending this should not arrive on the poller, therefore response for this will never arrive
                        dealer.Send("Hello3");

                        Thread.Sleep(500);

                        bool more2;

                        // making sure the socket defined before the one cancelled still works
                        dealer2.Send("1");
                        string msg = dealer2.ReceiveString(out more2);
                        Assert.AreEqual("2", msg);

                        // making sure the socket defined after the one cancelled still works
                        dealer3.Send("1");
                        msg = dealer3.ReceiveString(out more2);
                        Assert.AreEqual("3", msg);

                        // we have to give this some time if we want to make sure it's really not happening and it not only because of time
                        Thread.Sleep(300);

                        poller.Stop();

                        Thread.Sleep(100);
                        Assert.IsTrue(pollerTask.IsCompleted);
                    }
                }
            }
        }
Exemple #4
0
        public void AddSocketAfterRemoving()
        {
            using (NetMQContext contex = NetMQContext.Create())
            {
                // we are using three responses to make sure we actually move the correct socket and other sockets still work
                using (var router = contex.CreateRouterSocket())
                using (var router2 = contex.CreateRouterSocket())
                using (var router3 = contex.CreateRouterSocket())
                {
                    router.Bind("tcp://127.0.0.1:5002");
                    router2.Bind("tcp://127.0.0.1:5003");
                    router3.Bind("tcp://127.0.0.1:5004");

                    using (var dealer = contex.CreateDealerSocket())
                    using (var dealer2 = contex.CreateDealerSocket())
                    using (var dealer3 = contex.CreateDealerSocket())
                    using (Poller poller = new Poller())
                    {
                        dealer.Connect("tcp://127.0.0.1:5002");
                        dealer2.Connect("tcp://127.0.0.1:5003");
                        dealer3.Connect("tcp://127.0.0.1:5004");

                        bool router1arrived = false;
                        bool router2arrived = false;
                        bool router3arrived = false;

                        bool more;

                        router.ReceiveReady += (s, a) =>
                                                                        {
                                                                            router1arrived = true;

                                                                            router.Receive(out more);
                                                                            router.Receive(out more);

                                                                            poller.RemoveSocket(router);

                                                                        };

                        poller.AddSocket(router);

                        router3.ReceiveReady += (s, a) =>
                        {
                            router3.Receive(out more);
                            router3.Receive(out more);
                            router3arrived = true;
                        };

                        router2.ReceiveReady += (s, a) =>
                                                                            {
                                                                                router2arrived = true;
                                                                                router2.Receive(out more);
                                                                                router2.Receive(out more);

                                                                                poller.AddSocket(router3);
                                                                            };
                        poller.AddSocket(router2);

                        Task task = Task.Factory.StartNew(poller.Start);

                        dealer.Send("1");
                        Thread.Sleep(300);
                        dealer2.Send("2");
                        Thread.Sleep(300);
                        dealer3.Send("3");
                        Thread.Sleep(300);

                        poller.Stop(true);
                        task.Wait();

                        Assert.IsTrue(router1arrived);
                        Assert.IsTrue(router2arrived);
                        Assert.IsTrue(router3arrived);
                    }
                }
            }
        }
Exemple #5
0
        public void AddSocketDuringWork()
        {
            using (var context = NetMQContext.Create())
            using (var router1 = context.CreateRouterSocket())
            using (var router2 = context.CreateRouterSocket())
            using (var dealer1 = context.CreateDealerSocket())
            using (var dealer2 = context.CreateDealerSocket())
            using (var poller = new Poller(router1) { PollTimeout = TestPollTimeoutMillis })
            {
                int port1 = router1.BindRandomPort("tcp://127.0.0.1");
                int port2 = router2.BindRandomPort("tcp://127.0.0.1");

                dealer1.Connect("tcp://127.0.0.1:" + port1);
                dealer2.Connect("tcp://127.0.0.1:" + port2);

                bool router1arrived = false;
                bool router2arrived = false;

                var signal1 = new ManualResetEvent(false);
                var signal2 = new ManualResetEvent(false);

                router1.ReceiveReady += (s, a) =>
                {
                    router1.Receive();
                    router1.Receive();
                    router1arrived = true;
                    poller.AddSocket(router2);
                    signal1.Set();
                };

                router2.ReceiveReady += (s, a) =>
                {
                    router2.Receive();
                    router2.Receive();
                    router2arrived = true;
                    signal2.Set();
                };

                poller.PollTillCancelledNonBlocking();

                dealer1.Send("1");
                Assert.IsTrue(signal1.WaitOne(300));
                dealer2.Send("2");
                Assert.IsTrue(signal1.WaitOne(300));

                poller.CancelAndJoin();

                Assert.IsTrue(router1arrived);
                Assert.IsTrue(router2arrived);
            }
        }
Exemple #6
0
        public void AddTwoSocketAfterRemoving()
        {
            using (var context = NetMQContext.Create())
            using (var router1 = context.CreateRouterSocket())
            using (var router2 = context.CreateRouterSocket())
            using (var router3 = context.CreateRouterSocket())
            using (var router4 = context.CreateRouterSocket())
            using (var dealer1 = context.CreateDealerSocket())
            using (var dealer2 = context.CreateDealerSocket())
            using (var dealer3 = context.CreateDealerSocket())
            using (var dealer4 = context.CreateDealerSocket())
            using (var poller = new Poller(router1, router2) { PollTimeout = TestPollTimeoutMillis })
            {
                int port1 = router1.BindRandomPort("tcp://127.0.0.1");
                int port2 = router2.BindRandomPort("tcp://127.0.0.1");
                int port3 = router3.BindRandomPort("tcp://127.0.0.1");
                int port4 = router4.BindRandomPort("tcp://127.0.0.1");

                dealer1.Connect("tcp://127.0.0.1:" + port1);
                dealer2.Connect("tcp://127.0.0.1:" + port2);
                dealer3.Connect("tcp://127.0.0.1:" + port3);
                dealer4.Connect("tcp://127.0.0.1:" + port4);

                int router1arrived = 0;
                int router2arrived = 0;
                bool router3arrived = false;
                bool router4arrived = false;

                var signal1 = new ManualResetEvent(false);
                var signal2 = new ManualResetEvent(false);
                var signal3 = new ManualResetEvent(false);
                var signal4 = new ManualResetEvent(false);

                router1.ReceiveReady += (s, a) =>
                {
                    router1arrived++;
                    router1.Receive();
                    router1.Receive();
                    poller.RemoveSocket(router1);
                    signal1.Set();
                };

                router2.ReceiveReady += (s, a) =>
                {
                    router2arrived++;
                    router2.Receive();
                    router2.Receive();

                    if (router2arrived == 1)
                    {
                        poller.AddSocket(router3);
                        poller.AddSocket(router4);
                        signal2.Set();
                    }
                };

                router3.ReceiveReady += (s, a) =>
                {
                    router3.Receive();
                    router3.Receive();
                    router3arrived = true;
                    signal3.Set();
                };

                router4.ReceiveReady += (s, a) =>
                {
                    router4.Receive();
                    router4.Receive();
                    router4arrived = true;
                    signal4.Set();
                };

                poller.PollTillCancelledNonBlocking();

                dealer1.Send("1");
                Assert.IsTrue(signal1.WaitOne(300));
                dealer2.Send("2");
                Assert.IsTrue(signal2.WaitOne(300));
                dealer3.Send("3");
                dealer4.Send("4");
                dealer2.Send("2");
                dealer1.Send("1");
                Assert.IsTrue(signal3.WaitOne(300));
                Assert.IsTrue(signal4.WaitOne(300));

                poller.CancelAndJoin();

                bool more;

                router1.Receive(true, out more);
                Assert.IsTrue(more);

                router1.Receive(true, out more);
                Assert.IsFalse(more);

                Assert.AreEqual(1, router1arrived);
                Assert.AreEqual(2, router2arrived);
                Assert.IsTrue(router3arrived);
                Assert.IsTrue(router4arrived);
            }
        }