MaDKit forum

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

You are not logged in.

#1 2010-07-27 17:24:34

Nav
Member
Registered: 2010-04-19
Posts: 2

handleMessage

Bonjour,
j'ai un petit problème dans mon programme plus particulièrement la fonction handleMessage .
je veux que si je clique sur le bouton send , l'agent duplique la fonction handleMessage aux autres agents.
mon prolème est qu'il me signale une variable m inconnu dans la fonction sendHelloToAll.
mon code est le suivant:


package madkit.Memoire;

import madkit.kernel.*;

public class Radio1 extends Agent {
String myCommunity="Memoire";
String myGroupe="myGroupe"; // change the group name to suit your needs
String myRole="myRole"; // change the role name to suit your needs
String Group="Group";
        String base="base";
boolean alive = true;

Radio1GUI gui;

public void initGUI() {
       gui = new Radio1GUI(this);
       this.setGUIObject(gui);
    }

public void activate(){
         println("Hello I'm an agent !");
         // create a distributed group
         int g = createGroup(true, myCommunity, myGroupe, null, null);
                int gr = createGroup(true, myCommunity, Group, null, null);
         if (g == 1)
                 println("I create the group "+myGroupe+" in community "+myCommunity);
         else if (g == -1)
                 println("The group has already been created");
         else
                 println("Cannot create the group");
               
         int r = requestRole(myCommunity, myGroupe, myRole,null);
                int rl = requestRole(myCommunity, Group, base,null);
         if (r == 1)
                 println("I play "+ myRole + " in " + myGroupe + " of " + myCommunity);
         else if (r == -1)
                 println("I cannot enter the group: access denied");
         else if (r == -2)
                 println("I already play the role "+myRole+" in " + myGroupe + " of " + myCommunity);
         else if (r == -3)
                 println("The group "+myGroupe+" does not exist int the community "+myCommunity);
         else if (r == -4)
                 println("The community "+myCommunity+" does not exist");
}

public void live()
{

println("I am alive...");
         broadcastMessage(myCommunity, Group, base, new StringMessage("Hello to all!"));
         while(alive){
                 this.exitImmediatlyOnKill(); //to be sure the agent thread can be really stopped
                 Message m = waitNextMessage();
                       if (m instanceof StringMessage)
                      handleMessage((StringMessage) m);
         }
}

void die(){
         sendMessage(getAddress(),new StringMessage("die"));
}

public         void handleMessage(StringMessage m){
         // You should describe here the agent's behavior
         // upon reception of a message
                 if (m.getString().equals("die"))
                         alive = false;
                 else
                         println("message: "+m.getString() + " : received from "+m.getSender());

}
 

    void sendHelloToAll(){
          AgentAddress[] agents = getAgentsWithRole(myCommunity, Group, base);
   // AgentAddress me = getAddress();
   // println(":: sending hello to "+(agents.length-1)+" agents");
    // for(int i=0;i<agents.length;i++){
      // if (agents[i] != me){
        //  sendMessage(agents[i],new StringMessage("Hello to to you!!"));

handleMessage((StringMessage) m);                               

        //}
     //}
    }



je sais que la variable m de la fonction sendHelloToAll est inconnu mais je c pas  comment la declarer pour que la fonction handleMessage marche.
merci

Offline

#2 2010-08-20 13:01:13

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

Re: handleMessage

je pense qu'il suffit de ne pas mettre d'appel à handleMessage dans le sendtoall : elle est déjà appelée dans le live

Offline

Board footer