package GameServerFacade.Implementation;
import EnvironmentPluginAPI.Exceptions.CorruptConfigurationFileException;
import EnvironmentPluginAPI.Exceptions.TechnicalException;
import EnvironmentPluginAPI.Contract.IEnvironmentPluginDescriptor;
import EnvironmentPluginAPI.Contract.TEnvironmentDescription;
import EnvironmentPluginAPI.Service.ICycleReplay;
import EnvironmentPluginAPI.Service.ICycleStatisticsSaver;
import EnvironmentPluginAPI.Service.IEnvironmentConfiguration;
import EnvironmentPluginAPI.TransportTypes.TMARLAClientInstance;
import ZeroTypes.Exceptions.GameReplayNotContainedInDatabaseException;
import GameServerFacade.Interface.IServerFacade;
import NetworkAdapter.Interface.Exceptions.ConnectionLostException;
import NetworkAdapter.Interface.IServerNetworkAdapter;
import PluginLoader.Interface.Exceptions.PluginNotReadableException;
import PluginLoader.Interface.IEnvironmentPluginLoader;
import ZeroTypes.RemoteInterface.ICycleStatistics;
import ServerRunner.Interface.IPlayerEventHandler;
import ServerRunner.Interface.IServerRunner;
import ServerRunner.Interface.SessionIsNotInReadyStateException;
import ZeroTypes.Settings.SettingException;
import ZeroTypes.TransportTypes.TCycleReplayDescription;
import ZeroTypes.TransportTypes.TNetworkClient;
import ZeroTypes.TransportTypes.TSession;
import java.rmi.RemoteException;
import java.util.Date;
import java.util.List;
import java.util.UUID;
/**
*
*/
public class ServerFacade implements IServerFacade {
private ICycleStatistics cycleStatistics;
private ICycleStatisticsSaver saveGameStatistics;
private IServerRunner serverRunner;
private IServerNetworkAdapter serverNetworkAdapter;
private IEnvironmentPluginDescriptor environmentPluginDescriptor;
private final IEnvironmentPluginLoader environmentPluginLoader;
public ServerFacade(ICycleStatistics cycleStatistics, ICycleStatisticsSaver saveGameStatistics,
IServerRunner serverRunner, IServerNetworkAdapter networkAdapter, IEnvironmentPluginLoader environmentPluginLoader) {
this.cycleStatistics = cycleStatistics;
this.saveGameStatistics = saveGameStatistics;
this.serverRunner = serverRunner;
this.serverNetworkAdapter = networkAdapter;
this.environmentPluginLoader = environmentPluginLoader;
}
@Override
public ICycleReplay getCycleReplay(UUID gameID, TEnvironmentDescription environmentDescription) throws GameReplayNotContainedInDatabaseException, RemoteException, TechnicalException {
return cycleStatistics.getCycleReplay(gameID, environmentDescription);
}
@Override
public float getWinLoseRatio(String player, String opponent, TEnvironmentDescription environment) throws RemoteException, TechnicalException {
return cycleStatistics.getWinLoseRatio(player, opponent, environment);
}
@Override
public List<TCycleReplayDescription> getCycleReplayDescriptionsByDeltaTime(Date startingTime, Date endingTime, TEnvironmentDescription environment) throws RemoteException, TechnicalException {
return cycleStatistics.getCycleReplayDescriptionsByDeltaTime(startingTime, endingTime, environment);
}
@Override
public float getCurrentGamesPerMinute(TEnvironmentDescription environment) throws RemoteException, TechnicalException {
return cycleStatistics.getCurrentGamesPerMinute(environment);
}
@Override
public List<String> getClientNames(TEnvironmentDescription environment) throws RemoteException {
return cycleStatistics.getClientNames(environment);
}
@Override
public int getTotalNumberOfCycles(String playerName, TEnvironmentDescription environment) throws RemoteException, TechnicalException {
return cycleStatistics.getTotalNumberOfCycles(playerName, environment);
}
@Override
public int getTotalNumberOfCyclesWon(String playerName, TEnvironmentDescription environment) throws RemoteException, TechnicalException {
return cycleStatistics.getTotalNumberOfCyclesLost(playerName, environment);
}
@Override
public int getTotalNumberOfCyclesLost(String playerName, TEnvironmentDescription environment) throws RemoteException, TechnicalException {
return cycleStatistics.getTotalNumberOfCyclesLost(playerName, environment);
}
@Override
public float getAverageTurnsPerCycle(String playerName, int numberOfLastGames, TEnvironmentDescription environment) throws RemoteException, TechnicalException {
return cycleStatistics.getAverageTurnsPerCycle(playerName, numberOfLastGames, environment);
}
@Override
public List<TCycleReplayDescription> getDescriptionsForNLastCycles(int numberOfGames, TEnvironmentDescription environment) throws RemoteException, TechnicalException {
return cycleStatistics.getDescriptionsForNLastCycles(numberOfGames, environment);
}
@Override
public UUID createSession(TSession session) throws TechnicalException, PluginNotReadableException {
return serverRunner.createSession(session);
}
@Override
public void updateSession(UUID id, TSession session) throws SessionIsNotInReadyStateException {
serverRunner.updateSession(id, session);
}
@Override
public TSession getSessionById(UUID id) {
return serverRunner.getSessionById(id);
}
@Override
public List<TSession> getAllSessions() {
return serverRunner.getAllSessions();
}
@Override
public void startAllReadySessions() {
serverRunner.startAllReadySessions();
}
@Override
public List<TNetworkClient> getFreeClients() {
return serverRunner.getFreeClients();
}
@Override
public void subscribeForPlayerEvent(IPlayerEventHandler playerEventHandler) {
serverRunner.subscribeForPlayerEvent(playerEventHandler);
}
@Override
public List<TMARLAClientInstance> getConnectedPlayers() {
return serverRunner.getConnectedPlayers();
}
@Override
public void startHosting() throws TechnicalException, ConnectionLostException {
serverNetworkAdapter.startHosting();
}
@Override
public void stopHosting() {
serverNetworkAdapter.stopHosting();
}
@Override
public void loadEnvironmentPlugin(TEnvironmentDescription environment) throws TechnicalException, PluginNotReadableException {
environmentPluginLoader.loadEnvironmentPlugin(environment);
}
@Override
public List<TEnvironmentDescription> listAvailableEnvironments() throws TechnicalException, PluginNotReadableException, SettingException {
return environmentPluginLoader.listAvailableEnvironments();
}
@Override
public void saveConfiguration(IEnvironmentConfiguration configuration, TEnvironmentDescription environment) throws TechnicalException, PluginNotReadableException {
environmentPluginLoader.saveConfiguration(configuration);
}
@Override
public List<IEnvironmentConfiguration> getAvailableConfigurations(TEnvironmentDescription environment) throws CorruptConfigurationFileException, TechnicalException, PluginNotReadableException {
return environmentPluginLoader.getAvailableConfigurations();
}
@Override
public void SaveReplay(ICycleReplay replay, TEnvironmentDescription environment) throws TechnicalException {
saveGameStatistics.SaveReplay(replay, environment);
}
}