Magentix2
2.1.1
|
Public Member Functions | |
FIPAQueryResponder (QueueAgent _agent, MessageTemplate _template) | |
QueueAgent | getQueueAgent () |
int | getState () |
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-Query interaction protocol, Role Responder.
Definition at line 13 of file FIPAQueryResponder.java.
es.upv.dsic.gti_ia.architecture.FIPAQueryResponder.FIPAQueryResponder | ( | QueueAgent | _agent, |
MessageTemplate | _template | ||
) |
Creates a new FIPA-Query interaction protocol, rol responder.
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 42 of file FIPAQueryResponder.java.
{ myAgent = _agent; template = _template; this.monitor = myAgent.addMonitor(this); }
Runs the state machine with the communication protocol
Definition at line 66 of file FIPAQueryResponder.java.
{ switch (state) { case WAITING_MSG_STATE: { ACLMessage request = myAgent.receiveACLMessage(template, 1); if (request != null) { this.requestmsg = request; state = PREPARE_RESPONSE_STATE; } else { monitor.waiting();//waiting to new messages arrive } break; } case PREPARE_RESPONSE_STATE: { 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: { 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)); if (response.getReceiver().port.indexOf(":") != -1) { port = response.getReceiver().port .substring(response.getReceiver().port .indexOf(":") + 1, response .getReceiver().port .indexOf("/", 10)); } else { port = response.getReceiver().port .substring(0, response .getReceiver().port .indexOf("/")); } 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: { 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: { 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; } } }
Returns the agent.
Definition at line 53 of file FIPAQueryResponder.java.
{ return this.myAgent; }
Definition at line 59 of file FIPAQueryResponder.java.
{
return this.state;
}
ACLMessage es.upv.dsic.gti_ia.architecture.FIPAQueryResponder.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 243 of file FIPAQueryResponder.java.
{
return null;
}
ACLMessage es.upv.dsic.gti_ia.architecture.FIPAQueryResponder.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 | request message |
responder | responder message |
FailureException |
Definition at line 258 of file FIPAQueryResponder.java.
{
return null;
}
Definition at line 24 of file FIPAQueryResponder.java.