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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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