package eis.rmi;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.HashSet;
import java.util.LinkedList;
import eis.AgentListener;
import eis.EnvironmentListener;
import eis.exceptions.ActException;
import eis.exceptions.AgentException;
import eis.exceptions.EntityException;
import eis.exceptions.ManagementException;
import eis.exceptions.NoEnvironmentException;
import eis.exceptions.PerceiveException;
import eis.exceptions.RelationException;
import eis.iilang.Action;
import eis.iilang.EnvironmentCommand;
import eis.iilang.Percept;
public interface EIServerRemote extends Remote {
void registerAgent(String agent) throws AgentException,RemoteException;
void unregisterAgent(String agent) throws AgentException,RemoteException;
LinkedList<String> getAgents() throws RemoteException,RemoteException;
LinkedList<String> getEntities() throws RemoteException,RemoteException;
void associateEntity(String agent, String entity) throws RelationException,RemoteException;
void freeEntity(String entity) throws RelationException,RemoteException;
void freeAgent(String agent) throws RelationException,RemoteException;
void freePair(String agent, String entity) throws RelationException,RemoteException;
HashSet<String> getAssociatedEntities(String agent) throws AgentException,RemoteException;
HashSet<String> getAssociatedAgents(String entity) throws EntityException,RemoteException;
LinkedList<String> getFreeEntities() throws RemoteException;
LinkedList<Percept> performAction(String agent, Action action,
String... entities) throws ActException, NoEnvironmentException,RemoteException;
LinkedList<Percept> getAllPercepts(String agent, String... entities)
throws PerceiveException, NoEnvironmentException,RemoteException;
void manageEnvironment(EnvironmentCommand command)
throws ManagementException, NoEnvironmentException,RemoteException;
void release() throws RemoteException;
boolean isConnected() throws RemoteException;
String getType(String entity) throws EntityException,RemoteException;
void attachClientListener(EIClientRemote client) throws RemoteException;
void detachClientListener(EIClientRemote client) throws RemoteException;
}