public class ContractNetResponder extends SSContractNetResponder
fipa-contract-net
Responder role. This behaviour implements the
fipa-contract-net
interaction protocol from the point
of view of a responder to a call for proposal (cfp
)
message.
The API of this class is similar and homogeneous to the
AchieveREResponder
.
Read also the introduction to ContractNetInitiator for a description of the protocol.
When a message arrives
that matches the message template passed to the constructor,
the callback method prepareResponse
is executed
that must return the wished response, for instance the PROPOSE
reply message. Any other type of returned communicative act
is sent and then closes the
protocol.
Then, if the initiator accepted the proposal, i.e. if
an ACCEPT-PROPOSAL
message was received, the callback
method prepareResultNotification
would be executed that
must return the message with the result notification, i.e.
INFORM
or FAILURE
.
In alternative, if the initiator rejected the proposal, i.e. if
an REJECT-PROPOSAL
message was received, the callback
method handleRejectProposal
would be executed and
the protocol terminated.
If a message were received, with the same value of this
conversation-id
, but that does not comply with the FIPA
protocol, than the method handleOutOfSequence
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 the DataStore
of the
Behaviour
as a shared memory mechanism with the
registered behaviour.
Read carefully the section of the JADE programmer's guide that describes the usage of this class.
ContractNetInitiator
,
AchieveREResponder
,
Serialized FormModifier and Type | Field and Description |
---|---|
java.lang.String |
INITIATION_KEY
Key to retrieve from the DataStore of the behaviour the initiation
ACLMessage that triggered this responder session
|
java.lang.String |
PROPOSE_ACCEPTANCE_KEY
Deprecated.
Use either
ACCEPT_PROPOSAL_KEY or
REJECT_PROPOSAL_KEY according to the message
that has been received |
static java.lang.String |
RECEIVE_CFP |
java.lang.String |
RECEIVED_KEY
Key to retrieve from the DataStore of the behaviour the last received
ACLMessage
|
java.lang.String |
REPLY_KEY
Key to set into the DataStore of the behaviour the new ACLMessage
to be sent back to the initiator as a reply.
|
java.lang.String |
RESPONSE_KEY
Deprecated.
Use
REPLY_KEY |
java.lang.String |
RESULT_NOTIFICATION_KEY
Deprecated.
Use
REPLY_KEY |
ACCEPT_PROPOSAL_KEY, CFP_KEY, HANDLE_ACCEPT_PROPOSAL, HANDLE_CFP, HANDLE_REJECT_PROPOSAL, PROPOSE_KEY, REJECT_PROPOSAL_KEY
currentName, lastStates
Constructor and Description |
---|
ContractNetResponder(Agent a,
MessageTemplate mt)
Constructor of the behaviour that creates a new empty DataStore
|
ContractNetResponder(Agent a,
MessageTemplate mt,
DataStore store)
Constructor of the behaviour.
|
Modifier and Type | Method and Description |
---|---|
static MessageTemplate |
createMessageTemplate(java.lang.String iprotocol)
This static method can be used
to set the proper message Template (based on the interaction protocol
and the performative) to be passed to the constructor of this behaviour.
|
protected void |
handleOutOfSequence(ACLMessage msg)
This method is called whenever a message is received that does
not comply to the protocol rules.
|
protected ACLMessage |
prepareResponse(ACLMessage cfp)
Deprecated.
Use
handleCfp() instead |
protected ACLMessage |
prepareResultNotification(ACLMessage cfp,
ACLMessage propose,
ACLMessage accept)
Deprecated.
Use
handleAcceptProposal() instead. |
void |
registerHandleOutOfSequence(Behaviour b)
This method allows to register a user defined
Behaviour
in the HANDLE_OUT_OF_SEQ state. |
void |
registerPrepareResponse(Behaviour b)
Deprecated.
Use
registerHandleCfp() instead. |
void |
registerPrepareResultNotification(Behaviour b)
Deprecated.
Use
registerHandleAcceptProposal() instead. |
void |
reset()
Reset this behaviour.
|
handleAcceptProposal, handleCfp, handleOutOfSequence, handleRejectProposal, registerHandleAcceptProposal, registerHandleCfp, registerHandleRejectProposal, reinit
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
action, done, resetChildren, setAgent
block, block, getAgent, getBehaviourName, getDataStore, getParent, isRunnable, onStart, restart, root, setBehaviourName, setDataStore
public final java.lang.String RESPONSE_KEY
REPLY_KEY
public final java.lang.String PROPOSE_ACCEPTANCE_KEY
ACCEPT_PROPOSAL_KEY
or
REJECT_PROPOSAL_KEY
according to the message
that has been receivedpublic final java.lang.String RESULT_NOTIFICATION_KEY
REPLY_KEY
public static final java.lang.String RECEIVE_CFP
public final java.lang.String INITIATION_KEY
public final java.lang.String RECEIVED_KEY
public final java.lang.String REPLY_KEY
public ContractNetResponder(Agent a, MessageTemplate mt)
public ContractNetResponder(Agent a, MessageTemplate mt, DataStore store)
a
- is the reference to the Agent objectmt
- is the MessageTemplate that must be used to match
the initiator message. Take care that
if mt is null every message is consumed by this protocol.
The best practice is to have a MessageTemplate that matches
the protocol slot; the static method createMessageTemplate
might be usefull.store
- the DataStore for this protocol behaviourprotected ACLMessage prepareResponse(ACLMessage cfp) throws NotUnderstoodException, RefuseException
handleCfp()
insteadprotected ACLMessage prepareResultNotification(ACLMessage cfp, ACLMessage propose, ACLMessage accept) throws FailureException
handleAcceptProposal()
instead.FailureException
public void registerPrepareResponse(Behaviour b)
registerHandleCfp()
instead.public void registerPrepareResultNotification(Behaviour b)
registerHandleAcceptProposal()
instead.public static MessageTemplate createMessageTemplate(java.lang.String iprotocol)
FIPANames.InteractionProtocol
protected void handleOutOfSequence(ACLMessage msg)
msg
- the received out-of-sequence message.public void registerHandleOutOfSequence(Behaviour b)
Behaviour
in the HANDLE_OUT_OF_SEQ state.
This behaviour would override the homonymous method.
This method also sets 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 RECEIVED_KEY
key.b
- the Behaviour that will handle this statepublic void reset()
reset
in class FSMBehaviour