|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectjade.core.behaviours.Behaviour
jade.core.behaviours.ReceiverBehaviour
public final class ReceiverBehaviour
Behaviour for receiving an ACL message. This class encapsulates a
receive() as an atomic operation. This behaviour
terminates when an ACL message is received.
The method getMessage() allows to get the received message.
SenderBehaviour,
Agent.receive(),
ACLMessage,
Serialized Form| Nested Class Summary | |
|---|---|
static interface |
ReceiverBehaviour.Handle
An interface representing ACL messages due to arrive within a time limit. |
static class |
ReceiverBehaviour.NotYetReady
Exception class for timeouts. |
static class |
ReceiverBehaviour.TimedOut
Exception class for timeouts. |
| Nested classes/interfaces inherited from class jade.core.behaviours.Behaviour |
|---|
Behaviour.RunnableChangedEvent |
| Field Summary |
|---|
| Fields inherited from class jade.core.behaviours.Behaviour |
|---|
myAgent, myEvent, NOTIFY_DOWN, NOTIFY_UP, parent, STATE_BLOCKED, STATE_READY, STATE_RUNNING |
| Constructor Summary | |
|---|---|
ReceiverBehaviour(Agent a,
long millis,
MessageTemplate mt)
This constructor creates a ReceiverBehaviour object that ends as soon as an ACL
message matching a given MessageTemplate arrives or
the passed millis |
|
ReceiverBehaviour(Agent a,
ReceiverBehaviour.Handle h,
long millis)
Receive any ACL message, waiting at most millis
milliseconds (infinite time if millis < 1). |
|
ReceiverBehaviour(Agent a,
ReceiverBehaviour.Handle h,
long millis,
MessageTemplate mt)
Receive any ACL message matching the given template, witing at most millis milliseconds (infinite time if
millis < 1. |
|
| Method Summary | |
|---|---|
void |
action()
Actual behaviour implementation. |
boolean |
done()
Checks whether this behaviour ended. |
ACLMessage |
getMessage()
This method allows the caller to get the received message. |
static ReceiverBehaviour.Handle |
newHandle()
Factory method for message handles. |
void |
reset()
Resets this behaviour. |
| Methods inherited from class jade.core.behaviours.Behaviour |
|---|
actionWrapper, block, block, getBehaviourName, getDataStore, getExecutionState, getParent, getRestartCounter, handle, handleBlockEvent, handleRestartEvent, isRunnable, onEnd, onStart, restart, root, setAgent, setBehaviourName, setDataStore, setExecutionState |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Constructor Detail |
|---|
public ReceiverBehaviour(Agent a,
long millis,
MessageTemplate mt)
ReceiverBehaviour object that ends as soon as an ACL
message matching a given MessageTemplate arrives or
the passed millis timeout expires.
The received message can then be got via the method
getMessage.
- Parameters:
a - The agent this behaviour belongs to, and that will
receive() the message.millis - The timeout expressed in milliseconds, an infinite timeout
can be expressed by a value < 0.mt - A Message template to match incoming messages against, null to
indicate no template and receive any message that arrives.
public ReceiverBehaviour(Agent a,
ReceiverBehaviour.Handle h,
long millis)
millis
milliseconds (infinite time if millis < 1).
When calling this constructor, a suitable Handle
must be created and passed to it. When this behaviour ends, some
other behaviour will try to get the ACL message out of the
handle, and an exception will be thrown in case of a time out.
The following example code explains this:
// ReceiverBehaviour creation, e.g. in agent setup() method
h = ReceiverBehaviour.newHandle(); // h is an agent instance variable
addBehaviour(new ReceiverBehaviour(this, h, 10000); // Wait 10 seconds
...
// Some other behaviour, later, tries to read the ACL message
// in its action() method
try {
ACLMessage msg = h.getMessage();
// OK. Message received within timeout.
}
catch(ReceiverBehaviour.TimedOut rbte) {
// Receive timed out
}
catch(ReceiverBehaviour.NotYetReady rbnyr) {
// Message not yet ready, but timeout still active
}
a - The agent this behaviour belongs to.h - An Handle representing the message to receive.millis - The maximum amount of time to wait for the message,
in milliseconds.ReceiverBehaviour.Handle,
newHandle()
public ReceiverBehaviour(Agent a,
ReceiverBehaviour.Handle h,
long millis,
MessageTemplate mt)
millis milliseconds (infinite time if
millis < 1. When calling this constructor, a
suitable Handle must be created and passed to it.
a - The agent this behaviour belongs to.h - An Handle representing the message to receive.millis - The maximum amount of time to wait for the message,
in milliseconds.mt - A Message template to match incoming messages against, null to
indicate no template and receive any message that arrives.ReceiverBehaviour(Agent a, Handle h, long millis)| Method Detail |
|---|
public static ReceiverBehaviour.Handle newHandle()
Handle object, which can be used to retrieve an ACL
message out of a ReceiverBehaviour object.
Handle object.ReceiverBehaviour.Handlepublic void action()
action in class BehaviourCompositeBehaviourpublic boolean done()
done in class Behaviourtrue when an ACL message has been received.public void reset()
ACLMessage with the same
ReceiverBehaviour without creating a new object.
reset in class Behaviour
public ACLMessage getMessage()
throws ReceiverBehaviour.TimedOut,
ReceiverBehaviour.NotYetReady
ReceiverBehaviour.TimedOut - if the timeout passed in the constructor of this
class expired before any message (that eventually matched the passed
message template) arrived
ReceiverBehaviour.NotYetReady - if the message is not yet arrived and the
timeout is not yet expired.
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||