MaDKit forum

Welcome All !
Please, use explicit topic names when creating new threads. Thanks.

You are not logged in.

#1 2013-07-08 15:23:04

hiba
Member
Registered: 2013-04-05
Posts: 15

Echange de messages entre deux agents

Bonjour,
Je suis entrain de faire communiquer deux agents via ce scénario :
-L'agent A va demander le prix d'un article au prés de l'agent B (le 1er message)
-L'agent B va envoyer ce prix là stocké dans un fichier excel à l'agent A
-L'agent A va envoyer un 2ème message à l'agent B ( le deuxiéme message)
-L'agent B doit enregistrer les données que contient le deuxième message reçu de l'agent A.
Le problème c'est que chacun de ces messages reçus par l'agent B nécessite un traitement spécifique,je sais pas qu'est ce que je dois écrire au niveau de handleMessage.
Ci-dessous vous trouverez le code du handle de l'agent B:
void handleMessage(StringMessage m)

{

println("message: " + m.getString() + " from " + m.getSender());


Reply(m); // réponse pour le premier message//
Read(m); // traitement du deuxième message//

}
Je sais pas qu'est ce je dois définir exactement au niveau du handle pour assurer le bon traitement des messages sachant que l'interface de l'agent B disparaît ( l'agent se tue) dès que je lance la simulation.

Offline

#2 2013-07-08 18:56:44

fmichel
Administrator
From: Montpellier
Registered: 2009-03-24
Posts: 176
Website

Re: Echange de messages entre deux agents

Bonjour,

Difficile à dire, il faudrait plus de code pour voir ce qui peut clocher, n'hésitez pas à en poster plus.

Offline

#3 2013-07-09 15:04:33

hiba
Member
Registered: 2013-04-05
Posts: 15

Re: Echange de messages entre deux agents

Est-ce qu'il y a une méthode qui permet de traiter tous les messages reçus ,et non seulement le dernier message?
une boucle ou une méthode qui permet de parcourir la boîte de message de l'agent?

Offline

#4 2013-07-10 10:46:58

fmichel
Administrator
From: Montpellier
Registered: 2009-03-24
Posts: 176
Website

Re: Echange de messages entre deux agents

pas de méthode spécifique car il existe des centaines de manières de le faire.
Vous pouvez par exemple faire quelque chose comme cela :

Message m = nextMessage();
while(m != null){
   doSomeWorkOnMessage(m);
   m = nextMessage();
}

Cela va appliquer le traitement doSomeWorkOnMessage sur tous les messages présents dans la boîte aux lettres jusqu'à ce qu'elle soit vide.

Offline

#5 2013-07-10 16:49:26

hiba
Member
Registered: 2013-04-05
Posts: 15

Re: Echange de messages entre deux agents

Bonjour ,
j'ai fait ce que vous m'avez dit mais cette fois-ci ,l'interface de l'agent n'affiche qu'un seul message ce qui n'était pas le cas avant d'introduire le nextMessage() . Mise à part le fichier de stockage(excel) qui ne s'ouvre plus (il m'affichait un message d'erreur disant que ce fichier est peut être endommagé ou son extension n'est plus la même d'ou c'est impossible de l'ouvrir).
Sachant que je suis entrain de créer  une copie 'Copy' sur le fichier dejà crée 'workbook' pour que je puisse le modifier par la suite et ajouter de nouvelles cellules.
Voilà le code de la fonction :


void Read(StringMessage m)
{

   
WritableWorkbook copy=null ;
try {



        try
//           
     Workbook workbook= Workbook.getWorkbook(new File("C:\\madkit4.2.0\\CarnetOrdres.xls"));
Sheet sheet = workbook.getSheet(0);

        copy = Workbook.createWorkbook(new File("C:\\madkit4.2.0\\Copy.xls"), workbook);
WritableSheet sheet4 = copy.getSheet(0);
String IdInvest= (m.getSender().toString());

String Prix =m.getString(); 

Label label = new Label(0,0, "Prix");
sheet4.addCell(label);
Label id = new Label(1, 1, "IDinvest");
sheet4.addCell(id);

while(m!=null)
{

for(int j=0; j < 20; j++){

Label label2 = new Label(0,j,Prix);
sheet4.addCell(label2);
Label address = new Label(1, j,IdInvest);
sheet4.addCell(address);
       






}


}






copy.write();


m = (StringMessage)nextMessage();






}







/* On ecrit le classeur */
catch (IOException e) {
        e.printStackTrace();
    }
catch (BiffException e) {
     e.printStackTrace();
   }
catch (WriteException e) {
e.printStackTrace();
}


}

Offline

#6 2013-07-10 17:42:17

hiba
Member
Registered: 2013-04-05
Posts: 15

Re: Echange de messages entre deux agents

Le problème d'ouverture de fichier est résolu mais ce dernier affiche toujours un seul message et non pas la totalité des messages reçus.
Help please

Last edited by hiba (2013-07-10 18:03:31)

Offline

#7 2013-07-10 18:01:46

hiba
Member
Registered: 2013-04-05
Posts: 15

Re: Echange de messages entre deux agents

Est-ce qu'il y a une autre méthode permettant le parcours de la messagerie à pars nextMessage() parce que celle-là me retourne toujours un seul message!!
Le fichier excel stocke le même message plusieurs fois donc ça se voit qu'il fait pas le parcours de toute la boîte.
Merci pour votre aide.

Offline

#8 2013-07-11 12:57:14

fmichel
Administrator
From: Montpellier
Registered: 2009-03-24
Posts: 176
Website

Re: Echange de messages entre deux agents

Bonjour,

nextMessage renvoie toujours un seul message (qui est enlevé de la boîte et qu n'est donc jamais le même), c'est normal puisque c'est la spécification de cette méthode, d'où la boucle pour parcourir tous les messages jusqu'à ce qu'il n'y en ait plus.
Je vous conseille de faire un test uniquement sur la boucle, en dehors de votre projet, afin de bien maîtriser son fonctionnement. Peut être que votre problème provient du fait que l'expéditeur envoie toujours le même message par exemple.

Offline

#9 2013-07-12 17:32:20

hiba
Member
Registered: 2013-04-05
Posts: 15

Re: Echange de messages entre deux agents

Bonjour ,

En fait l'interface de l'agent récepteur affiche tous les messages reçus suivis des adresses de tous les  émetteurs mais le fichier excel stocke uniquement le dernier message et l'adresse de son émetteur  20 fois.!!!

Offline

Board footer