Magentix2
2.1.1
|
Public Member Functions | |
FIPARequestResponder (QueueAgent _agent, MessageTemplate _template) | |
int | getState () |
QueueAgent | getQueueAgent () |
void | finish () |
void | action () |
Public Attributes | |
QueueAgent | myAgent |
Protected Member Functions | |
ACLMessage | prepareResponse (ACLMessage request) throws NotUnderstoodException, RefuseException |
ACLMessage | prepareResultNotification (ACLMessage request, ACLMessage responder) throws FailureException |
This class implements the FIPA-Request interaction protocol, Role Responder.
Definition at line 14 of file FIPARequestResponder.java.
es.upv.dsic.gti_ia.architecture.FIPARequestResponder.FIPARequestResponder | ( | QueueAgent | _agent, |
MessageTemplate | _template | ||
) |
Creates a new FIPA-Request interaction protocol, Role responder.
agent | agent is the reference to the Agent Object. |
template | is a MessageTemplate, will serve as a filter for receiving the right message |
Definition at line 46 of file FIPARequestResponder.java.
{ myAgent = _agent; template = _template; this.monitor = myAgent.addMonitor(this); }
Runs the state machine with the communication protocol
Definition at line 86 of file FIPARequestResponder.java.
{ switch (state) { case WAITING_MSG_STATE: { ACLMessage request = myAgent.receiveACLMessage(template, 1); if (request != null) { this.requestmsg = request; state = PREPARE_RESPONSE_STATE; //Configure the cancel template template_cancel = new MessageTemplate( InteractionProtocol.FIPA_REQUEST); template_cancel.addConversation(request.getConversationId()); template_cancel.add_receiver(request.getReceiver()); template_cancel.setPerformative(ACLMessage.CANCEL); } else { monitor.waiting();// waiting a message. } break; } case PREPARE_RESPONSE_STATE: { send_cancel = myAgent.receiveACLMessage(template_cancel, 0); if (send_cancel != null) { if (send_cancel.getPerformativeInt() == ACLMessage.CANCEL) this.state = FINISH_STATE; } else { ACLMessage request = this.requestmsg; ACLMessage response = null; state = SEND_RESPONSE_STATE; try { response = prepareResponse(request); } catch (NotUnderstoodException nue) { response = request.createReply(); response.setContent(nue.getMessage()); response.setPerformative(ACLMessage.NOT_UNDERSTOOD); } catch (RefuseException re) { response = request.createReply(); response.setContent(re.getMessage()); response.setPerformative(ACLMessage.REFUSE); } this.responsemsg = response; } break; } case SEND_RESPONSE_STATE: { send_cancel = myAgent.receiveACLMessage(template_cancel, 0); if (send_cancel != null) { if (send_cancel.getPerformativeInt() == ACLMessage.CANCEL) this.state = FINISH_STATE; } else { ACLMessage response = this.responsemsg; if (response != null) { ACLMessage receivedMsg = this.requestmsg; response = arrangeMessage(receivedMsg, response); response.setSender(myAgent.getAid()); //If the message is for a Jade agent if (response.getReceiver() != null) { if (response.getReceiver(0).protocol.equals("http")) { name = response.getReceiver().name_all().substring( 0, response.getReceiver().name_all().indexOf( "@", response.getReceiver().name_all() .indexOf("@") + 1)); port = response.getReceiver().port; response.getReceiver().name = name; response.getReceiver().port = port; } } myAgent.send(response); if (response.getPerformativeInt() == ACLMessage.AGREE) state = PREPARE_RES_NOT_STATE; else { state = RESET_STATE; } } else { state = PREPARE_RES_NOT_STATE; } } break; } case PREPARE_RES_NOT_STATE: { send_cancel = myAgent.receiveACLMessage(template_cancel, 0); if (send_cancel != null) { if (send_cancel.getPerformativeInt() == ACLMessage.CANCEL) this.state = FINISH_STATE; } else { state = SEND_RESULT_NOTIFICATION_STATE; ACLMessage request = this.requestmsg; ACLMessage response = this.responsemsg; ACLMessage resNotification = null; try { resNotification = prepareResultNotification(request, response); } catch (FailureException fe) { resNotification = request.createReply(); resNotification.setContent(fe.getMessage()); resNotification.setPerformative(ACLMessage.FAILURE); } this.resNofificationmsg = resNotification; } break; } case SEND_RESULT_NOTIFICATION_STATE: { send_cancel = myAgent.receiveACLMessage(template_cancel, 0); if (send_cancel != null) { if (send_cancel.getPerformativeInt() == ACLMessage.CANCEL) this.state = FINISH_STATE; } else { state = RESET_STATE; ACLMessage resNotification = this.resNofificationmsg; if (resNotification != null) { ACLMessage receiveMsg = arrangeMessage(this.requestmsg, resNotification); receiveMsg.setSender(myAgent.getAid()); if (receiveMsg.getReceiver() != null) { if (receiveMsg.getReceiver(0).protocol.equals("http")) { receiveMsg.getReceiver().name = name; receiveMsg.getReceiver().port = port; } } myAgent.send(receiveMsg); } break; } } case RESET_STATE: { state = WAITING_MSG_STATE; this.requestmsg = null; this.resNofificationmsg = null; this.responsemsg = null; break; } } }
Sends a CANCEL Message for active conversation and terminates the protocol
Definition at line 70 of file FIPARequestResponder.java.
{ // Send a CANCEL Message for active conversation if (this.requestmsg != null) { arrangeMessage(this.requestmsg, send_cancel); this.send_cancel.setPerformative(ACLMessage.CANCEL); this.myAgent.send(send_cancel); } this.monitor.advise(); this.state = FINISH_STATE; }
Returns the agent.
Definition at line 61 of file FIPARequestResponder.java.
{ return this.myAgent; }
Definition at line 52 of file FIPARequestResponder.java.
{
return this.state;
}
ACLMessage es.upv.dsic.gti_ia.architecture.FIPARequestResponder.prepareResponse | ( | ACLMessage | request | ) | throws NotUnderstoodException, RefuseException [protected] |
This method is called when the initiator's message is received that matches the message template passed in the constructor.
request | initial message |
NotUnderstoodException | |
RefuseException |
Definition at line 277 of file FIPARequestResponder.java.
{
return null;
}
ACLMessage es.upv.dsic.gti_ia.architecture.FIPARequestResponder.prepareResultNotification | ( | ACLMessage | request, |
ACLMessage | responder | ||
) | throws FailureException [protected] |
This method is called after the response has been sent and only when one of the following two cases arise: the response was an agree message OR no response message was sent.
request | ACLMessage |
responder | ACLMessage |
FailureException |
Definition at line 294 of file FIPARequestResponder.java.
{
return null;
}
Definition at line 32 of file FIPARequestResponder.java.