示例#1
0
        static void Main(string[] args)
        {
            using (NetMQContext context = NetMQContext.Create())
            {
                using (WSRouter router = context.CreateWSRouter())
                    using (WSPublisher publisher = context.CreateWSPublisher())
                    {
                        router.Bind("ws://localhost:80");
                        publisher.Bind("ws://localhost:81");

                        router.ReceiveReady += (sender, eventArgs) =>
                        {
                            string identity = router.ReceiveString();
                            string message  = router.ReceiveString();

                            router.SendMore(identity).Send("OK");

                            publisher.SendMore("chat").Send(message);
                        };

                        Poller poller = new Poller();
                        poller.AddSocket(router);

                        // we must add the publisher to the poller although we are not registering to any event.
                        // The internal stream socket handle connections and subscriptions and use the events internally
                        poller.AddSocket(publisher);
                        poller.Start();
                    }
            }
        }
示例#2
0
        private void InitMq()
        {
            _context = NetMQContext.Create();

            _eventPublisher = _context.CreateWSPublisher();
            _eventPublisher.Bind(_endpoint);
        }
        public void PubSub()
        {
            using (NetMQContext context = NetMQContext.Create())
            {
                using (WebSocket4Net.WebSocket webSocket = new WebSocket("ws://localhost:82", "WSNetMQ"))
                {
                    using (WSPublisher publisher = context.CreateWSPublisher())
                    {
                        publisher.Bind("ws://localhost:82");

                        ManualResetEvent manualResetEvent = new ManualResetEvent(false);
                        webSocket.Opened += (sender, args) => manualResetEvent.Set();

                        webSocket.Open();
                        webSocket.Error += (sender, args) => Console.WriteLine("Error");
                        manualResetEvent.WaitOne();

                        Assert.AreEqual(webSocket.State, WebSocketState.Open);

                        byte[] subscription = new byte[3];
                        subscription[0] = 0;
                        subscription[1] = 1;
                        subscription[2] = (byte)'H';

                        // should exit the router thread
                        webSocket.Send(subscription, 0, subscription.Length);

                        // wait for the subscription to arrive
                        Thread.Sleep(1000);

                        byte[] receivedMessage = null;
                        manualResetEvent.Reset();

                        webSocket.DataReceived += (sender, args) =>
                        {
                            receivedMessage = args.Data;
                            manualResetEvent.Set();
                        };

                        publisher.Send("Hello");

                        Assert.IsTrue(manualResetEvent.WaitOne(1000));

                        Assert.AreEqual(0, receivedMessage[0]);
                        Assert.AreEqual('H', receivedMessage[1]);
                        Assert.AreEqual('e', receivedMessage[2]);
                        Assert.AreEqual('l', receivedMessage[3]);
                        Assert.AreEqual('l', receivedMessage[4]);
                        Assert.AreEqual('o', receivedMessage[5]);
                    }
                }
            }
        }