public class TwoPh0Initiator extends FSMBehaviour
Modifier and Type | Field and Description |
---|---|
java.lang.String |
ALL_CFPS_KEY
key to retrieve from the DataStore of the behaviour the vector of
CFP messages that have to be sent.
|
java.lang.String |
ALL_PENDINGS_KEY
key to retrieve from the DataStore of the behaviour the vector of
CFP messages for which a response has not been received yet.
|
java.lang.String |
ALL_PROPOSES_KEY
key to retrieve from the DataStore of the behaviour the vector of
PROPOSE messages that have been received as response.
|
java.lang.String |
ALL_RESPONSES_KEY
key to retrieve from the DataStore of the behaviour the vector of
all messages that have been received as response.
|
java.lang.String |
CFP_KEY
key to retrieve from the DataStore of the behaviour the ACLMessage
object passed in the constructor of the class.
|
java.lang.String |
REPLY_KEY
key to retrieve from the DataStore of the behaviour the last
ACLMessage object that has been received (null if the timeout
expired).
|
currentName, lastStates
Constructor and Description |
---|
TwoPh0Initiator(Agent a,
ACLMessage cfp,
java.lang.String outputKey)
Constructs a
TwoPh0Initiator behaviour. |
TwoPh0Initiator(Agent a,
ACLMessage cfp,
java.lang.String outputKey,
DataStore store)
Constructs a
TwoPh0Initiator behaviour. |
Modifier and Type | Method and Description |
---|---|
protected java.lang.String |
createConvId(java.util.Vector msgs)
Create a new conversation identifier to begin a new
interaction.
|
protected ProtocolSession |
getSession(ACLMessage msg,
int sessionIndex) |
protected void |
handleAllResponses(java.util.Vector responses,
java.util.Vector proposes,
java.util.Vector pendings,
java.util.Vector nextPhMsgs)
This method is called when all the responses have been collected or when
the timeout is expired.
|
protected void |
handleFailure(ACLMessage failure)
This method is called every time a
failure
message is received, which is not out-of-sequence according
to the protocol rules. |
protected void |
handleNotUnderstood(ACLMessage notUnderstood)
This method is called every time a
not-understood
message is received, which is not out-of-sequence according
to the protocol rules. |
protected void |
handleOutOfSequence(ACLMessage msg)
This method is called every time a
message is received, which is out-of-sequence according
to the protocol rules.
|
protected void |
handlePropose(ACLMessage propose)
This method is called every time a
propose message is received,
which is not out-of-sequence according to the protocol rules. |
int |
onEnd()
Override the onEnd() method to return the exit value of the
last executed state.
|
void |
onStart()
Override the onStart() method to initialize the vectors that
will keep all the replies in the data store.
|
protected java.util.Vector |
prepareCfps(ACLMessage cfp)
This method must return the vector of ACLMessage objects to be sent.
|
void |
registerHandleAllResponses(Behaviour b)
This method allows to register a user defined
Behaviour in the
HANDLE_ALL_RESPONSES state. |
void |
registerHandleFailure(Behaviour b)
This method allows to register a user defined
Behaviour
in the HANDLE_FAILURE state. |
void |
registerHandleNotUnderstood(Behaviour b)
This method allows to register a user defined
Behaviour
in the HANDLE_NOT_UNDERSTOOD state. |
void |
registerHandleOutOfSequence(Behaviour b)
This method allows to register a user defined
Behaviour
in the HANDLE_OUT_OF_SEQ state. |
void |
registerHandlePropose(Behaviour b)
This method allows to register a user defined
Behaviour in the
HANDLE_PROPOSE state. |
void |
registerPrepareCfps(Behaviour b)
This method allows to register a user-defined
Behaviour in the
PREPARE_CFPS state. |
protected void |
reinit()
Re-initialize the internal state without performing a complete reset.
|
void |
reset()
reset this behaviour by putting a null ACLMessage as message
to be sent
|
void |
reset(ACLMessage msg)
reset this behaviour
|
void |
setDataStore(DataStore ds)
Override the setDataStore() method to propagate this
setting to all children.
|
checkTermination, deregisterDefaultTransition, deregisterState, deregisterTransition, forceTransitionTo, getChildren, getCurrent, getLastExitValue, getName, getPrevious, getState, handleInconsistentFSM, handleStateEntered, hasDefaultTransition, registerDefaultTransition, registerDefaultTransition, registerFirstState, registerLastState, registerState, registerTransition, registerTransition, resetStates, scheduleFirst, scheduleNext, stringifyTransitionTable
action, done, resetChildren, setAgent
block, block, getAgent, getBehaviourName, getDataStore, getParent, isRunnable, restart, root, setBehaviourName
public final java.lang.String CFP_KEY
public final java.lang.String ALL_CFPS_KEY
public final java.lang.String REPLY_KEY
public final java.lang.String ALL_RESPONSES_KEY
public final java.lang.String ALL_PROPOSES_KEY
public final java.lang.String ALL_PENDINGS_KEY
public TwoPh0Initiator(Agent a, ACLMessage cfp, java.lang.String outputKey)
TwoPh0Initiator
behaviour.a
- The agent performing the protocol.cfp
- The message that must be used to initiate the protocol.
Notice that the default implementation of the prepareCfps
method
returns an array composed of that message only.outputKey
- Data store key where the behaviour will store the Vector
of messages to be sent to initiate the successive phase.public TwoPh0Initiator(Agent a, ACLMessage cfp, java.lang.String outputKey, DataStore store)
TwoPh0Initiator
behaviour.a
- The agent performing the protocol.cfp
- The message that must be used to initiate the protocol.
Notice that the default implementation of the prepareCfps
method
returns an array composed of that message only.outputKey
- Data store key where the behaviour will store the Vector
of messages to be sent to initiate the successive phase.store
- DataStore
that will be used by this TwoPh0Initiator
.public int onEnd()
FSMBehaviour
onEnd
in class FSMBehaviour
protected java.util.Vector prepareCfps(ACLMessage cfp)
cfp
- the ACLMessage object passed in the constructorreply-with
slot is ignored and regenerated automatically by this
class. Instead user can specify reply-by
slot representing phase0
timeout.protected void handlePropose(ACLMessage propose)
propose
message is received,
which is not out-of-sequence according to the protocol rules. This default
implementation does nothing; programmers might wish to override the method
in case they need to react to this event.propose
- the received propose messageprotected void handleAllResponses(java.util.Vector responses, java.util.Vector proposes, java.util.Vector pendings, java.util.Vector nextPhMsgs)
reply-By
of all the sent messages. By response message we
intend here all the propose, failure, not-understood
received messages, which
are not out-of-sequence according to the protocol rules.
This default implementation does nothing; programmers might
wish to override this method to modify the Vector of initiation messages
(nextPhMsgs
) for next phase. More in details this Vector
already includes messages with the performative set according to the
default protocol rules i.e. QUERY_IF (if all responders replied with
PROPOSE) or REJECT_PROPOSAL (if at least one responder failed or didn't reply).
In particular, by setting the reply-by
slot, users can
specify a timeout for next phase.responses
- The Vector of all messages received as responseproposes
- The Vector of PROPOSE messages received as responsependings
- The Vector of CFP messages for which a response has not
been received yetnextPhMsgs
- The Vector of initiation messages for next phase already
filled with QUERY_IF
messages (if all responders replied with
PROPOSE
) or REJECT_PROPOSAL
(if at least one
responder failed or didn't reply).public void registerPrepareCfps(Behaviour b)
Behaviour
in the
PREPARE_CFPS state. This behaviour would override the homonymous method. This
method also set the data store of the registered Behaviour
to the
DataStore of this current behaviour. It is responsibility of the registered
behaviour to put the Vector
of ACLMessage objects to be sent into
the datastore at the ALL_CFPS_KEY
key.b
- the Behaviour that will handle this statepublic void registerHandlePropose(Behaviour b)
Behaviour
in the
HANDLE_PROPOSE state. This behaviour would override the homonymous method.
This method also set the data store of the registered Behaviour
to the DataStore of this current behaviour. The registered behaviour can retrieve
the propose
ACLMessage object received from the datastore at the
REPLY_KEY
key.b
- the Behaviour that will handle this statepublic void registerHandleAllResponses(Behaviour b)
Behaviour
in the
HANDLE_ALL_RESPONSES state. This behaviour would override the homonymous method.
This method also set the data store of the registered Behaviour
to
the DataStore of this current behaviour. The registered behaviour can retrieve
the vector of ACLMessage proposes, failures, pending and responses from the
datastore at ALL_PROPOSES_KEY
, ALL_FAILURES_KEY
,
ALL_PH0_PENDINGS_KEY
and output
field.b
- the Behaviour that will handle this stateprotected ProtocolSession getSession(ACLMessage msg, int sessionIndex)
protected void handleNotUnderstood(ACLMessage notUnderstood)
not-understood
message is received, which is not out-of-sequence according
to the protocol rules.
This default implementation does nothing; programmers might
wish to override the method in case they need to react to this event.notUnderstood
- the received not-understood messageprotected void handleFailure(ACLMessage failure)
failure
message is received, which is not out-of-sequence according
to the protocol rules.
This default implementation does nothing; programmers might
wish to override the method in case they need to react to this event.failure
- the received failure messageprotected void handleOutOfSequence(ACLMessage msg)
msg
- the received messagepublic void registerHandleNotUnderstood(Behaviour b)
Behaviour
in the HANDLE_NOT_UNDERSTOOD state.
This behaviour would override the homonymous method.
This method also set the
data store of the registered Behaviour
to the
DataStore of this current behaviour.
The registered behaviour can retrieve
the not-understood
ACLMessage object received
from the datastore at the REPLY_KEY
key.b
- the Behaviour that will handle this statepublic void registerHandleFailure(Behaviour b)
Behaviour
in the HANDLE_FAILURE state.
This behaviour would override the homonymous method.
This method also set the
data store of the registered Behaviour
to the
DataStore of this current behaviour.
The registered behaviour can retrieve
the failure
ACLMessage object received
from the datastore at the REPLY_KEY
key.b
- the Behaviour that will handle this statepublic void registerHandleOutOfSequence(Behaviour b)
Behaviour
in the HANDLE_OUT_OF_SEQ state.
This behaviour would override the homonymous method.
This method also set the
data store of the registered Behaviour
to the
DataStore of this current behaviour.
The registered behaviour can retrieve
the out of sequence
ACLMessage object received
from the datastore at the REPLY_KEY
key.b
- the Behaviour that will handle this statepublic void reset()
reset
in class FSMBehaviour
public void reset(ACLMessage msg)
msg
- is the ACLMessage to be sentprotected void reinit()
public void onStart()
public void setDataStore(DataStore ds)
setDataStore
in class Behaviour
ds
- the DataStore
that this Behaviour
will use as its private data storeprotected java.lang.String createConvId(java.util.Vector msgs)
msgs
- A vector of ACL messages. If the first one has a
non-empty :conversation-id
slot, its value is
used, else a new conversation identifier is generated.