static void Main(string[] args) { IPAddress ip = null; int port = 0; var p = new OptionSet() .Add("a|address=", v => ip = IPAddress.Parse(v)) .Add("p|port=", v => port = int.Parse(v)); p.Parse(args); var proxy = new Proxy { ListenToIp = ip, ListenOnPort = port }; proxy.Start(); Console.WriteLine("Proxy is started ans listening on {0}:{1}", proxy.ListenToIp, proxy.ListenOnPort); Console.WriteLine("Press 'Q' to stop the proxy"); while (true) { if (Console.KeyAvailable) { var key = Console.ReadKey(true); if (key.Key == ConsoleKey.Q) { proxy.Stop(); Console.WriteLine("Proxy is stopped"); break; } } } }
public void SendAndReceive() { using (var context = NetMQContext.Create()) using (var front = context.CreateRouterSocket()) using (var back = context.CreateDealerSocket()) { front.Bind("inproc://frontend"); back.Bind("inproc://backend"); var proxy = new Proxy(front, back); Task.Factory.StartNew(proxy.Start); using (var client = context.CreateRequestSocket()) using (var server = context.CreateResponseSocket()) { client.Connect("inproc://frontend"); server.Connect("inproc://backend"); client.SendFrame("hello"); Assert.AreEqual("hello", server.ReceiveFrameString()); server.SendFrame("reply"); Assert.AreEqual("reply", client.ReceiveFrameString()); } proxy.Stop(); } }
/// <summary> /// Entry point of the application. /// </summary> static void Main(string[] args) { try { IProxy prx = new Proxy(); var cli = new CommandLine(prx); prx.LoadData(); cli.StartLoop(); prx.Stop(); } catch(Exception ex) { Console.WriteLine("The program ended abnormally!"); Console.WriteLine(ex); Console.ReadLine(); } }
private void Execute() { var ip = Settings.Default.ListenIP; var port = Settings.Default.ListenPort; var proxy = new Proxy { ListenToIp = IPAddress.Parse(ip), ListenOnPort = port }; try { proxy.Start(); } catch (Exception ex) { proxy.Stop(); ServiceEventLog.WriteEntry(ex.ToString(), EventLogEntryType.Error); Logger.Log(ex); } }
public void ControlSocketObservedMessages() { using (var context = NetMQContext.Create()) using (var front = context.CreateRouterSocket()) using (var back = context.CreateDealerSocket()) using (var controlPush = context.CreatePushSocket()) using (var controlPull = context.CreatePullSocket()) { front.Bind("inproc://frontend"); back.Bind("inproc://backend"); controlPush.Bind("inproc://control"); controlPull.Connect("inproc://control"); var proxy = new Proxy(front, back, controlPush); Task.Factory.StartNew(proxy.Start); using (var client = context.CreateRequestSocket()) using (var server = context.CreateResponseSocket()) { client.Connect("inproc://frontend"); server.Connect("inproc://backend"); client.SendFrame("hello"); Assert.AreEqual("hello", server.ReceiveFrameString()); server.SendFrame("reply"); Assert.AreEqual("reply", client.ReceiveFrameString()); } Assert.IsNotNull(controlPull.ReceiveFrameBytes()); // receive identity Assert.IsEmpty(controlPull.ReceiveFrameString()); // pull terminator Assert.AreEqual("hello", controlPull.ReceiveFrameString()); Assert.IsNotNull(controlPull.ReceiveFrameBytes()); // receive identity Assert.IsEmpty(controlPull.ReceiveFrameString()); // pull terminator Assert.AreEqual("reply", controlPull.ReceiveFrameString()); proxy.Stop(); } }
public void StoppingProxyDisengagesFunctionality() { using (var context = NetMQContext.Create()) using (var front = context.CreateRouterSocket()) using (var back = context.CreateDealerSocket()) { front.Bind("inproc://frontend"); back.Bind("inproc://backend"); var proxy = new Proxy(front, back); Task.Factory.StartNew(proxy.Start); // Send a message through to ensure the proxy has started using (var client = context.CreateRequestSocket()) using (var server = context.CreateResponseSocket()) { client.Connect("inproc://frontend"); server.Connect("inproc://backend"); client.SendFrame("hello"); Assert.AreEqual("hello", server.ReceiveFrameString()); server.SendFrame("reply"); Assert.AreEqual("reply", client.ReceiveFrameString()); proxy.Stop(); // blocks until stopped using (var poller = new Poller(front, back)) { poller.PollTillCancelledNonBlocking(); client.SendFrame("anyone there?"); // Should no longer receive any messages Assert.IsFalse(server.TrySkipFrame(TimeSpan.FromMilliseconds(50))); poller.CancelAndJoin(); } } } }
public void StartAndStopStateValidation() { using (var context = NetMQContext.Create()) using (var front = context.CreateRouterSocket()) using (var back = context.CreateDealerSocket()) { front.Bind("inproc://frontend"); back.Bind("inproc://backend"); var proxy = new Proxy(front, back); Task.Factory.StartNew(proxy.Start); // Send a message through to ensure the proxy has started using (var client = context.CreateRequestSocket()) using (var server = context.CreateResponseSocket()) { client.Connect("inproc://frontend"); server.Connect("inproc://backend"); client.SendFrame("hello"); Assert.AreEqual("hello", server.ReceiveFrameString()); server.SendFrame("reply"); Assert.AreEqual("reply", client.ReceiveFrameString()); } Assert.Throws<InvalidOperationException>(proxy.Start); Assert.Throws<InvalidOperationException>(proxy.Start); Assert.Throws<InvalidOperationException>(proxy.Start); proxy.Stop(); // blocks until stopped Assert.Throws<InvalidOperationException>(proxy.Stop); } }
public void StartAgainAfterStop() { using (var context = NetMQContext.Create()) using (var front = context.CreateRouterSocket()) using (var back = context.CreateDealerSocket()) { front.Bind("inproc://frontend"); back.Bind("inproc://backend"); var proxy = new Proxy(front, back); Task.Factory.StartNew(proxy.Start); // Send a message through to ensure the proxy has started using (var client = context.CreateRequestSocket()) using (var server = context.CreateResponseSocket()) { client.Connect("inproc://frontend"); server.Connect("inproc://backend"); client.Send("hello"); Assert.AreEqual("hello", server.ReceiveString()); server.Send("reply"); Assert.AreEqual("reply", client.ReceiveString()); } proxy.Stop(); // blocks until stopped // Start it again Task.Factory.StartNew(proxy.Start); // Send a message through to ensure the proxy has started using (var client = context.CreateRequestSocket()) using (var server = context.CreateResponseSocket()) { client.Connect("inproc://frontend"); server.Connect("inproc://backend"); client.Send("hello"); Assert.AreEqual("hello", server.ReceiveString()); server.Send("reply"); Assert.AreEqual("reply", client.ReceiveString()); } proxy.Stop(); // blocks until stopped } }