Beispiel #1
0
        public void BindRandomThenUnbind()
        {
            using (var pub = new PublisherSocket())
            {
                var port = pub.BindRandomPort("tcp://localhost");

                pub.Unbind("tcp://localhost:" + port);
            }

            using (var pub = new PublisherSocket())
            {
                var port = pub.BindRandomPort("tcp://*");

                pub.Unbind("tcp://*:" + port);
            }

            using (var pub = new PublisherSocket())
            {
                var port1 = pub.BindRandomPort("tcp://*");
                var port2 = pub.BindRandomPort("tcp://*");
                var port3 = pub.BindRandomPort("tcp://*");

                pub.Unbind("tcp://*:" + port1);
                pub.Unbind("tcp://*:" + port2);
                pub.Unbind("tcp://*:" + port3);
            }
        }
Beispiel #2
0
        public void MultipleLargeMessages()
        {
            var largeMessage = new byte[12000];

            for (int i = 0; i < 12000; i++)
            {
                largeMessage[i] = (byte)(i % 256);
            }

            using (var pub = new PublisherSocket())
                using (var sub = new SubscriberSocket())
                {
                    var port = pub.BindRandomPort("tcp://127.0.0.1");
                    sub.Connect("tcp://127.0.0.1:" + port);
                    sub.Subscribe("");

                    Thread.Sleep(1000);

                    pub.SendFrame("");
                    sub.SkipFrame();

                    for (int i = 0; i < 100; i++)
                    {
                        pub.SendFrame(largeMessage);

                        byte[] recvMesage = sub.ReceiveFrameBytes();

                        for (int j = 0; j < 12000; j++)
                        {
                            Assert.AreEqual(largeMessage[j], recvMesage[j]);
                        }
                    }
                }
        }
Beispiel #3
0
        public void LargerBufferLength()
        {
            var largerBuffer = new byte[256];

            {
                largerBuffer[124] = 0xD;
                largerBuffer[125] = 0xE;
                largerBuffer[126] = 0xE;
                largerBuffer[127] = 0xD;
            }

            using (var pub = new PublisherSocket())
                using (var sub = new SubscriberSocket())
                {
                    var port = pub.BindRandomPort("tcp://127.0.0.1");
                    sub.Connect("tcp://127.0.0.1:" + port);
                    sub.Subscribe("");

                    Thread.Sleep(100);

                    pub.SendFrame(largerBuffer, 128);

                    byte[] recvMesage = sub.ReceiveFrameBytes();

                    Assert.AreEqual(128, recvMesage.Length);
                    Assert.AreEqual(0xD, recvMesage[124]);
                    Assert.AreEqual(0xE, recvMesage[125]);
                    Assert.AreEqual(0xE, recvMesage[126]);
                    Assert.AreEqual(0xD, recvMesage[127]);

                    Assert.AreNotEqual(largerBuffer.Length, recvMesage.Length);
                }
        }
Beispiel #4
0
            protected override void _SocketBuilder()
            {
                reportLog("Starting publisher " + Name, LogType.INFO, section);

                socket = new PublisherSocket();


                socket.Options.TcpKeepalive         = true;
                socket.Options.TcpKeepaliveIdle     = TimeSpan.FromMilliseconds(100);
                socket.Options.TcpKeepaliveInterval = TimeSpan.FromMilliseconds(100);

                local_port = socket.BindRandomPort("tcp://*");

                //monitor = new NetMQMonitor(socket, "inproc://pub" + Net2.GetAddressIndex(), SocketEvents.All);

                //monitor.Disconnected += Monitor_Disconnected;
                //monitor.Accepted += Monitor_Connected;
                //monitor.Timeout = TimeSpan.FromMilliseconds(100);
                //task = monitor.StartAsync();

                setState(Net2State.STARTED);

                start_time = GetTime().sec;

                reportLog("Publisher " + Name + " is ready on " + local_port, LogType.INFO, section);
            }
Beispiel #5
0
        public void Start()
        {
            if (IsRunning)
            {
                return;
            }

            _publisher = new PublisherSocket();
            int pPort = _publisher.BindRandomPort("tcp://*");

            _responserSocket = new ResponseSocket();
            int rPort = _responserSocket.BindRandomPort("tcp://*");

            _beacon.SelfNode.Arguments = string.Format("-p {0} -r {1}", pPort, rPort);

            HockSocketEvents(true);

            _poller = new NetMQPoller {
                _publisher, _responserSocket
            };

            _poller.RunAsync();

            _beacon.Start();
        }
Beispiel #6
0
        public void Unsubscribe()
        {
            using (var pub = new PublisherSocket())
                using (var sub = new SubscriberSocket())
                {
                    int port = pub.BindRandomPort("tcp://127.0.0.1");
                    sub.Connect("tcp://127.0.0.1:" + port);

                    sub.Subscribe("A");

                    // let the subscriber connect to the publisher before sending a message
                    Thread.Sleep(500);

                    pub.SendMoreFrame("A").SendFrame("Hello");

                    CollectionAssert.AreEqual(new[] { "A", "Hello" }, sub.ReceiveMultipartStrings());

                    sub.Unsubscribe("A");

                    Thread.Sleep(500);

                    pub.SendMoreFrame("A").SendFrame("Hello again");

                    Assert.IsFalse(sub.TrySkipFrame());
                }
        }
