Exemplo n.º 1
0
        /// <summary>
        /// Receive accept message
        /// </summary>
        /// <param name="agentMessage">Accepted message</param>
        private void AcceptTask(AgentMessage agentMessage)
        {
            int cost = CalcCost(agentMessage.Text);

            int index = _taskedAgent.FindIndex(a => a.Subject == agentMessage.Subject);

            if (index >= 0)
            {
                int oldCost = CalcCost(_taskedAgent[index].Text);
                if (oldCost > cost)
                    _taskedAgent[index] = agentMessage;
            }
            else
            {
                int startIndex = agentMessage.Text.IndexOf('[') + 1;
                int endIndex = agentMessage.Text.IndexOf(']');
                string newTask = agentMessage.Text.Substring(startIndex, endIndex - startIndex);
                AgentMessage msg = agentMessage;
                msg.Subject = newTask;
                _taskedAgent.Add(msg);
            }

            if (CheckCompleteAllTasks())
            {
                _agent.AcceptMessage(_acceptedAgent, _acceptedTask);
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Send message to another agent
        /// </summary>
        /// <param name="receiverAgent">Receiver agent</param>
        /// <param name="message">Message</param>
        public void SendMessage(string receiverAgent, AgentMessage message)
        {
            string pathAgent = _prefixPath + receiverAgent;

            MessageQueue mq;
            if (MessageQueue.Exists(pathAgent))
                mq = new MessageQueue(pathAgent);
            else
                mq = MessageQueue.Create(pathAgent);

            AgentMessage sendedMessage = new AgentMessage()
            {
                MessageType = message.MessageType,
                SenderAgent = _pathService,
                Subject = message.Subject,
                Text = message.Text,
                Owner = message.Owner
            };

            //message.SenderAgent = _pathService;
            mq.Send(sendedMessage);
        }
Exemplo n.º 3
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="agentMessage">Message</param>
 public AgentMessageEventArgs(AgentMessage agentMessage)
 {
     AgentMessage = agentMessage;
 }
Exemplo n.º 4
0
        /// <summary>
        /// Write message to Log list
        /// </summary>
        /// <param name="agentMessage">AgentMessage</param>
        private void WriteMessageToLogList(AgentMessage agentMessage)
        {
            string msg = "[" + agentMessage.SenderAgent + "]";
            if (agentMessage.MessageType == MessageType.Subscribe)
                msg += " +" + agentMessage.Subject;
            else if (agentMessage.MessageType == MessageType.Unsubscribe)
                msg += " -" + agentMessage.Subject;
            else if (agentMessage.MessageType == MessageType.Hello)
                msg += " Установлено соединение с " + agentMessage.SenderAgent;
            else if (agentMessage.MessageType == MessageType.Bye)
                msg += " Закрыто соединение с " + agentMessage.SenderAgent;
            //msg += agentMessage.Subject;
            if (agentMessage.MessageType == MessageType.Message)
            {
                msg += " : ";
                msg += agentMessage.Text;
            }

            InvokeWriteToLog(msg);
        }
Exemplo n.º 5
0
 /// <summary>
 /// Unsubscrie if need
 /// </summary>
 /// <param name="message">Message</param>
 private void UnsubscribeIfNeed(AgentMessage message)
 {
     List<string> outList;
     if (!_routingTable.TryGetValue(message.Subject, out outList))
     {
         if (!_subscribed.Exists(s => s == message.Subject))
         {
             AgentMessage msg = new AgentMessage()
             {
                 MessageType = MessageType.Unsubscribe,
                 SenderAgent = AgentName,
                 Subject = message.Subject
             };
             _messageService.SendMessage(message.SenderAgent, msg);
         }
     }
 }
Exemplo n.º 6
0
        /// <summary>
        /// Send all subscribe to near agent
        /// </summary>
        /// <param name="nearAgent">Name of the near agent</param>
        private void SubscribeAll(string nearAgent)
        {
            foreach (var route in _routingTable)
            {
                AgentMessage msg = new AgentMessage()
                {
                    MessageType = MessageType.Subscribe,
                    SenderAgent = AgentName,
                    Subject = route.Key
                };
                _messageService.SendMessage(nearAgent, msg);
            }

            foreach (var sub in _subscribed)
            {
                AgentMessage msg = new AgentMessage()
                {
                    MessageType = MessageType.Subscribe,
                    SenderAgent = AgentName,
                    Subject = sub
                };
                _messageService.SendMessage(nearAgent, msg);
            }
        }
Exemplo n.º 7
0
 /// <summary>
 /// Send message to near agents
 /// </summary>
 /// <param name="message"></param>
 private void SendMessageToNearAgents(AgentMessage message)
 {
     foreach (var agent in _nearAgents)
     {
         if (agent != message.SenderAgent)
             _messageService.SendMessage(agent, message);
     }
 }
Exemplo n.º 8
0
 /// <summary>
 /// Send message into route table
 /// </summary>
 /// <param name="message">Message</param>
 private void SendMessageIntoRouteTable(AgentMessage message)
 {
     List<string> outList;
     if (_routingTable.TryGetValue(message.Subject, out outList))
     {
         foreach (var agent in outList)
         {
             if (agent != message.SenderAgent)
                 _messageService.SendMessage(agent, message);
         }
     }
 }
Exemplo n.º 9
0
 /// <summary>
 /// Receive message if this agent subscribed on input message
 /// </summary>
 /// <param name="message">Message</param>
 private void ReceiveMessageIfNeed(AgentMessage message)
 {
     if (_subscribed.Exists(s => s == message.Subject))
     {
     #if !DEBUG
         ReceiveMessageEvent(new AgentMessageEventArgs(message));
     #endif
     }
 }
Exemplo n.º 10
0
 /// <summary>
 /// Receivee message
 /// </summary>
 /// <param name="message">Message</param>
 private void ReceiveMessage(AgentMessage message)
 {
     #if DEBUG
     ReceiveMessageEvent(new AgentMessageEventArgs(message));
     #endif
     switch (message.MessageType)
     {
         case MessageType.Message:
             UnsubscribeIfNeed(message);
             ReceiveMessageIfNeed(message);
             SendMessageIntoRouteTable(message);
             break;
         case MessageType.Subscribe:
             AddNearAgentIfNotExists(message.SenderAgent);
             AddRoute(message.SenderAgent, message.Subject);
             SendMessageToNearAgents(message);
             break;
         case MessageType.Unsubscribe:
             RemoveRoute(message.SenderAgent, message.Subject);
             //SendMessageToNearAgents(message);
             break;
         case MessageType.Hello:
             AddNearAgentIfNotExists(message.SenderAgent);
             //SubscribeAll(message.SenderAgent);
             break;
         case MessageType.Bye:
             RemoveAgentFromRoutingTable(message.SenderAgent);
             _nearAgents.Remove(message.SenderAgent);
             //RemoveNearAgent(message.SenderAgent);
             break;
     }
 }
Exemplo n.º 11
0
        /// <summary>
        /// Unsubscribe
        /// </summary>
        /// <param name="subject">Subject</param>
        public void Unsubscribe(string subject)
        {
            if (_subscribed.Exists(s => s == subject))
            {
                _subscribed.Remove(subject);

                AgentMessage msg = new AgentMessage()
                {
                    MessageType = MessageType.Unsubscribe,
                    SenderAgent = AgentName,
                    Subject = subject
                };

                SendMessageToNearAgents(msg);
            }
        }
Exemplo n.º 12
0
        /// <summary>
        /// Remove near agent
        /// </summary>
        /// <param name="nearAgent">Name of the near agent</param>
        public void RemoveNearAgent(string nearAgent)
        {
            if (_nearAgents.Exists(a => a == nearAgent))
            {
                _nearAgents.Remove(nearAgent);

                AgentMessage msg = new AgentMessage()
                {
                    MessageType = MessageType.Bye,
                    SenderAgent = AgentName
                };
                _messageService.SendMessage(nearAgent, msg);

                RemoveAgentFromRoutingTable(nearAgent);
            }
        }
Exemplo n.º 13
0
        /// <summary>
        /// Publish
        /// </summary>
        /// <param name="subject">Subject</param>
        /// <param name="text">Text</param>
        public void Publish(string subject, string text)
        {
            AgentMessage msg = new AgentMessage()
            {
                MessageType = MessageType.Message,
                SenderAgent = AgentName,
                Subject = subject,
                Text = text,
                Owner = AgentName
            };

            SendMessageIntoRouteTable(msg);
        }
Exemplo n.º 14
0
        /// <summary>
        /// Add near agent
        /// </summary>
        /// <param name="nearAgent">Name of the near agent</param>
        public void AddNearAgent(string nearAgent)
        {
            if (!_nearAgents.Exists(a => a == nearAgent))
            {
                _nearAgents.Add(nearAgent);

                AgentMessage msg = new AgentMessage()
                {
                    MessageType = MessageType.Hello,
                    SenderAgent = AgentName
                };
                _messageService.SendMessage(nearAgent, msg);

                SubscribeAll(nearAgent);
            }
        }
Exemplo n.º 15
0
        /// <summary>
        /// Write message to log list
        /// </summary>
        /// <param name="agentMessage">Agent message</param>
        private void WriteMessageToLogList(AgentMessage agentMessage)
        {
            string msg = "[" + agentMessage.SenderAgent + "]";
            if (agentMessage.MessageType == MessageType.Subscribe)
                msg += " +" + agentMessage.Subject;
            else if (agentMessage.MessageType == MessageType.Unsubscribe)
                msg += " -" + agentMessage.Subject;
            else if (agentMessage.MessageType == MessageType.Hello)
                msg += " Установлено соединение с " + agentMessage.SenderAgent;
            else if (agentMessage.MessageType == MessageType.Bye)
                msg += " Закрыто соединение с " + agentMessage.SenderAgent;
            //msg += agentMessage.Subject;
            if (agentMessage.MessageType == MessageType.Message)
            {
                msg += " : ";
                msg += agentMessage.Text;
            }

            if (lbLog.InvokeRequired)
            {
                AddStringToListBox d = new AddStringToListBox((text) => { InvokeReceiveMessage(text); });
                this.Invoke(d, new object[] { msg });
            }
            else
            {
                InvokeReceiveMessage(msg);
            }
        }