Magentix2  2.1.1
es.upv.dsic.gti_ia.architecture.FIPAQueryResponder Class Reference
Collaboration diagram for es.upv.dsic.gti_ia.architecture.FIPAQueryResponder:

List of all members.

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

Detailed Description

This class implements the FIPA-Query interaction protocol, Role Responder.

Author:
Joan Bellver Faus, GTI-IA, DSIC, UPV
David Fernández Molina, GTI-IA, DSIC, UPV
Version:
2009.9.07

Definition at line 13 of file FIPAQueryResponder.java.


Constructor & Destructor Documentation

Creates a new FIPA-Query interaction protocol, rol responder.

Parameters:
agentis the reference to the Agent Object
templateis 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);

        }

Member Function Documentation

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.

Returns:
QueueAgent

Definition at line 53 of file FIPAQueryResponder.java.

         {
                return this.myAgent; 
                 
         }

Definition at line 59 of file FIPAQueryResponder.java.

                               {
                return this.state;
        }

This method is called when the initiator's message is received that matches the message template passed in the constructor.

Parameters:
requestinitial message
Returns:
message
Exceptions:
NotUnderstoodException
RefuseException

Definition at line 243 of file FIPAQueryResponder.java.

                                                                       {
                return null;
        }

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.

Parameters:
requestrequest message
responderresponder message
Returns:
message
Exceptions:
FailureException

Definition at line 258 of file FIPAQueryResponder.java.

                                                                      {
                return null;
        }

Member Data Documentation


The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables