public AgentMessageZeroMq Send(string method, params object[] arguments) { AgentMessageZeroMq msg = new AgentMessageZeroMq(); msg.Method = method; msg.Arguments = arguments; var outWriter = new StringWriter(); serializer.Serialize(outWriter, msg); byte[] buff = Encoding.UTF8.GetBytes(outWriter.ToString()); List <byte[]> frames = new List <byte[]>(); frames.Add(buff); client.SendMessage(new ZmqMessage(frames)); return(Receive()); }
public void Run(Dictionary <string, string> args) { try { int port = 9001; if (args.ContainsKey("port")) { port = int.Parse(args["port"]); } AgentMessageZeroMq msg; AgentServiceZeroMq agent = null; AgentMessageZeroMq ack = new AgentMessageZeroMq(); ack.Method = "ACK"; ack.Arguments = null; string ackMessage; { var outStr = new StringWriter(); serializer.Serialize(outStr, ack); ackMessage = outStr.ToString(); } using (ZmqContext context = ZmqContext.Create()) using (ZmqSocket server = context.CreateSocket(SocketType.REP)) { server.Bind("tcp://*:" + port); Console.WriteLine(" -- Press ENTER to quit agent -- "); while (true) { msg = Receive(server); if (msg.Method == "AgentConnect") { if (agent != null) { agent.AgentDisconnect(); } agent = new AgentServiceZeroMq(); agent.AgentConnect(null); Send(server, ackMessage); } else if (msg.Method == "StartMonitor") { try { agent.StartMonitor((string)msg.Arguments[0], (string)msg.Arguments[1], msg.Parameters); Send(server, ackMessage); } catch (Exception ex) { Console.WriteLine(ex.ToString()); AgentMessageZeroMq rep = new AgentMessageZeroMq(); rep.Method = "Exception"; rep.Arguments = new object[1]; rep.Arguments[0] = ex; var outStr = new StringWriter(); serializer.Serialize(outStr, rep); var reply = outStr.ToString(); Send(server, reply); } } else { try { Type[] types; if (msg.Arguments == null) { types = new Type[0]; } else { types = new Type[msg.Arguments.Count()]; for (int cnt = 0; cnt < msg.Arguments.Count(); cnt++) { types[cnt] = msg.Arguments[cnt].GetType(); } } var method = typeof(AgentServiceZeroMq).GetMethod(msg.Method, types); object ret = null; if (msg.Arguments == null) { ret = method.Invoke(agent, new object[0]); } else { ret = method.Invoke(agent, msg.Arguments); } if (ret == null) { Send(server, ackMessage); } else { AgentMessageZeroMq rep = new AgentMessageZeroMq(); rep.Method = "ACK"; rep.Arguments = new object[1]; rep.Arguments[0] = ret; var outStr = new StringWriter(); serializer.Serialize(outStr, rep); var reply = outStr.ToString(); Send(server, reply); } } catch (Exception ex) { Console.WriteLine(ex.ToString()); AgentMessageZeroMq rep = new AgentMessageZeroMq(); rep.Method = "Exception"; rep.Arguments = new object[1]; rep.Arguments[0] = ex; var outStr = new StringWriter(); serializer.Serialize(outStr, rep); var reply = outStr.ToString(); Send(server, reply); } } } } } catch (Exception eex) { Console.WriteLine(eex.ToString()); } }