/* * Semestralny projekt, * Multiagentovy system JADE * subor: Zvedavec.java * autor: Patrik Bona * 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); } } }