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