public void OnAgentRegistrationUpdated(AgentConnection clientConnection, AgentRegistration registration)
 {
     if (AgentRegistrationUpdated != null)
     {
         AgentRegistrationUpdated.Invoke(clientConnection, registration);
     }
 }
 public void OnAgentHealthcheckStatsUpdated(AgentConnection clientConnection, AgentHealthState agentHealthState, string message)
 {
     if (AgentHealthcheckStatsUpdated != null)
     {
         AgentHealthcheckStatsUpdated.Invoke(clientConnection, agentHealthState, message);
     }
 }
 public void OnNodesUpdated(AgentConnection clientConnection, NodeNetwork updatedNodes)
 {
     if (NodesUpdated != null)
     {
         NodesUpdated.Invoke(clientConnection, updatedNodes);
     }
 }
Пример #4
0
        public void ConnectToAgents(List <String> agentList)
        {
            foreach (string agentAddress in agentList)
            {
                string[]        addressParts = agentAddress.Split(':');
                AgentConnection agent        = new AgentConnection(addressParts[0], addressParts[1]);
                Session.AddAgent(agent);
                Session.InitializeAgent(agent);

                Timer reconnectionTimer = new Timer
                {
                    AutoReset = true,
                    Interval  = 3000
                };
                reconnectionTimer.Elapsed += (sender, args) =>
                {
                    if (agent.State == WebSocketState.None || agent.State == WebSocketState.Aborted || agent.State == WebSocketState.Closed)
                    {
                        Session.ConnectAgent(agent);
                    }
                };
                reconnectionTimer.Start();
            }
            Session.InitializeSession();
        }
        private void MessageReceived(AgentConnection agent, string payload)
        {
            MessageEnvelope envelope;

            try
            {
                envelope = JsonConvert.DeserializeObject <MessageEnvelope>(payload);
            }
            catch (Exception ex)
            {
                logger.Error(ex, $"Cannot deserialize message envelope from agent {agent.Address}");
                return;
            }

            try
            {
                logger.Trace($"Processing {envelope.MessageType} message");
                if (!agent.Processors.ContainsKey(envelope.MessageType))
                {
                    logger.Fatal($"Unknown message type {envelope.MessageType} from agent {agent.Address}");
                    return;
                }

                var processor = agent.Processors[envelope.MessageType];
                processor.ProcessMessage(envelope);
            }
            catch (Exception ex)
            {
                logger.Error(ex, $"Cannot process {envelope.MessageType} message from agent {agent.Address}");
            }
        }
        private void ConnectionOpen(AgentConnection agent)
        {
            InitializeClientConnection(agent);
            foreach (DispatcherBase dispatcher in agent.Dispatchers.Values)
            {
                dispatcher.Start();
            }

            logger.Info($"Connection opened for agent {agent.Address}");
            OnAgentHealthcheckStatsUpdated(agent, new AgentHealthState(), string.Empty);
        }
        public void AddAgent(AgentConnection agent)
        {
            agent.Session            = this;
            agent.OnOpen            += () => ConnectionOpen(agent);
            agent.OnClose           += () => ConnectionClose(agent);
            agent.OnConnectionError += (message) => ConnectionError(agent, message);
            agent.OnMessage         += (payload) => MessageReceived(agent, payload);

            if (!Agents.ContainsKey(agent.Address))
            {
                Agents.Add(agent.Address, agent);
            }
        }
Пример #8
0
        public void AddClient(AgentConnection client)
        {
            client.Session            = this;
            client.OnOpen            += () => ConnectionOpen(client);
            client.OnClose           += () => ConnectionClose(client);
            client.OnConnectionError += (message) => ConnectionError(client, message);
            client.OnMessage         += (payload) => MessageReceived(client, payload);

            if (!Agents.ContainsKey(client.Address))
            {
                Agents.Add(client.Address, client);
            }
        }
        private void ConnectionClose(AgentConnection agent)
        {
            logger.Info($"The connection is no longer available");
            OnAgentHealthcheckStatsUpdated(agent, new AgentHealthState(), string.Empty);

            agent.Disconnect();

            agent.Dispatchers.Clear();
            agent.Processors.Clear();

            foreach (DispatcherBase dispatcher in agent.Dispatchers.Values)
            {
                dispatcher.Stop();
            }

            logger.Info($"Connection closed for agent {agent.Address}");
        }
        private void InitializeClientConnection(AgentConnection agent)
        {
            //Configure processors
            agent.Processors.Add(MessageType.AgentRegistration, new AgentRegistrationProcessor(agent));
            agent.Processors.Add(MessageType.NodeStatistics, new NodeStatusProcessor(agent));
            agent.Processors.Add(MessageType.ResourceFromAgent, new ResourceFromAgentProcessor(agent));
            agent.Processors.Add(MessageType.AgentHealthcheck, new AgentHealthcheckProcessor(agent));

            //Configure dispatchers
            agent.Dispatchers.Add(MessageType.ClientRegistration, new ClientRegistrationDispatcher(agent, int.MaxValue));
            agent.Dispatchers.Add(MessageType.NodeConfiguration, new NodeConfigurationDispatcher(agent, int.MaxValue));
            agent.Dispatchers.Add(MessageType.ActionRequest, new NodeActionDispatcher(agent, 1000));
            agent.Dispatchers.Add(MessageType.ResourceFromClient, new ResourceFromClientDispatcher(agent, 1000));

            foreach (DispatcherBase dispatcher in agent.Dispatchers.Values)
            {
                dispatcher.Updated += agent.SendObject;
            }

            logger.Debug($"Connected Client {agent.Address}");
        }
 public void ConnectAgent(AgentConnection agent)
 {
     agent.Connect();
 }
 public void InitializeAgent(AgentConnection agent)
 {
     OnAgentHealthcheckStatsUpdated(agent, new AgentHealthState(), "Connecting...");
 }
 private void ConnectionError(AgentConnection agent, string message)
 {
     logger.Info($"Failed to connect to agent {agent.Address}");
     OnAgentHealthcheckStatsUpdated(agent, new AgentHealthState(), message);
 }
 public void DisconnectAgent(AgentConnection agent)
 {
     agent.Disconnect();
 }
        public AgentConnection GetAgent(string agentAddress)
        {
            AgentConnection client = Session.Agents.FirstOrDefault(a => a.Key == agentAddress).Value;

            return(client);
        }