/*
* Semestralny projekt,
* Multiagentovy system JADE
* subor: Zvedavec.java
* autor: Patrik Bona <bona@intrak.sk>
* zadavatel: Ing. Marek Paralic, PhD.
* sk. rok: 2003/2004
* posledna zmena: 12. 1. 2004
*/
package pocasie;
import jade.core.Agent;
import jade.core.behaviours.*;
import jade.lang.acl.ACLMessage;
import jade.domain.FIPAException;
import jade.domain.DFService;
import jade.domain.FIPAAgentManagement.*;
import jade.core.AID;
import java.util.Vector;
import java.lang.String;
/**Trieda implementje agenta Zvedavec */
public class Zvedavec extends Agent {
/** metoda sluzi na inicializaciu agenta */
protected void setup() {
System.out.println("Hello World! I am " +getAID().getName());
// pridame spravanie na zistenie stavu pocasia
addBehaviour(new ZistenieStavuPocasia());
// a zaistime nech je spravanie ZistenieStavuPocasia
// spustene kazdych 60 sekund
addBehaviour(new TickerBehaviour(this, 60000) {
protected void onTick() {
myAgent.addBehaviour(new ZistenieStavuPocasia());
}
} );
}
/** metoda sa vola pri ukoncovani zivotu agenta */
protected void takeDown() {
System.out.println(getAID().getName() + " terminated.");
}
/** trieda implentuje trojkrokove spravanie
* zaistujuce zistovanie stavu pocasia */
private class ZistenieStavuPocasia extends Behaviour {
private int krok = 0;
/** pocet najdenych meteorologov */
private int mcnt;
private int count = 0;
private Vector v = new Vector();
public void action() {
switch(krok) {
// v prvom kroku najdeme agentov meteorologov
// a posleme im poziadavku na informaciu
// o stave pocasia
case 0:
DFAgentDescription template = new DFAgentDescription();
ServiceDescription sd = new ServiceDescription();
sd.setType("stav-pocasia");
template.addServices(sd);
try {
DFAgentDescription[] result = DFService.search(myAgent, template);
ACLMessage msg = new ACLMessage(ACLMessage.REQUEST);
if(result.length == 0) {
System.out.println("Nenasiel som ziadneho meteorologa !");
krok = 3;
break;
}
for(int i = 0; i < result.length; i++) {
msg.addReceiver(result[i].getName());
}
mcnt = result.length;
// kedze obidva agenty su zjednodusene priklady pouzitia
// systemu JADE, tak budeme nastavovat len obsah spravy,
// teda nenastavime komunikacny jazyk, ontologiu...
msg.setContent("pocasie");
send(msg);
} catch(FIPAException fe) {
fe.printStackTrace();
}
krok = 1;
break;
// v druhom kroku spracujeme odpovede, ktore prisli
// a pridame ich do vectoru v
case 1:
ACLMessage msg = receive();
if(msg != null) {
if(msg.getPerformative() != ACLMessage.REFUSE) {
v.add(msg.getContent());
}
count++;
} else { // ak sme neprijali spravu
// tak zablokujeme spravanie
// do prichodu dalsej spravy
block();
}
if(mcnt == count ) {
krok = 2;
}
break;
// v tretom kroku do konzoly vypiseme
// informacie a aktualnom stave pocasia
case 2:
System.out.println("Aktualne pocasie (" + getAID().getName() + ")");
//System.out.println(v.toString());
String pom = "";
for(int i = 0; i < v.size(); i++) {
System.out.println(v.get(i));
pom = pom + v.get(i);
}
System.out.println("-----------------");
krok = 3;
}
}
// ak sa skoncil treti krok
// tak spravanie je ukoncene
public boolean done() {
return(krok == 3);
}
}
}
syntax highlighted by Code2HTML, v. 0.9.1