160 likes | 289 Views
IA54 – Communication FIPA ACL. UTBM – A2011. Mickael ADELINE Kévin LE ROY Paul TALAGRAND. Plan :. Sujet et objectifs Résultats obtenus Architecture de la gestion des messages ACL Diagrammes UML Utilisation de la librairie Décodage & encodage des données
E N D
IA54 – Communication FIPA ACL UTBM – A2011 Mickael ADELINE Kévin LE ROY Paul TALAGRAND
Plan : • Sujet et objectifs • Résultatsobtenus • Architecture de la gestion des messages ACL • DiagrammesUML • Utilisation de la librairie • Décodage & encodage des données • Architecture des protocoles • Diagrammes UML • Protocole Request • Utilisation du Protocole Request • Protocole CNP • Utilisation du Protocole CNP • Conclusion & améliorationspossibles
Sujet et objectifs : • Fournir le support des messages ACL dans Janus • Permettre l’utilisation de protocoles d’interaction dans Janus • Développer une démo d’agents communicatifs
Résultatsobtenus : • Support des messages ACL dans Janus : • En accord avec les normes de la FIPA. • Se limite à la représentation en String. • Implémentations de protocoles d’intéraction : • Request Interaction Protocol • CNP : Contract Net Interaction protocol • Démos d’agents communicatifs : • Démo 1 : simple usage des messages ACL • Démo 2 : communication de 2 agents via le Protocole Request • Démo 3 : communication de 3 agents via CNP
Architecture de la librairie ACL : • Structure d’un ACL Message :
Architecture de la librairie ACL : • ACL Agent gérant les messages ACL :
Architecture de la librairie ACL : • Utilisation de la librairie (Démo 1) : • Côté « Sender » : • ACLMessage message = new ACLMessage(“Hey!”, Performative.PROPOSE); • sendACLMessage(message, agentAddressReceiver); • Côté « Receiver » : • ACLMessageaMsg = getACLMessage();
Architecture de la librairie ACL : • Envoi d’un ACL Message :
Architecture de la librairie ACL : • Réception d’un ACL Message :
Architecture des protocoles: • Utilisation des protocoles : • protocolManager = new FipaConversationManager(this); • AbstractFipaProtocol protocol = protocolManager.createConversation(EnumFipaProtocol.FIPA_REQUEST, "First request protocol"); • Côtéinitiateur :protocol.initiate(getAddress(), participant); • Côté participant : protocol.initiateAsParticipant();
Request Interaction Protocol : • Rôle REQUESTER : • case SENDING_REQUEST: • requestProtocol.request( "friend" ); • case WAITING_ANSWER: • answer = requestProtocol.getAnswer(); • if (answer.getPerformative().compareTo(Performative.REFUSE) == 0) • return State.REFUSED; • Else • return State.WAITING_RESULT; • case WAITING_RESULT: • result = requestProtocol.getResult(); • case DONE: • leaveMe();
Request Interaction Protocol : • Rôle ANSWERER: • case WAITING_REQUEST: • request = requestProtocol.getRequest(); • case SENDING_ANSWER: • if( request.getContent().toString().equalsIgnoreCase("friend") ) • requestProtocol.agree("yeah!"); • return State.SENDING_RESULT; • else • requestProtocol.refuse("no"); • return State.DONE; • case SENDING_RESULT: • requestProtocol.informDone("Let's meet!"); • return State.DONE; • case DONE: • leaveMe();
Contract Net Protocol : • Rôle REQUESTER : • case SENDING_CALL_FOR_PROPOSAL: • contractNetProtocol.callForProposal("I wanna..."); • case WAITING_ALL_PROPOSALS: • proposals = contractNetProtocol.getAllProposals(); • contractNetProtocol.acceptProposals(selectedParticipants, "thanks"); • case WAITING_ALL_RESULTS: • results = contractNetProtocol.getResults(); • return State.DONE; • case DONE: • leaveMe();
Contract Net Protocol : • Rôle ANSWERER : • case WAITING_CALL_FOR_PROPOSAL: • callForProposal = contractNetProtocol.getCallForProposal(); • case SENDING_PROPOSAL: • if( callForProposal.getContent().toString().equalsIgnoreCase("Iwanna...") ) • contractNetProtocol.propose("120"); • Else • contractNetProtocol.refuse("not interested"); • case WAITING_PROPOSAL_ANSWER: • ProtocolResultresult = contractNetProtocol.getAnswerToCallForProposal(); • if (result.getPerformative().compareTo(Performative.ACCEPT_PROPOSAL) == 0) • return State.SENDING_RESULT; • else if (result.getPerformative().compareTo(Performative.REJECT_PROPOSAL) == 0) • return State.REJECTED; • case SENDING_RESULT: • contractNetProtocol.informResult("taskcompleted"); • case REJECTED: • leaveMe(); • case DONE: • leaveMe();
Conclusion & améliorationspossibles: • Objectifsatteints. • Retouches àeffectuer, maisl’essentiel des fonctionnalitésontétédéveloppées. • Améliorationspossibles : • Gérer l’encodage/décodage en BitEfficient et en XML. • Certains attributs des messages ACL ne sont pas exploités : • Reply-by, In-reply-to, Reply-with, Reply-to. • Certaines méthodes de la classe ACLAgent devraient être en protected et non pas en public.