Class ContractNetInitiator
- java.lang.Object
-
- jade.core.behaviours.Behaviour
-
- jade.core.behaviours.CompositeBehaviour
-
- jade.core.behaviours.SerialBehaviour
-
- jade.core.behaviours.FSMBehaviour
-
- jade.proto.ContractNetInitiator
-
- All Implemented Interfaces:
Serializable,Serializable
public class ContractNetInitiator extends FSMBehaviour
This class implements the initiator role in a Fipa-Contract-Net or Iterated-Fipa-Contract-Net interaction protocol.
This implementation works both for 1:1 and 1:N conversation.The following is a brief description of the protocol. The programmer should however refer to the FIPA Spec for a complete description.
The initiator solicits proposals from other agents by sending a
CFPmessage that specifies the action to be performed and, if needed, conditions upon its execution. The implementation of the callback methodprepareCfpsmust return the Vector of messages to be sent (eventually a single message with multiple receivers).The responders can then reply by sending a
PROPOSEmessage including the preconditions that they set out for the action, for instance the price or the time. Alternatively, responders may send aREFUSE, to refuse the proposal or, eventually, aNOT-UNDERSTOODto communicate communication problems. This first category of reply messages has been here identified as a responses and can be handled via thehandleAllResponses()callback method. Specific handle callback methods for each type of communicative act are also available when the programmer wishes to handle them separately:handlePropose(), handleRefuse(), handleNotUnderstood().The initiator can evaluate all the received proposals and make its choice of which agent proposals will be accepted and which will be rejected. This class provides two ways for this evaluation. It can be done progressively each time a new
PROPOSEmessage is received and a new call to thehandlePropose()callback method is executed or, in alternative, it can be done just once when all thePROPOSEmessages have been collected (or thereply-bydeadline has expired) and a single call to thehandleAllResponses()callback method is executed. In both cases, the second parameter of the method, i.e. the Vectoracceptances, must be filled with the appropriateACCEPT/REJECT-PROPOSALmessages. Notice that, for the first case, the methodskipNextResponses()has been provided that, if called by the programmer when waiting forPROPOSEmessages, allows to skip to the next state and ignore all the responses and proposals that have not yet been received.Once the responders whose proposal has been accepted (i.e. those that have received a
ACCEPT-PROPOSALmessage) have completed the task, they can, finally, respond with anINFORMof the result of the action (eventually just that the action has been done) or with aFAILUREif anything went wrong. This second category of reply messages has been here identified as a result notifications and can be handled via thehandleAllResultNotifications()callback method. Again, specific handle callback methods for each type of communicative act are also available when the programmer wishes to handle them separately:handleInform(), handleFailure().If a message were received, with the same value of this
conversation-id, but that does not comply with the FIPA protocol, than the methodhandleOutOfSequence()would be called.This class can be extended by the programmer by overriding all the needed handle methods or, in alternative, appropriate behaviours can be registered for each handle via the
registerHandle-type of methods. This last case is more difficult to use and proper care must be taken to properly use theDataStoreof theBehaviouras a shared memory mechanism with the registered behaviour.When needed this class can also be used to play the initiator role in an Iterated-Fipa-Contract-Net protocol. To activate a new CFP-PROPOSE iteration it is sufficient to invoke the
newIteration()method from within thehandleAllResponses()method.- Since:
- JADE2.5
- Version:
- $Date$ $Revision$
- Author:
- Giovanni Caire - TILab, Fabio Bellifemine - TILab, Tiziana Trucco - TILab, Marco Monticone - TILab
- See Also:
ContractNetResponder,AchieveREInitiator, FIPA Spec, Serialized Form
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class jade.core.behaviours.Behaviour
Behaviour.RunnableChangedEvent
-
-
Field Summary
Fields Modifier and Type Field Description StringALL_ACCEPTANCES_KEYkey to retrieve from the DataStore of the behaviour the vector of ACCEPT/REJECT_PROPOSAL ACLMessage objects that have to be sentStringALL_CFPS_KEYkey to retrieve from the DataStore of the behaviour the vector of CFP ACLMessage objects that have to be sent.protected StringALL_INITIATIONS_KStringALL_RESPONSES_KEYkey to retrieve from the DataStore of the behaviour the vector of ACLMessage objects that have been received as response.StringALL_RESULT_NOTIFICATIONS_KEYkey to retrieve from the DataStore of the behaviour the vector of ACLMessage objects that have been received as result notifications.StringCFP_KEYkey to retrieve from the DataStore of the behaviour the ACLMessage object passed in the constructor of the class.protected static StringCHECK_IN_SEQprotected static StringCHECK_SESSIONSprotected static StringDUMMY_FINALprotected static StringHANDLE_FAILUREprotected static StringHANDLE_NOT_UNDERSTOODprotected static StringHANDLE_OUT_OF_SEQprotected StringINITIATION_Kprotected static StringPREPARE_INITIATIONSprotected static StringRECEIVE_REPLYprotected StringREPLY_KStringREPLY_KEYkey to retrieve from the DataStore of the behaviour the last ACLMessage object that has been received (null if the timeout expired).protected MsgReceiverreplyReceiverprotected MessageTemplatereplyTemplateprotected static StringSEND_INITIATIONSprotected Mapsessions-
Fields inherited from class jade.core.behaviours.FSMBehaviour
currentName, lastStates
-
Fields inherited from class jade.core.behaviours.CompositeBehaviour
currentExecuted
-
Fields inherited from class jade.core.behaviours.Behaviour
myAgent, myEvent, NOTIFY_DOWN, NOTIFY_UP, parent, STATE_BLOCKED, STATE_READY, STATE_RUNNING
-
-
Constructor Summary
Constructors Constructor Description ContractNetInitiator(Agent a, ACLMessage cfp)Constructor for the class that creates a new empty DataStoreContractNetInitiator(Agent a, ACLMessage cfp, DataStore store)Constructs aContractNetInitiatorbehaviour
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected voidadjustReplyTemplate(ACLMessage msg)protected booleancheckInSequence(ACLMessage reply)Check whether a reply is in-sequence and update the appropriate Sessionprotected intcheckSessions(ACLMessage reply)Check the status of the sessions after the reception of the last reply or the expiration of the timeoutprotected StringcreateConvId(Vector msgs)Create a new conversation identifier to begin a new interaction.protected jade.proto.Initiator.ProtocolSessiongetSession(ACLMessage msg, int sessionIndex)Return a ProtocolSession object to manage replies to a given initiation messageprotected String[]getToBeReset()Return the states that must be reset before they are visited again.protected voidhandleAllResponses(Vector responses, Vector acceptances)This method is called when all the responses have been collected or when the timeout is expired.protected voidhandleAllResultNotifications(Vector resultNotifications)This method is called when all the result notification messages have been collected.protected voidhandleFailure(ACLMessage failure)This method is called every time afailuremessage is received, which is not out-of-sequence according to the protocol rules.protected voidhandleInform(ACLMessage inform)This method is called every time ainformmessage is received, which is not out-of-sequence according to the protocol rules.protected voidhandleNotUnderstood(ACLMessage notUnderstood)This method is called every time anot-understoodmessage is received, which is not out-of-sequence according to the protocol rules.protected voidhandleOutOfSequence(ACLMessage msg)This method is called every time a message is received, which is out-of-sequence according to the protocol rules.protected voidhandlePropose(ACLMessage propose, Vector acceptances)This method is called every time aproposemessage is received, which is not out-of-sequence according to the protocol rules.protected voidhandleRefuse(ACLMessage refuse)This method is called every time arefusemessage is received, which is not out-of-sequence according to the protocol rules.protected voidinitializeDataStore(ACLMessage msg)Initialize the data store.voidmoreAcceptances(Vector nextAcceptances)This method can be called to send acceptances to responder agents that replied with PROPOSE not all together but in more tranches.voidnewIteration(Vector nextMessages)This method can be called (typically within the handleAllResponses() method) to activate a new iteration (this means we are implementing an Iterated-Contract-Net protocol).voidonStart()Override the onStart() method to initialize the vectors that will keep all the replies in the data store.protected VectorprepareCfps(ACLMessage cfp)This method must return the vector of ACLMessage objects to be sent.protected VectorprepareInitiations(ACLMessage initiation)Specialize (if necessary) the initiation message for each receivervoidregisterHandleAllResponses(Behaviour b)This method allows to register a user definedBehaviourin the HANDLE_ALL_RESPONSES state.voidregisterHandleAllResultNotifications(Behaviour b)This method allows to register a user definedBehaviourin the HANDLE_ALL_RESULT_NOTIFICATIONS state.voidregisterHandleFailure(Behaviour b)This method allows to register a user definedBehaviourin the HANDLE_FAILURE state.voidregisterHandleInform(Behaviour b)This method allows to register a user definedBehaviourin the HANDLE_INFORM state.voidregisterHandleNotUnderstood(Behaviour b)This method allows to register a user definedBehaviourin the HANDLE_NOT_UNDERSTOOD state.voidregisterHandleOutOfSequence(Behaviour b)This method allows to register a user definedBehaviourin the HANDLE_OUT_OF_SEQ state.voidregisterHandlePropose(Behaviour b)This method allows to register a user definedBehaviourin the HANDLE_PROPOSE state.voidregisterHandleRefuse(Behaviour b)This method allows to register a user definedBehaviourin the HANDLE_REFUSE state.voidregisterPrepareCfps(Behaviour b)This method allows to register a user-definedBehaviourin the PREPARE_CFPS state.protected voidregisterPrepareInitiations(Behaviour b)Attach a behaviour to thePrepare-initiationsprotocol state.protected voidreinit()Re-initialize the internal state without performing a complete reset.voidreset()reset this behaviour by putting a null ACLMessage as message to be sentvoidreset(ACLMessage msg)reset this behaviourprotected voidsendInitiations(Vector initiations)Create and initialize the Sessions and sends the initiation messagesvoidsetDataStore(DataStore ds)Override the setDataStore() method to propagate this setting to all children.voidskipNextResponses()This method can be called (typically within the handlePropose() method) to skip all responses that have not been received yet.-
Methods inherited from class jade.core.behaviours.FSMBehaviour
checkTermination, deregisterDefaultTransition, deregisterState, deregisterTransition, forceTransitionTo, getChildren, getCurrent, getLastExitValue, getName, getPrevious, getState, handleInconsistentFSM, handleStateEntered, hasDefaultTransition, onEnd, registerDefaultTransition, registerDefaultTransition, registerFirstState, registerLastState, registerState, registerTransition, registerTransition, resetStates, scheduleFirst, scheduleNext, stringifyTransitionTable
-
Methods inherited from class jade.core.behaviours.SerialBehaviour
handle
-
Methods inherited from class jade.core.behaviours.CompositeBehaviour
action, done, handleBlockEvent, handleRestartEvent, registerAsChild, resetChildren, setAgent
-
Methods inherited from class jade.core.behaviours.Behaviour
actionWrapper, block, block, getAgent, getBehaviourName, getDataStore, getExecutionState, getParent, getRestartCounter, isRunnable, restart, root, setBehaviourName, setExecutionState
-
-
-
-
Field Detail
-
CFP_KEY
public final String CFP_KEY
key to retrieve from the DataStore of the behaviour the ACLMessage object passed in the constructor of the class.
-
ALL_CFPS_KEY
public final String ALL_CFPS_KEY
key to retrieve from the DataStore of the behaviour the vector of CFP ACLMessage objects that have to be sent.
-
ALL_ACCEPTANCES_KEY
public final String ALL_ACCEPTANCES_KEY
key to retrieve from the DataStore of the behaviour the vector of ACCEPT/REJECT_PROPOSAL ACLMessage objects that have to be sent
-
REPLY_KEY
public final 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).
-
ALL_RESPONSES_KEY
public final String ALL_RESPONSES_KEY
key to retrieve from the DataStore of the behaviour the vector of ACLMessage objects that have been received as response.
-
ALL_RESULT_NOTIFICATIONS_KEY
public final String ALL_RESULT_NOTIFICATIONS_KEY
key to retrieve from the DataStore of the behaviour the vector of ACLMessage objects that have been received as result notifications.
-
INITIATION_K
protected final String INITIATION_K
-
ALL_INITIATIONS_K
protected final String ALL_INITIATIONS_K
-
REPLY_K
protected final String REPLY_K
-
PREPARE_INITIATIONS
protected static final String PREPARE_INITIATIONS
- See Also:
- Constant Field Values
-
SEND_INITIATIONS
protected static final String SEND_INITIATIONS
- See Also:
- Constant Field Values
-
RECEIVE_REPLY
protected static final String RECEIVE_REPLY
- See Also:
- Constant Field Values
-
CHECK_IN_SEQ
protected static final String CHECK_IN_SEQ
- See Also:
- Constant Field Values
-
HANDLE_NOT_UNDERSTOOD
protected static final String HANDLE_NOT_UNDERSTOOD
- See Also:
- Constant Field Values
-
HANDLE_FAILURE
protected static final String HANDLE_FAILURE
- See Also:
- Constant Field Values
-
HANDLE_OUT_OF_SEQ
protected static final String HANDLE_OUT_OF_SEQ
- See Also:
- Constant Field Values
-
CHECK_SESSIONS
protected static final String CHECK_SESSIONS
- See Also:
- Constant Field Values
-
DUMMY_FINAL
protected static final String DUMMY_FINAL
- See Also:
- Constant Field Values
-
sessions
protected Map sessions
-
replyReceiver
protected MsgReceiver replyReceiver
-
replyTemplate
protected MessageTemplate replyTemplate
-
-
Constructor Detail
-
ContractNetInitiator
public ContractNetInitiator(Agent a, ACLMessage cfp)
Constructor for the class that creates a new empty DataStore
-
ContractNetInitiator
public ContractNetInitiator(Agent a, ACLMessage cfp, DataStore store)
Constructs aContractNetInitiatorbehaviour- Parameters:
a- The agent performing the protocolmsg- The message that must be used to initiate the protocol. Notice that the default implementation of theprepareCfpsmethod returns an array composed of that message only.s- TheDataStorethat will be used by thisContractNetInitiator
-
-
Method Detail
-
prepareInitiations
protected Vector prepareInitiations(ACLMessage initiation)
Specialize (if necessary) the initiation message for each receiver
-
sendInitiations
protected void sendInitiations(Vector initiations)
Create and initialize the Sessions and sends the initiation messages
-
checkInSequence
protected boolean checkInSequence(ACLMessage reply)
Check whether a reply is in-sequence and update the appropriate Session
-
checkSessions
protected int checkSessions(ACLMessage reply)
Check the status of the sessions after the reception of the last reply or the expiration of the timeout
-
getToBeReset
protected String[] getToBeReset()
Return the states that must be reset before they are visited again. Note that resetting a state before visiting it again is required only if - The onStart() method is redefined - The state has an "internal memory"
-
prepareCfps
protected Vector prepareCfps(ACLMessage cfp)
This method must return the vector of ACLMessage objects to be sent. It is called in the first state of this protocol. This default implementation just returns the ACLMessage object (a CFP) passed in the constructor. Programmers might prefer to override this method in order to return a vector of CFP objects for 1:N conversations or also to prepare the messages during the execution of the behaviour.- Parameters:
cfp- the ACLMessage object passed in the constructor- Returns:
- a Vector of ACLMessage objects. The value of the slot
reply-withis ignored and regenerated automatically by this class.
-
handlePropose
protected void handlePropose(ACLMessage propose, Vector acceptances)
This method is called every time aproposemessage 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.- Parameters:
propose- the received propose messageacceptances- the list of ACCEPT/REJECT_PROPOSAL to be sent back. This list can be filled step by step redefining this method, or it can be filled at once redefining the handleAllResponses method.
-
handleRefuse
protected void handleRefuse(ACLMessage refuse)
This method is called every time arefusemessage 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.- Parameters:
refuse- the received refuse message
-
handleInform
protected void handleInform(ACLMessage inform)
This method is called every time ainformmessage 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.- Parameters:
inform- the received inform message
-
handleAllResponses
protected void handleAllResponses(Vector responses, Vector acceptances)
This method is called when all the responses have been collected or when the timeout is expired. The used timeout is the minimum value of the slotreplyByof all the sent messages. By response message we intend here all thepropose, not-understood, refusereceived messages, which are not 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 by analysing all the messages in just one call.- Parameters:
responses- the Vector of ACLMessage objects that have been receivedacceptances- the list of ACCEPT/REJECT_PROPOSAL to be sent back. This list can be filled at once redefining this method, or step by step redefining the handlePropose method.
-
handleAllResultNotifications
protected void handleAllResultNotifications(Vector resultNotifications)
This method is called when all the result notification messages have been collected. By result notification message we intend here all theinform, failurereceived messages, which are not 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 by analysing all the messages in just one call.- Parameters:
resultNodifications- the Vector of ACLMessage object received
-
registerPrepareCfps
public void registerPrepareCfps(Behaviour b)
This method allows to register a user-definedBehaviourin the PREPARE_CFPS state. This behaviour would override the homonymous method. This method also set the data store of the registeredBehaviourto 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 theALL_CFPS_KEYkey.- Parameters:
b- the Behaviour that will handle this state
-
registerHandlePropose
public void registerHandlePropose(Behaviour b)
This method allows to register a user definedBehaviourin the HANDLE_PROPOSE state. This behaviour would override the homonymous method. This method also set the data store of the registeredBehaviourto the DataStore of this current behaviour. The registered behaviour can retrieve theproposeACLMessage object received from the datastore at theREPLY_KEYkey and theVectorof ACCEPT/REJECT_PROPOSAL to be sent back at theALL_ACCEPTANCES_KEY- Parameters:
b- the Behaviour that will handle this state
-
registerHandleRefuse
public void registerHandleRefuse(Behaviour b)
This method allows to register a user definedBehaviourin the HANDLE_REFUSE state. This behaviour would override the homonymous method. This method also set the data store of the registeredBehaviourto the DataStore of this current behaviour. The registered behaviour can retrieve therefuseACLMessage object received from the datastore at theREPLY_KEYkey.- Parameters:
b- the Behaviour that will handle this state
-
registerHandleInform
public void registerHandleInform(Behaviour b)
This method allows to register a user definedBehaviourin the HANDLE_INFORM state. This behaviour would override the homonymous method. This method also set the data store of the registeredBehaviourto the DataStore of this current behaviour. The registered behaviour can retrieve theinformACLMessage object received from the datastore at theREPLY_KEYkey.- Parameters:
b- the Behaviour that will handle this state
-
registerHandleAllResponses
public void registerHandleAllResponses(Behaviour b)
This method allows to register a user definedBehaviourin the HANDLE_ALL_RESPONSES state. This behaviour would override the homonymous method. This method also set the data store of the registeredBehaviourto the DataStore of this current behaviour. The registered behaviour can retrieve the vector of ACLMessage objects, received as a response, from the datastore at theALL_RESPONSES_KEYkey and theVectorof ACCEPT/REJECT_PROPOSAL to be sent back at theALL_ACCEPTANCES_KEY- Parameters:
b- the Behaviour that will handle this state
-
registerHandleAllResultNotifications
public void registerHandleAllResultNotifications(Behaviour b)
This method allows to register a user definedBehaviourin the HANDLE_ALL_RESULT_NOTIFICATIONS state. This behaviour would override the homonymous method. This method also set the data store of the registeredBehaviourto the DataStore of this current behaviour. The registered behaviour can retrieve the Vector of ACLMessage objects, received as a result notification, from the datastore at theALL_RESULT_NOTIFICATIONS_KEYkey.- Parameters:
b- the Behaviour that will handle this state
-
skipNextResponses
public void skipNextResponses()
This method can be called (typically within the handlePropose() method) to skip all responses that have not been received yet.
-
newIteration
public void newIteration(Vector nextMessages)
This method can be called (typically within the handleAllResponses() method) to activate a new iteration (this means we are implementing an Iterated-Contract-Net protocol).- Parameters:
nextMessages- The messages to be sent to responders at next iteration. Such messages can be CFPs (for responders actually involved in the next iteration) or REJECT_PROPOSALs (for responders no longer involved in the next iteration).- See Also:
SSIteratedContractNetResponder
-
moreAcceptances
public void moreAcceptances(Vector nextAcceptances)
This method can be called to send acceptances to responder agents that replied with PROPOSE not all together but in more tranches. This is useful, for instance, to send an ACCEPT_PROPOSAL to the best proposer immediately and the REJECT_PROPOSALs to the other proposers only after the reception of the final INFORM from the best proposer. To achieve that the first tranche of acceptances is managed normally. However by calling the moreAcceptances() method in one of the result notifications handler methods (i.e. handleInform(), handleFailure(), handleAllResultNotifications()) an additional tranche of acceptances is specified and the protocol goes on.- Parameters:
nextAcceptances- An additional tranche of acceptance messages
-
reinit
protected void reinit()
Re-initialize the internal state without performing a complete reset.
-
initializeDataStore
protected void initializeDataStore(ACLMessage msg)
Initialize the data store.
-
getSession
protected jade.proto.Initiator.ProtocolSession getSession(ACLMessage msg, int sessionIndex)
Return a ProtocolSession object to manage replies to a given initiation message
-
handleNotUnderstood
protected void handleNotUnderstood(ACLMessage notUnderstood)
This method is called every time anot-understoodmessage 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.- Parameters:
notUnderstood- the received not-understood message
-
handleFailure
protected void handleFailure(ACLMessage failure)
This method is called every time afailuremessage 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.- Parameters:
failure- the received failure message
-
handleOutOfSequence
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. This default implementation does nothing; programmers might wish to override the method in case they need to react to this event.- Parameters:
msg- the received message
-
registerPrepareInitiations
protected void registerPrepareInitiations(Behaviour b)
Attach a behaviour to thePrepare-initiationsprotocol state.- Parameters:
b- The behaviour object to be executed in thePrepare-initiationsstate.
-
registerHandleNotUnderstood
public void registerHandleNotUnderstood(Behaviour b)
This method allows to register a user definedBehaviourin the HANDLE_NOT_UNDERSTOOD state. This behaviour would override the homonymous method. This method also set the data store of the registeredBehaviourto the DataStore of this current behaviour. The registered behaviour can retrieve thenot-understoodACLMessage object received from the datastore at theREPLY_KEYkey.- Parameters:
b- the Behaviour that will handle this state
-
registerHandleFailure
public void registerHandleFailure(Behaviour b)
This method allows to register a user definedBehaviourin the HANDLE_FAILURE state. This behaviour would override the homonymous method. This method also set the data store of the registeredBehaviourto the DataStore of this current behaviour. The registered behaviour can retrieve thefailureACLMessage object received from the datastore at theREPLY_KEYkey.- Parameters:
b- the Behaviour that will handle this state
-
registerHandleOutOfSequence
public void registerHandleOutOfSequence(Behaviour b)
This method allows to register a user definedBehaviourin the HANDLE_OUT_OF_SEQ state. This behaviour would override the homonymous method. This method also set the data store of the registeredBehaviourto the DataStore of this current behaviour. The registered behaviour can retrieve theout of sequenceACLMessage object received from the datastore at theREPLY_KEYkey.- Parameters:
b- the Behaviour that will handle this state
-
reset
public void reset()
reset this behaviour by putting a null ACLMessage as message to be sent- Overrides:
resetin classFSMBehaviour
-
reset
public void reset(ACLMessage msg)
reset this behaviour- Parameters:
msg- is the ACLMessage to be sent
-
onStart
public void onStart()
Override the onStart() method to initialize the vectors that will keep all the replies in the data store.
-
setDataStore
public void setDataStore(DataStore ds)
Override the setDataStore() method to propagate this setting to all children.- Overrides:
setDataStorein classBehaviour- Parameters:
ds- theDataStorethat thisBehaviourwill use as its private data store
-
createConvId
protected String createConvId(Vector msgs)
Create a new conversation identifier to begin a new interaction.- Parameters:
msgs- A vector of ACL messages. If the first one has a non-empty:conversation-idslot, its value is used, else a new conversation identifier is generated.
-
adjustReplyTemplate
protected void adjustReplyTemplate(ACLMessage msg)
-
-