|
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 sajas.core.behaviours.Behaviour |
Behaviour.RunnableChangedEvent |
Fields inherited from class sajas.core.behaviours.Behaviour |
myAgent, myEvent, NOTIFY_DOWN, NOTIFY_UP, parent, STATE_BLOCKED, STATE_READY, STATE_RUNNING |
Constructor Summary | ||
ReceiverBehaviour(Agent a, long millis, jade.lang.acl.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, jade.lang.acl.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. |
|
jade.lang.acl.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 sajas.core.behaviours.Behaviour |
actionWrapper, block, block, getAgent, 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 |
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
.
receive()
the message.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
}
millis
milliseconds (infinite time if
millis < 1
. When calling this constructor, a
suitable Handle
must be created and passed to it.Handle
object, which can be used to retrieve an ACL
message out of a ReceiverBehaviour
object.Handle
object.true
when an ACL message has been received.ACLMessage
with the same
ReceiverBehaviour
without creating a new object.
|