Exemple #1
0
        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());
        }
Exemple #2
0
        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());
            }
        }