[Jade] Lancement de deux plate-formes agent mobile
Bonjour,
Est-ce que c’est possible de lancer deux plates-formes distinctes ( Jade et Aglet) sur une seule machine ?
et comment faire la communication entre deux agents de deux plates-formes différentes ( Aglet et Jade) ?
j'ai essayé avec ce tuto ( pour Jade avec deux agents ) de Youghourta BENALI
Agent A
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
AgentA.java
import jade.core.AID;
import jade.core.Agent;
import jade.core.behaviours.FSMBehaviour;
import jade.core.behaviours.OneShotBehaviour;
import jade.lang.acl.ACLMessage;
public class AgentA extends Agent {
protected void setup(){
System.out.println("---------------------------------------");
System.out.println("----------------agent A----------------");
System.out.println("---------------------------------------");
FSMBehaviour agentA_beh= new FSMBehaviour();
agentA_beh.registerFirstState(new attendreAgentB(), "attendreAgentB");
agentA_beh.registerState(new envoiChiffre(), "envoiChiffre");
agentA_beh.registerLastState(new fin(), "fin");
agentA_beh.registerDefaultTransition("attendreAgentB", "envoiChiffre");
agentA_beh.registerTransition("envoiChiffre", "attendreAgentB",0);
agentA_beh.registerTransition("envoiChiffre", "fin", 1);
addBehaviour(agentA_beh);
}
private class attendreAgentB extends OneShotBehaviour{
@Override
public void action() {
System.out.println("en attente de l agent B");
block();
}
}
/*****************************************************************/
private class envoiChiffre extends OneShotBehaviour{
int valeurRetour = 0;
@Override
public void action() {
ACLMessage messageRecu = receive();
if (messageRecu.getContent().equalsIgnoreCase("pret") ) valeurRetour=0;
else valeurRetour=1;
int chiffre = (int)(Math.random()*10);
System.out.println("envoi de la valeur "+ chiffre);
ACLMessage message = new ACLMessage(ACLMessage.INFORM);
message.addReceiver(messageRecu.getSender());
message.setContent(chiffre+"");
send(message);
}
public int onEnd(){
return valeurRetour;
}
}
/*****************************************************************/
private class fin extends OneShotBehaviour{
@Override
public void action() {
System.out.println("arret de l'agent");
myAgent.doDelete();
}
}
} |
Agent B:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
import java.security.acl.Acl;
import jade.core.AID;
import jade.core.Agent;
import jade.core.behaviours.FSMBehaviour;
import jade.core.behaviours.OneShotBehaviour;
import jade.lang.acl.ACLMessage;
public class AgentB extends Agent {
int somme = 0;
boolean stop = false;
protected void setup(){
System.out.println("----------------agent B----------------");
FSMBehaviour agentB_beh= new FSMBehaviour();
agentB_beh.registerFirstState(new attendrechiffre(), "attendrechiffre");
agentB_beh.registerState(new afficher(), "afficher");
agentB_beh.registerState(new fin(), "fin");
agentB_beh.registerTransition("attendrechiffre", "afficher",0);
agentB_beh.registerTransition("attendrechiffre", "fin",1);
agentB_beh.registerDefaultTransition("afficher", "attendrechiffre");
addBehaviour(agentB_beh);
}
private class attendrechiffre extends OneShotBehaviour{
int valeurRetour = 0;
public void action() {
ACLMessage message = new ACLMessage(ACLMessage.INFORM);
message.addReceiver(new AID("AgentA", AID.ISLOCALNAME));
if(!stop){
message.setContent("pret");
send(message);
valeurRetour=0;
block();
}else{
message.setContent("arret");
send(message);
valeurRetour=1;
}
}
public int onEnd(){
return valeurRetour;
}
}
/**********************************************************************/
private class afficher extends OneShotBehaviour{
@Override
public void action() {
ACLMessage messageRecu = receive();
somme+= Integer.parseInt(messageRecu.getContent());
System.out.println("message recu= "+ messageRecu.getContent());
System.out.println("la somme actuelle = "+somme);
if (somme > 50) stop = true;
}
}
/**********************************************************************/
private class fin extends OneShotBehaviour{
@Override
public void action() {
System.out.println("fin de l'agent");
myAgent.doDelete();
}
}
} |
cordialement