Example #1
0
        public override void UpdateOneMillisecond()
        {
            base.UpdateOneMillisecond();
            var period = Config.Rnd.Next(10000, 10100);

            if (Time.GlobalSimulationTime % period == 0) // ping per 1sec
            {
                var messenger = FindNearestMessenger();
                if (messenger == null)
                {
                    return;
                }
                var ping = new Message()
                {
                    RoutingTime            = Time.GlobalSimulationTime,
                    SenderAgent            = this,
                    SenderAgentId          = AgentId,
                    CurrentSenderAgent     = this,
                    CurrentReceiverAgent   = messenger,
                    CurrentReceiverAgentId = messenger.AgentId,
                    ReceiverAgent          = LeaderAgent,
                    ReceiverAgentId        = LeaderAgent.AgentId,
                    MessageType            = BroadcastType.SendReceive,
                    MessageContent         = MessagesContent.Ping,
                    DataMessageText        = ""
                };
                SendMessage(ping);
                ReplyWaitingList.Add(ping);
            }

            CheckPingList();
        }
Example #2
0
        public override void OnMessage(Message message)
        {
            if (Status == State.Failed)
            {
                return;
            }

            if (message.ReceiverAgentId == AgentId)
            {
                ProcessMessage(message);
            }

            else if (message.ReceiverAgentId == "-1")
            {
                message.CurrentReceiverAgentId = "-1";
                message.CurrentSenderAgent     = this;
                message.CurrentSenderAgentId   = AgentId;
                message.RoutingList.Add(this);
                Container.ContainerMedia.SendMessage(message.Copy());
            }

            else if (Position.Position.CalculateDistance(message.ReceiverAgent.Position.Position) <= RadioRange)
            {
                if (message.MessageContent == MessagesContent.Ping)
                {
                    message.RoutingTime            = Time.GlobalSimulationTime;
                    message.CurrentReceiverAgentId = message.ReceiverAgentId;
                    message.CurrentReceiverAgent   = message.ReceiverAgent;
                    message.CurrentSenderAgentId   = AgentId;
                    message.CurrentSenderAgent     = this;

                    message.RoutingList.Add(this);
                    ReplyWaitingList.Add(message.Copy());
                    Container.ContainerMedia.SendMessage(message.Copy());
                }
                else if (message.MessageContent == MessagesContent.PingReply)
                {
                    message.CurrentReceiverAgentId = message.ReceiverAgentId;
                    message.CurrentReceiverAgent   = message.ReceiverAgent;
                    message.CurrentSenderAgentId   = AgentId;
                    message.CurrentSenderAgent     = this;
                    message.RoutingList.Add(this);
                    Container.ContainerMedia.SendMessage(message.Copy());
                    foreach (var pingMessage in ReplyWaitingList)
                    {
                        if (pingMessage.ReceiverAgent == message.SenderAgent)
                        {
                            ReplyWaitingList.Remove(pingMessage);
                            break;
                        }
                    }
                }

                else
                {
                    message.CurrentReceiverAgentId = message.ReceiverAgentId;
                    message.CurrentReceiverAgent   = message.ReceiverAgent;
                    message.CurrentSenderAgentId   = AgentId;
                    message.CurrentSenderAgent     = this;
                    message.RoutingList.Add(this);
                    Container.ContainerMedia.SendMessage(message.Copy());
                }
            }

            else
            {
                if (message.MessageContent == MessagesContent.PingReply)
                {
                    foreach (var pingMessage in ReplyWaitingList)
                    {
                        if (pingMessage.ReceiverAgent == message.SenderAgent)
                        {
                            ReplyWaitingList.Remove(pingMessage);
                            break;
                        }
                    }
                }


                var mAgent = FindNearestMessenger(Position, message.ReceiverAgent.Position, message);
                if (mAgent == null)
                {
                    RadioRange += 50;
                    OnMessage(message);
                    return;
                }
                message.CurrentReceiverAgentId = mAgent.AgentId;
                message.CurrentReceiverAgent   = mAgent;
                message.CurrentSenderAgent     = this;
                message.CurrentSenderAgentId   = AgentId;
                message.RoutingList.Add(this);
                Container.ContainerMedia.SendMessage(message.Copy());
            }
        }