mirror of
https://github.com/ProjectSWGCore/Holocore.git
synced 2026-10-11 01:13:02 -04:00
Created the RelationalServerFactory, which is the SDB equivalent to ServerFactory
This commit is contained in:
@@ -58,8 +58,8 @@ public class RelationalServerData extends RelationalDatabase {
|
||||
insertTableMetadata = prepareStatement("INSERT INTO "+META_TABLE+" (table_name, last_imported) VALUES (?, ?)");
|
||||
}
|
||||
|
||||
public boolean linkTableWithSdb(String table, String sdbPath) {
|
||||
File sdb = new File(sdbPath);
|
||||
public boolean linkTableWithSdb(String table, String filepath) {
|
||||
File sdb = new File(filepath);
|
||||
if (!sdb.isFile())
|
||||
return false;
|
||||
long sdbModified = sdb.lastModified();
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
package resources.server_info;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class RelationalServerFactory {
|
||||
|
||||
private static final RelationalServerFactory INSTANCE = new RelationalServerFactory();
|
||||
private static final String BASE_PATH = "serverdata/";
|
||||
private static final Map <String, Object> FILE_LOAD_LOCKING = new HashMap<>();
|
||||
|
||||
public static RelationalServerData getServerData(String file, String ... tables) {
|
||||
return INSTANCE.getData(file, tables);
|
||||
}
|
||||
|
||||
private RelationalServerData getData(String file, String ... tables) {
|
||||
final Object lock = getFileLocking(file);
|
||||
synchronized (lock) {
|
||||
File f = new File(BASE_PATH + file);
|
||||
File parent = f.getParentFile();
|
||||
RelationalServerData data = new RelationalServerData(BASE_PATH + file);
|
||||
for (String table : tables) {
|
||||
String path;
|
||||
if (table.contains("/")) {
|
||||
path = BASE_PATH + table + ".sdb";
|
||||
table = table.substring(table.lastIndexOf('/')+1);
|
||||
} else
|
||||
path = parent.getPath() + File.separator + table + ".sdb";
|
||||
if (!data.linkTableWithSdb(table, path))
|
||||
return null;
|
||||
}
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
private Object getFileLocking(String file) {
|
||||
synchronized (FILE_LOAD_LOCKING) {
|
||||
Object o = FILE_LOAD_LOCKING.get(file);
|
||||
if (o == null)
|
||||
FILE_LOAD_LOCKING.put(file, o = new Object());
|
||||
return o;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -18,11 +18,12 @@ import resources.radial.RadialOption;
|
||||
import resources.radial.Radials;
|
||||
import resources.server_info.Log;
|
||||
import resources.server_info.RelationalServerData;
|
||||
import resources.server_info.RelationalServerFactory;
|
||||
|
||||
public class TerminalService extends Service {
|
||||
|
||||
private static final String GET_ALL_TEMPLATES_SQL = "SELECT iff FROM iff_to_script";
|
||||
private static final String GET_SCRIPT_FOR_IFF_SQL = "SELECT script FROM iff_to_script WHERE iff = ?";
|
||||
private static final String GET_ALL_TEMPLATES_SQL = "SELECT iff FROM radials";
|
||||
private static final String GET_SCRIPT_FOR_IFF_SQL = "SELECT script FROM radials WHERE iff = ?";
|
||||
|
||||
private final Set<String> templates;
|
||||
private final RelationalServerData iffDatabase;
|
||||
@@ -31,9 +32,8 @@ public class TerminalService extends Service {
|
||||
|
||||
public TerminalService() {
|
||||
templates = new HashSet<>();
|
||||
iffDatabase = new RelationalServerData("serverdata/radial/radials.db");
|
||||
|
||||
if (!iffDatabase.linkTableWithSdb("iff_to_script", "serverdata/radial/radials.sdb"))
|
||||
iffDatabase = RelationalServerFactory.getServerData("radial/radials.db", "radials");
|
||||
if (iffDatabase == null)
|
||||
throw new main.ProjectSWG.CoreException("Unable to load sdb files for StaticService");
|
||||
|
||||
getAllTemplatesStatement = iffDatabase.prepareStatement(GET_ALL_TEMPLATES_SQL);
|
||||
|
||||
@@ -16,6 +16,7 @@ import resources.player.Player;
|
||||
import resources.player.PlayerEvent;
|
||||
import resources.server_info.Log;
|
||||
import resources.server_info.RelationalServerData;
|
||||
import resources.server_info.RelationalServerFactory;
|
||||
|
||||
public class CityService extends Service {
|
||||
|
||||
@@ -25,8 +26,8 @@ public class CityService extends Service {
|
||||
private final PreparedStatement getAllCitiesStatement;
|
||||
|
||||
public CityService() {
|
||||
spawnDatabase = new RelationalServerData("serverdata/map/cities.db");
|
||||
if (!spawnDatabase.linkTableWithSdb("cities", "serverdata/map/cities.sdb"))
|
||||
spawnDatabase = RelationalServerFactory.getServerData("map/cities.db", "cities");
|
||||
if (spawnDatabase == null)
|
||||
throw new main.ProjectSWG.CoreException("Unable to load sdb files for StaticService");
|
||||
getAllCitiesStatement = spawnDatabase.prepareStatement(GET_ALL_CITIES_FROM_TERRAIN);
|
||||
}
|
||||
|
||||
@@ -13,10 +13,10 @@ import resources.objects.SWGObject;
|
||||
import resources.objects.cell.CellObject;
|
||||
import resources.server_info.Log;
|
||||
import resources.server_info.RelationalServerData;
|
||||
import resources.server_info.RelationalServerFactory;
|
||||
|
||||
public class ClientObjectLoader {
|
||||
|
||||
private static final String FILE_PREFIX = "serverdata/buildout/";
|
||||
private static final String GET_CLIENT_OBJECTS_SQL = "SELECT objects.*, areas.adjust_coordinates, areas.terrain "
|
||||
+ "FROM objects, areas "
|
||||
+ "WHERE areas.event == '' AND objects.area_id = areas.id "
|
||||
@@ -27,15 +27,15 @@ public class ClientObjectLoader {
|
||||
|
||||
public ClientObjectLoader() {
|
||||
strings = (CrcStringTableData) ClientFactory.getInfoFromFile("misc/object_template_crc_string_table.iff");
|
||||
clientSdb = new RelationalServerData(FILE_PREFIX+"buildouts.db");
|
||||
clientSdb = RelationalServerFactory.getServerData("buildout/buildouts.db", "areas", "objects");
|
||||
if (clientSdb == null)
|
||||
throw new main.ProjectSWG.CoreException("Unable to load sdb files for ClientObjectLoader");
|
||||
}
|
||||
|
||||
public Map<Long, SWGObject> loadClientObjects(Terrain terrain) {
|
||||
System.out.println("ClientObjectLoader: Loading client objects...");
|
||||
Log.i("ClientObjectLoader", "Loading client objects...");
|
||||
Map<Long, SWGObject> objects = new Hashtable<>(4*1024);
|
||||
if (!loadTables())
|
||||
return objects;
|
||||
try (ResultSet set = clientSdb.prepareStatement(GET_CLIENT_OBJECTS_SQL).executeQuery()) {
|
||||
set.setFetchSize(1500);
|
||||
ColumnIndexes ind = new ColumnIndexes(set);
|
||||
@@ -68,15 +68,6 @@ public class ClientObjectLoader {
|
||||
return obj;
|
||||
}
|
||||
|
||||
private boolean loadTables() {
|
||||
if (!clientSdb.linkTableWithSdb("areas", FILE_PREFIX+"areas.sdb") || !clientSdb.linkTableWithSdb("objects", FILE_PREFIX+"objects.sdb")) {
|
||||
System.err.println("ObjectManager: Failed to load client objects! Cannot link SDB");
|
||||
Log.e("ObjectManager", "Failed to load client object SDB files!");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private static class ColumnIndexes {
|
||||
|
||||
public final int idInd;
|
||||
|
||||
@@ -289,6 +289,10 @@ public class CharacterCreationService extends Service {
|
||||
return null;
|
||||
}
|
||||
|
||||
private CreatureObject createCreature(ObjectManager objManager, String template, Location location, String buildingId, String cell) {
|
||||
return null;
|
||||
}
|
||||
|
||||
private PlayerObject createPlayer(ObjectManager objManager, String template) {
|
||||
SWGObject obj = objManager.createObject(template);
|
||||
if (obj instanceof PlayerObject)
|
||||
|
||||
@@ -41,6 +41,7 @@ import resources.control.Service;
|
||||
import resources.objects.building.BuildingObject;
|
||||
import resources.objects.SWGObject;
|
||||
import resources.server_info.RelationalServerData;
|
||||
import resources.server_info.RelationalServerFactory;
|
||||
import resources.spawn.SpawnerType;
|
||||
import resources.spawn.Spawner;
|
||||
import services.objects.ObjectManager;
|
||||
@@ -56,12 +57,9 @@ public final class SpawnerService extends Service {
|
||||
public SpawnerService(ObjectManager objectManager) {
|
||||
this.objectManager = objectManager;
|
||||
spawners = new ArrayList<>();
|
||||
spawnerDatabase = new RelationalServerData("serverdata/spawn/static.db");
|
||||
|
||||
if(!(spawnerDatabase.linkTableWithSdb("static", "serverdata/spawn/static.sdb") &&
|
||||
spawnerDatabase.linkTableWithSdb("buildings", "serverdata/building/buildings.sdb"))) {
|
||||
spawnerDatabase = RelationalServerFactory.getServerData("spawn/static.db", "static", "building/buildings");
|
||||
if (spawnerDatabase == null)
|
||||
throw new main.ProjectSWG.CoreException("Unable to load sdb files for SpawnerService");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -36,6 +36,7 @@ import resources.control.Service;
|
||||
import resources.objects.SWGObject;
|
||||
import resources.objects.building.BuildingObject;
|
||||
import resources.server_info.RelationalServerData;
|
||||
import resources.server_info.RelationalServerFactory;
|
||||
import services.objects.ObjectManager;
|
||||
|
||||
public class StaticService extends Service {
|
||||
@@ -51,12 +52,10 @@ public class StaticService extends Service {
|
||||
this.databaseMutex = new Object();
|
||||
this.objectManager = objectManager;
|
||||
|
||||
spawnDatabase = new RelationalServerData("serverdata/static/spawns.db");
|
||||
|
||||
if (!spawnDatabase.linkTableWithSdb("spawns", "serverdata/static/spawns.sdb") ||
|
||||
!spawnDatabase.linkTableWithSdb("types", "serverdata/static/types.sdb")) {
|
||||
spawnDatabase = RelationalServerFactory.getServerData("static/spawns.db", "spawns", "types");
|
||||
if (spawnDatabase == null)
|
||||
throw new main.ProjectSWG.CoreException("Unable to load sdb files for StaticService");
|
||||
}
|
||||
|
||||
getSupportingStatement = spawnDatabase.prepareStatement(GET_SUPPORTING_SQL);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user