package eis.examples.distributed;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import eis.exceptions.ActException;
import eis.exceptions.AgentException;
import eis.exceptions.EntityException;
import eis.exceptions.ManagementException;
import eis.exceptions.NoEnvironmentException;
import eis.exceptions.RelationException;
import eis.iilang.Action;
import eis.iilang.EnvironmentCommand;
import eis.iilang.Function;
import eis.iilang.Identifier;
import eis.iilang.Numeral;
import eis.iilang.Parameter;
import eis.rmi.EIClientDefaultImpl;
import eis.rmi.EIServerRemote;
public class Client extends EIClientDefaultImpl implements Runnable {
public boolean running = true;
public Client() {
super("EIServer");
new Thread(this).start();
debugPrintln("Client started");
}
@Override
public void run() {
try {
this.registerAgent("agent1");
this.registerAgent("agent2");
debugPrintln("Agents: " + this.getAgents());
debugPrintln("Entities: " + this.getEntities());
debugPrintln("Free entities: " + this.getFreeEntities());
debugPrintln("");
this.associateEntity("agent1", "entity1");
this.associateEntity("agent2", "entity2");
debugPrintln("Free entities: " + this.getFreeEntities());
debugPrintln("Associated entities (agent1): " + this.getAssociatedEntities("agent1"));
debugPrintln("Associated entities (agent2): " + this.getAssociatedEntities("agent2"));
debugPrintln("Associated agents (entity1): " + this.getAssociatedAgents("entity1"));
debugPrintln("Associated agents (entity2): " + this.getAssociatedAgents("entity2"));
debugPrintln("");
this.freePair("agent1", "entity1");
this.associateEntity("agent2", "entity1");
debugPrintln("Free entities: " + this.getFreeEntities());
debugPrintln("Associated entities (agent1): " + this.getAssociatedEntities("agent1"));
debugPrintln("Associated entities (agent2): " + this.getAssociatedEntities("agent2"));
debugPrintln("");
this.freeAgent("agent2");
debugPrintln("Free entities: " + this.getFreeEntities());
debugPrintln("Associated entities (agent1): " + this.getAssociatedEntities("agent1"));
debugPrintln("Associated entities (agent2): " + this.getAssociatedEntities("agent2"));
debugPrintln("");
this.associateEntity("agent1", "entity1");
this.associateEntity("agent1", "entity2");
debugPrintln("Free entities: " + this.getFreeEntities());
debugPrintln("Associated entities (agent1): " + this.getAssociatedEntities("agent1"));
debugPrintln("Associated entities (agent2): " + this.getAssociatedEntities("agent2"));
debugPrintln("");
this.freeEntity("entity1");
debugPrintln("Free entities: " + this.getFreeEntities());
debugPrintln("Associated entities (agent1): " + this.getAssociatedEntities("agent1"));
debugPrintln("Associated entities (agent2): " + this.getAssociatedEntities("agent2"));
debugPrintln("");
debugPrintln("Type (entity1): " + this.getType("entity1"));
debugPrintln("Type (entity2): " + this.getType("entity2"));
debugPrintln("");
debugPrintln("Action result: " + this.performAction("agent1", new Action("shout", new Identifier("can you hear me?"))));
debugPrintln("");
debugPrintln("Action result: " + this.performAction("agent1", new Action("callMeBack")));
debugPrintln("");
this.manageEnvironment(
new EnvironmentCommand(
EnvironmentCommand.INIT,
(Parameter)new Function("gridWidth", new Numeral(10)),
(Parameter)new Function("gridHeight", new Numeral(10)),
(Parameter)new Function("entities", new Numeral(4))
)
);
} catch (AgentException e) {
e.printStackTrace();
} catch (RelationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (EntityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ActException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoEnvironmentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ManagementException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
while( running = true ) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
}
@Override
public EIServerRemote instantiateServer() {
return new Server();
}
public static void main(String[] args) {
new Client();
}
@Override
public String requiredVersion() {
return "0.2";
}
}