예제 #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
        public void RequestReply()
        {
            using (NetMQContext context = NetMQContext.Create())
            {
                using (WebSocket4Net.WebSocket webSocket = new WebSocket("ws://localhost:82", "WSNetMQ"))
                {
                    using (WSRouter router = context.CreateWSRouter())
                    {
                        router.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[] message = new byte[2];
                        message[0] = 0;
                        message[1] = (byte)'H';

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

                        byte[] identity = router.Receive();
                        string msg      = router.ReceiveString();

                        Assert.AreEqual("H", msg);

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

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

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

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

                        Assert.AreEqual(0, receivedMessage[0]);
                        Assert.AreEqual('W', receivedMessage[1]);
                    }
                }
            }
        }