package net.sourceforge.pain;
import net.sourceforge.pain.network.console.*;
import net.sourceforge.pain.data.*;
import net.sourceforge.pain.db.*;
import net.sourceforge.pain.logic.*;
import net.sourceforge.pain.plugin.*;
import net.sourceforge.pain.util.*;
import java.io.*;
import java.util.*;
public final class Core {
public static final String VERSION = "0.42";
public static final Map consoleByOwner = new HashMap();//warn:soft link to persistent objects
private static World world = null;
private static net.sourceforge.pain.Time time = new net.sourceforge.pain.Time();
private static ConsoleManager cm = null;
private static PluginManager plm = null;
private static PainDB db = null;
private static LogicLoadingManager logicManager = new LogicLoadingManager(getApplicationPath() + "/classes");
private Core() {
}
public static PainDB getDB() {
return db;
}
public static void setDB(PainDB db) {
if (Core.db != null) {
throw new RuntimeException("DB already inited!");
}
Core.db = db;
time.addListener(new WorldSaver());
}
public static World getWorld() {
return world;
}
protected static void setWorld(World world) {
Core.world = world;
}
protected static void setConsoleManager(ConsoleManager consoleManager) {
if (cm != null) {
throw new RuntimeException("console manager reassigning not supported");
}
cm = consoleManager;
cm.init();
time.addListener(cm);
}
public static ConsoleManager getConsoleManager() {
return cm;
}
public static net.sourceforge.pain.Time getTime() {
return time;
}
public static void processEvent(String eventClassSuffix, Object param) throws Exception {
Event e = (Event) logicManager.provideEventClass(eventClassSuffix).newInstance();
e.processEvent(param);
}
public static LogicLoadingManager getLogicLoader() {
return logicManager;
}
public static String getApplicationPath() {
String path = System.getProperty("net.sourceforge.pain.home");
if (path == null || path.length() == 0) {
throw new RuntimeException("'net.sourceforge.pain.home' is null");
}
return path;
}
public static byte[] getFileData(String name) throws IOException {
Log.debug("Loading file:" + name);
InputStream is = new FileInputStream(name);
try {
byte[] data = new byte[is.available()];
is.read(data);
return data;
} finally {
is.close();
}
}
public static PluginManager getPluginManager() {
return plm;
}
protected static void setPluginManager(PluginManager plm) {
Core.plm = plm;
}
public static void timeStopped() {
shutdown();
}
public static void shutdown() {
Log.debug("Flushing all data before exit!");
try {
db.flush();
} catch (Exception e) {
Log.error(e.getMessage(), e);
}
db.close();
Log.debug("Shutted down.");
System.exit(0);
}
public static Iterator getAllObjects(Class clazz) {
return db.getDbClass(clazz).extentIterator();
}
}