public void Start(NetMQContext context) { this.SetUpMonitorChannel(context); this.SetUpAddSubscriberCountChannel(context); //this should work but the forwarder device appears to be broken - it does not use XSUb and XPUB sockets //forwarderDevice = new ForwarderDevice(context, PublishAddressServer, SubscribeAddressServer, DeviceMode.Threaded); //forwarderDevice.FrontendSetup.Subscribe(string.Empty); //forwarderDevice.Start(); //while (!forwarderDevice.IsRunning) //{ } QueueDevce = new QueueDevice(context, PubSubControlBackAddressServer, PubSubControlFrontAddressServer, DeviceMode.Threaded); QueueDevce.Start(); //while (!QueueDevce.IsRunning) //{ //} this.Writeline("Control channel started"); long count = 0; this.cancellationTokenSource = new CancellationTokenSource(); var token = this.cancellationTokenSource.Token; Task.Run(() => { using (frontend = context.CreateXSubscriberSocket()) { using (backend = context.CreateXPublisherSocket()) { frontend.Bind(Pipe.PublishAddressServer); ////"tcp://*:5550"); backend.Bind(Pipe.SubscribeAddressServer); ////"tcp://*:5553"); // frontend.ReceiveReady += frontend_ReceiveReady; frontend.ReceiveReady += new EventHandler<NetMQSocketEventArgs>(FrontendReceiveReady); backend.ReceiveReady += new EventHandler<NetMQSocketEventArgs>(BackendReceiveReady); // this.AddSubscriberCountChannel.ReceiveReady += new EventHandler<NetMQSocketEventArgs>(AddSubscriberCountChannelReceiveReady); using (this.poller = new Poller(new NetMQSocket[] { frontend, backend, this.AddSubscriberCountChannel })) { Writeline("About to start polling"); while (true) { poller. PollOnce();// Poll(new TimeSpan(0,0,0,0,5)); Writeline("polling" + count); count++; if (token.IsCancellationRequested) { Writeline("break"); break; } } } Writeline("stopped polling and exiting"); } } }, token); }