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);
}