/// <summary> /// Initializes a new instance of the <see cref="XForwarder"/> class. /// </summary> /// <param name="context">The <see cref="NetMQContext"/> to use when creating the sockets.</param> /// <param name="poller">The <see cref="Poller"/> to use.</param> /// <param name="frontendBindAddress">The endpoint used to bind the frontend socket.</param> /// <param name="backendBindAddress">The endpoint used to bind the backend socket.</param> /// <param name="mode">The <see cref="DeviceMode"/> for the device.</param> public XForwarder(NetMQContext context, Poller poller, string frontendBindAddress, string backendBindAddress, DeviceMode mode = DeviceMode.Threaded) : base(poller, context.CreateXSubscriberSocket(), context.CreateXPublisherSocket(), mode) { this.FrontendSetup.Bind(frontendBindAddress); this.BackendSetup.Bind(backendBindAddress); }
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.Start(); // .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); }