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(); }
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()); } }