Esempio n. 1
0
        public void Run()
        {
            subscriber.Connect("inproc://events");
            subscriber.SetOption(ZSocketOption.SUBSCRIBE, "");

            event_socket.SetOption(ZSocketOption.IDENTITY, "event-" + ident);
            event_socket.Connect("tcp://127.0.0.1:8080");

            async_socket.SetOption(ZSocketOption.IDENTITY, "async-" + ident);
            async_socket.Connect("tcp://127.0.0.1:8080");


            ZError error = default(ZError);

            ZMessage[] messages = null;

            ZSocket[] sockets = new ZSocket[] {
                subscriber, event_socket, async_socket
            };

            ZPollItem[] polls = new ZPollItem[] {
                ZPollItem.Create(SubscriberHandler),
                ZPollItem.Create(EventHandler),
                ZPollItem.Create(AsyncHandler)
            };

            async_socket.Send(new ZFrame(async_socket.IdentityString));

            try
            {
                while (!cancel.IsCancellationRequested)
                {
                    if (!sockets.Poll(polls, ZPoll.In, ref messages, out error, TimeSpan.FromMilliseconds(500)))
                    {
                        if (error == ZError.EAGAIN)
                        {
                            Thread.Sleep(1);
                            continue;
                        }

                        if (error == ZError.ETERM)
                        {
                            break;
                        }

                        throw new ZException(error);
                    }
                }
            }
            catch (ZException)
            {
                if (!cancel.IsCancellationRequested)
                {
                    throw;
                }
            }

            subscriber.Dispose();
            event_socket.Dispose();
            async_socket.Dispose();
        }