using System; using AgentService.Agent; using AgentService.Agent.Runtime; using AgentService.Agent.Behaviour; using AgentService.Agent.Knowledge; using AgentService.Platform.AMS; using AgentService.Platform.MTS; using AgentService.Platform.DF; namespace TestMessaging { /// /// Class SendMessage. This behaviour is used /// to simply to receive messages and dumping /// them to the console. /// [Knowledge(typeof(MessageData))] public class ReceiveMessage : Behaviour { /// /// knowledge message data. /// protected MessageData messageData; /// /// Constracts a ReceiveMessage behaviour. /// /// behaviour name /// message data knowledge public ReceiveMessage(string name, MessageData messageData) : base(name, messageData) { this.messageData = messageData; } /// /// Plays the Pong role of the Ping Pong Game. /// The Pong role waits for a ping message and /// then pings back (pongs) a response to the /// ping message. /// public override void Body() { int maxMessages = 0; bool bReplyAdd = false; try { this.LockKnowledge(this.messageData); maxMessages = this.messageData.GetMaxMessages(this); bReplyAdd = this.messageData.GetReplyAdd(this); } finally { this.ReleaseKnowledge(true); } int sequence = 0; Random rdm = new Random(int.MaxValue - maxMessages); do { AgentMessage msg = this.Runtime.MessageSvc.WaitForMessage(); msg = this.Runtime.MessageSvc.ReceiveMessage(); int ping = (int) msg.Body["ping"]; this.Runtime.Console.AppendMessage("[{0}] - Received ping: {1}", sequence, ping); int pong = (bReplyAdd == true ? rdm.Next(100)+1 : ping); msg = msg.Reply(true); if (sequence == 0) { msg.Body.Add("pong", pong); } else { msg.Body["pong"] = pong; } this.Runtime.MessageSvc.SendMessage(msg); this.Runtime.Console.AppendMessage("[{0}] - Sent pong: {1}", sequence, pong); sequence++; } while (sequence < maxMessages); } } }