package org.pokenet.server;
import org.pokenet.server.backend.MovementService;
import org.pokenet.server.backend.SpriteList;
import org.pokenet.server.backend.item.ItemDatabase;
import org.pokenet.server.battle.DataService;
import org.pokenet.server.feature.JythonService;
import org.pokenet.server.feature.TimeService;
import org.pokenet.server.network.IdleTimer;
import org.pokenet.server.network.NetworkService;
/**
* Handles all services on the game server
* @author shadowkanji
*
*/
public class ServiceManager {
private NetworkService m_networkService;
private MovementService m_movementService;
private DataService m_dataService;
private TimeService m_timeService;
private JythonService m_jythonService;
private IdleTimer m_idleTimer;
private SpriteList m_sprites;
private ItemDatabase m_itemdatabase;
/**
* Default constructor
*/
public ServiceManager() {
/*
* Initialize all the services
*/
m_jythonService = new JythonService();
m_timeService = new TimeService();
m_dataService = new DataService();
m_networkService = new NetworkService();
m_itemdatabase = new ItemDatabase();
m_movementService = new MovementService();
m_idleTimer = new IdleTimer();
m_sprites = new SpriteList();
}
/**
* Returns the data service (contains battle mechanics, polrdb, etc.)
* @return
*/
public DataService getDataService() {
return m_dataService;
}
/**
* Returns the movement service
* @return
*/
public MovementService getMovementService() {
return m_movementService;
}
/**
* Returns the network service
* @return
*/
public NetworkService getNetworkService() {
return m_networkService;
}
/**
* Returns the time service
* @return
*/
public TimeService getTimeService() {
return m_timeService;
}
/**
* Returns the jython service
* @return
*/
public JythonService getJythonService() {
return m_jythonService;
}
/**
* Returns the list of unbuyable sprites
* @return
*/
public SpriteList getSpriteList() {
return m_sprites;
}
/**
* Starts all services
*/
public void start() {
/*
* Start the network service first as it needs to bind the address/port to the game server.
* Then start all other services with TimeService last.
*/
m_sprites.initialise();
m_itemdatabase.initialise();
m_movementService.start();
m_networkService.start();
m_timeService.start();
m_idleTimer.start();
System.out.println("INFO: Service Manager startup completed.");
}
/**
* Stops all services
*/
public void stop() {
/*
* Stopping services is very delicate and must be done in the following order to avoid
* leaving player objects in a non-concurrent state.
*/
m_idleTimer.stop();
m_timeService.stop();
m_movementService.stop();
m_networkService.stop();
System.out.println("INFO: Service Manager stopped.");
}
public ItemDatabase getItemDatabase() {
return m_itemdatabase;
}
public void setItemDatabase(ItemDatabase mItemdatabase) {
m_itemdatabase = mItemdatabase;
}
}