package GameServerFacade.Interface;
import EnvironmentPluginAPI.Service.ICycleStatisticsSaver;
import GameServerFacade.Implementation.ServerFacade;
import GameStatistics.Implementation.CycleStatisticsComponent;
import NetworkAdapter.Implementation.ServerNetworkAdapterComponent;
import NetworkAdapter.Interface.IServerNetworkAdapter;
import PluginLoader.Implementation.EnvironmentPluginLoaderComponent;
import PluginLoader.Interface.IEnvironmentPluginLoader;
import ZeroTypes.RemoteInterface.ICycleStatistics;
import ServerRunner.Implementation.ServerRunnerComponent;
import ServerRunner.Interface.IServerRunner;
import org.picocontainer.DefaultPicoContainer;
import org.picocontainer.MutablePicoContainer;
import static org.picocontainer.Characteristics.CACHE;
/**
* Allows the retrieval of application core instances.
*/
public class ServerFacadeFactory {
private static IServerFacade serverFacade = null;
public static IServerFacade getProductiveApplicationCore() {
if(serverFacade != null) {
return serverFacade;
}
MutablePicoContainer container = new DefaultPicoContainer();
container.addComponent(container);
container.as(CACHE).addComponent(IEnvironmentPluginLoader.class, EnvironmentPluginLoaderComponent.class);
container.as(CACHE).addComponent(ICycleStatistics.class, CycleStatisticsComponent.class);
container.as(CACHE).addComponent(ICycleStatisticsSaver.class, CycleStatisticsComponent.class);
container.as(CACHE).addComponent(IServerRunner.class, ServerRunnerComponent.class);
container.as(CACHE).addComponent(IServerNetworkAdapter.class, ServerNetworkAdapterComponent.class);
container.as(CACHE).addComponent(IServerFacade.class, ServerFacade.class);
IServerFacade facade = container.getComponent(IServerFacade.class);
serverFacade = facade;
return facade;
}
}