Beispiel #7
0
        public void MultiplePublishersAndSubscribersOnSameTopic()
        {
            using (var pub1 = new PublisherSocket())
                using (var pub2 = new PublisherSocket())
                    using (var sub1 = new SubscriberSocket())
                        using (var sub2 = new SubscriberSocket())
                        {
                            int port1 = pub1.BindRandomPort("tcp://127.0.0.1");
                            int port2 = pub2.BindRandomPort("tcp://127.0.0.1");

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

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

                            // should subscribe to both
                            sub1.Subscribe("A");
                            sub2.Subscribe("A");

                            Thread.Sleep(500);

                            // Send from pub 1
                            pub1.SendMoreFrame("A").SendFrame("Hello from the first publisher");

                            CollectionAssert.AreEqual(new[] { "A", "Hello from the first publisher" }, sub1.ReceiveMultipartStrings());
                            CollectionAssert.AreEqual(new[] { "A", "Hello from the first publisher" }, sub2.ReceiveMultipartStrings());

                            // Send from pub 2
                            pub2.SendMoreFrame("A").SendFrame("Hello from the second publisher");

                            CollectionAssert.AreEqual(new[] { "A", "Hello from the second publisher" }, sub1.ReceiveMultipartStrings());
                            CollectionAssert.AreEqual(new[] { "A", "Hello from the second publisher" }, sub2.ReceiveMultipartStrings());
                        }
        }
Beispiel #8
0
        public void MultipleSubscribersOnDifferentTopics()
        {
            using (var pub = new PublisherSocket())
                using (var sub1 = new SubscriberSocket())
                    using (var sub2 = new SubscriberSocket())
                    {
                        var port = pub.BindRandomPort("tcp://127.0.0.1");

                        sub1.Connect("tcp://127.0.0.1:" + port);
                        sub2.Connect("tcp://127.0.0.1:" + port);

                        sub1.Subscribe("1");
                        sub1.Subscribe("1&2");

                        sub2.Subscribe("2");
                        sub2.Subscribe("1&2");

                        Thread.Sleep(500);

                        pub.SendMoreFrame("1").SendFrame("A");

                        CollectionAssert.AreEqual(new[] { "1", "A" }, sub1.ReceiveMultipartStrings());
                        Assert.IsFalse(sub2.TrySkipFrame());

                        pub.SendMoreFrame("2").SendFrame("B");

                        Assert.IsFalse(sub1.TrySkipFrame());
                        CollectionAssert.AreEqual(new[] { "2", "B" }, sub2.ReceiveMultipartStrings());

                        pub.SendMoreFrame("1&2").SendFrame("C");

                        CollectionAssert.AreEqual(new[] { "1&2", "C" }, sub1.ReceiveMultipartStrings());
                        CollectionAssert.AreEqual(new[] { "1&2", "C" }, sub2.ReceiveMultipartStrings());
                    }
        }
Beispiel #9
0
        public void NotSubscribed()
        {
            using (var pub = new PublisherSocket())
                using (var sub = new SubscriberSocket())
                {
                    var port = pub.BindRandomPort("tcp://127.0.0.1");
                    sub.Connect("tcp://127.0.0.1:" + port);

                    // let the subscriber connect to the publisher before sending a message
                    Thread.Sleep(500);

                    pub.SendFrame("Hello");

                    Assert.IsFalse(sub.TrySkipFrame());
                }
        }
Beispiel #10
0
        public void Start()
        {
            _publisher = new PublisherSocket();
            int pPort = _publisher.BindRandomPort("tcp://*");

            _publisher.SendReady += OnPubReady;

            int rPort = 0;

            _poller = new NetMQPoller {
                _publisher
            };
            _poller.RunAsync();

            this._beacon.SelfNode.Arguments = string.Format("-p {0} -r {1}", pPort, rPort);
            this._beacon.Start();
        }
Beispiel #11
0
        public void LargeMessage()
        {
            using (var pub = new PublisherSocket())
                using (var sub = new SubscriberSocket())
                {
                    var port = pub.BindRandomPort("tcp://127.0.0.1");
                    sub.Connect("tcp://127.0.0.1:" + port);
                    sub.Subscribe("");

                    Thread.Sleep(100);

                    var msg = new byte[300];

                    pub.SendFrame(msg);

                    byte[] msg2 = sub.ReceiveFrameBytes();

                    Assert.AreEqual(300, msg2.Length);
                }
        }
Beispiel #12
0
        public void SimplePubSub()
        {
            using (var pub = new PublisherSocket())
                using (var sub = new SubscriberSocket())
                {
                    var port = pub.BindRandomPort("tcp://127.0.0.1");
                    sub.Connect("tcp://127.0.0.1:" + port);
                    sub.Subscribe("");

                    // let the subscriber connect to the publisher before sending a message
                    Thread.Sleep(500);

                    // Send the topic only
                    pub.SendFrame("A");

                    CollectionAssert.AreEqual(
                        new[] { "A" },
                        sub.ReceiveMultipartStrings());
                }
        }
Beispiel #13
0
        public void MultipleSubscriptions()
        {
            using (var pub = new PublisherSocket())
                using (var sub = new SubscriberSocket())
                {
                    var port = pub.BindRandomPort("tcp://127.0.0.1");
                    sub.Connect("tcp://127.0.0.1:" + port);
                    sub.Subscribe("C");
                    sub.Subscribe("B");
                    sub.Subscribe("A");
                    sub.Subscribe("D");
                    sub.Subscribe("E");

                    Thread.Sleep(500);

                    sub.Unsubscribe("C");
                    sub.Unsubscribe("B");
                    sub.Unsubscribe("A");
                    sub.Unsubscribe("D");
                    sub.Unsubscribe("E");

                    Thread.Sleep(500);
                }
        }