From 331375f51d5124b6e56f44abcae7d118bf499d6a Mon Sep 17 00:00:00 2001 From: austin Date: Thu, 5 May 2022 23:29:41 -0400 Subject: [PATCH] database work --- .gitignore | 3 + Scripts/auth/createAuthTables.sql | 7 +++ Scripts/character/createCharacterTables.sql | 10 ++++ Scripts/createTables.sql | 29 ---------- Scripts/structs/createStructsTables.sql | 10 ++++ Scripts/towns/createTownsTables.sql | 10 ++++ pom.xml | 56 +------------------ .../electrosphere/engine/LoadingThread.java | 6 ++ .../game/server/db/DatabaseController.java | 1 + .../game/server/db/DatabaseResult.java | 2 +- .../game/server/db/DatabaseUtils.java | 35 ++++++++++-- .../net/client/ClientNetworking.java | 2 +- .../java/electrosphere/net/server/Server.java | 1 + .../java/electrosphere/util/FileUtils.java | 2 +- 14 files changed, 83 insertions(+), 91 deletions(-) create mode 100644 Scripts/auth/createAuthTables.sql create mode 100644 Scripts/character/createCharacterTables.sql create mode 100644 Scripts/structs/createStructsTables.sql create mode 100644 Scripts/towns/createTownsTables.sql diff --git a/.gitignore b/.gitignore index 983976e1..e855f22f 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,6 @@ #docs backup files /docs/~$NetworkFlow.drawio.bkp /docs/~$NetworkFlow.drawio.dtmp + +#saves +/saves/arena diff --git a/Scripts/auth/createAuthTables.sql b/Scripts/auth/createAuthTables.sql new file mode 100644 index 00000000..d2178b1e --- /dev/null +++ b/Scripts/auth/createAuthTables.sql @@ -0,0 +1,7 @@ + +-- accounts definition +CREATE TABLE accounts ( + id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + username TEXT NOT NULL, + pwdhash TEXT NOT NULL +); diff --git a/Scripts/character/createCharacterTables.sql b/Scripts/character/createCharacterTables.sql new file mode 100644 index 00000000..c775430e --- /dev/null +++ b/Scripts/character/createCharacterTables.sql @@ -0,0 +1,10 @@ + +--characters +--positions +CREATE TABLE charaWorldPositions (id INTEGER PRIMARY KEY, charID INTEGER, posX INTEGER, posY INTEGER); +CREATE INDEX charaWorldPositionsIDIndex ON charaWorldPositions (charID); +CREATE INDEX charaWorldPositionsPosIndex ON charaWorldPositions (posX, posY); + +--data +CREATE TABLE charaData (id INTEGER PRIMARY KEY, charID INTEGER, dataVal VARCHAR); +CREATE INDEX charaDataIDIndex ON charaData (charID); diff --git a/Scripts/createTables.sql b/Scripts/createTables.sql index 271e1788..584cb3cb 100644 --- a/Scripts/createTables.sql +++ b/Scripts/createTables.sql @@ -3,36 +3,7 @@ CREATE TABLE mainTable (propName VARCHAR PRIMARY KEY, propValue VARCHAR); INSERT INTO mainTable (propName, propValue) VALUES ("ver","1"); ---characters ---positions -CREATE TABLE charaWorldPositions (id INTEGER PRIMARY KEY, charID INTEGER, posX INTEGER, posY INTEGER); -CREATE INDEX charaWorldPositionsIDIndex ON charaWorldPositions (charID); -CREATE INDEX charaWorldPositionsPosIndex ON charaWorldPositions (posX, posY); - ---data -CREATE TABLE charaData (id INTEGER PRIMARY KEY, charID INTEGER, dataVal VARCHAR); -CREATE INDEX charaDataIDIndex ON charaData (charID); ---towns ---positions -CREATE TABLE townWorldPositions (id INTEGER PRIMARY KEY, townID INTEGER, posX INTEGER, posY INTEGER); -CREATE INDEX townWorldPositionsIDIndex ON townWorldPositions (townID); -CREATE INDEX townWorldPositionsPosIndex ON townWorldPositions (posX, posY); - ---data -CREATE TABLE townData (id INTEGER PRIMARY KEY, townID INTEGER, dataVal VARCHAR); -CREATE INDEX townDataIDIndex ON townData (townID); - - ---structures ---positions -CREATE TABLE structWorldPositions (id INTEGER PRIMARY KEY, structID INTEGER, posX INTEGER, posY INTEGER); -CREATE INDEX structWorldPositionsIDIndex ON structWorldPositions (structID); -CREATE INDEX structWorldPositionsPosIndex ON structWorldPositions (posX, posY); - ---data -CREATE TABLE structData (id INTEGER PRIMARY KEY, structID INTEGER, dataVal VARCHAR); -CREATE INDEX structDataIDIndex ON structData (structID); diff --git a/Scripts/structs/createStructsTables.sql b/Scripts/structs/createStructsTables.sql new file mode 100644 index 00000000..4e473cb2 --- /dev/null +++ b/Scripts/structs/createStructsTables.sql @@ -0,0 +1,10 @@ + +--structures +--positions +CREATE TABLE structWorldPositions (id INTEGER PRIMARY KEY, structID INTEGER, posX INTEGER, posY INTEGER); +CREATE INDEX structWorldPositionsIDIndex ON structWorldPositions (structID); +CREATE INDEX structWorldPositionsPosIndex ON structWorldPositions (posX, posY); + +--data +CREATE TABLE structData (id INTEGER PRIMARY KEY, structID INTEGER, dataVal VARCHAR); +CREATE INDEX structDataIDIndex ON structData (structID); diff --git a/Scripts/towns/createTownsTables.sql b/Scripts/towns/createTownsTables.sql new file mode 100644 index 00000000..5f03b3e7 --- /dev/null +++ b/Scripts/towns/createTownsTables.sql @@ -0,0 +1,10 @@ + +--towns +--positions +CREATE TABLE townWorldPositions (id INTEGER PRIMARY KEY, townID INTEGER, posX INTEGER, posY INTEGER); +CREATE INDEX townWorldPositionsIDIndex ON townWorldPositions (townID); +CREATE INDEX townWorldPositionsPosIndex ON townWorldPositions (posX, posY); + +--data +CREATE TABLE townData (id INTEGER PRIMARY KEY, townID INTEGER, dataVal VARCHAR); +CREATE INDEX townDataIDIndex ON townData (townID); diff --git a/pom.xml b/pom.xml index c6be2534..b17e811d 100644 --- a/pom.xml +++ b/pom.xml @@ -13,12 +13,6 @@ 1.9.19 - - - org.lwjgl - lwjgl - ${lwjgl.version} - org.lwjgl lwjgl-assimp @@ -55,55 +49,9 @@ lwjgl ${lwjgl.version} ${lwjgl.natives} - runtime - - - - org.lwjgl - lwjgl-assimp - ${lwjgl.version} - ${lwjgl.natives} - runtime - - - - org.lwjgl - lwjgl-glfw - ${lwjgl.version} - ${lwjgl.natives} - runtime - - - - org.lwjgl - lwjgl-opengl - ${lwjgl.version} - ${lwjgl.natives} - runtime - - - - org.lwjgl - lwjgl-opengles - ${lwjgl.version} - ${lwjgl.natives} - runtime - - - - org.lwjgl - lwjgl-openal - ${lwjgl.version} - ${lwjgl.natives} - runtime - - - org.lwjgl - lwjgl-stb - ${lwjgl.version} - ${lwjgl.natives} - runtime + import + org.joml joml diff --git a/src/main/java/electrosphere/engine/LoadingThread.java b/src/main/java/electrosphere/engine/LoadingThread.java index eaad8044..897e7f77 100644 --- a/src/main/java/electrosphere/engine/LoadingThread.java +++ b/src/main/java/electrosphere/engine/LoadingThread.java @@ -36,6 +36,7 @@ import electrosphere.game.server.terrain.models.TerrainModification; import electrosphere.game.server.town.Town; import electrosphere.game.server.world.MacroData; import electrosphere.game.server.datacell.DataCellManager; +import electrosphere.game.server.db.DatabaseUtils; import electrosphere.game.simulation.MicroSimulation; import electrosphere.logger.LoggerInterface; import electrosphere.main.Globals; @@ -65,6 +66,7 @@ import electrosphere.game.server.unit.UnitUtils; import electrosphere.renderer.ui.DrawableElement; import electrosphere.renderer.ui.WidgetUtils; import electrosphere.renderer.ui.Window; +import electrosphere.util.FileUtils; import electrosphere.util.Utilities; import java.util.LinkedList; @@ -183,6 +185,10 @@ public class LoadingThread extends Thread { initServerArenaWorldData(); //init data cell manager initDataCellManager(); + //init database connection + // SaveUtils.initSave("arena"); + //connect to database + // Globals.dbController.connect("./saves/arena/central.db"); //init authentication initAuthenticationManager(); //initialize the server thread (server only) diff --git a/src/main/java/electrosphere/game/server/db/DatabaseController.java b/src/main/java/electrosphere/game/server/db/DatabaseController.java index bb9fde28..1e240704 100644 --- a/src/main/java/electrosphere/game/server/db/DatabaseController.java +++ b/src/main/java/electrosphere/game/server/db/DatabaseController.java @@ -57,6 +57,7 @@ public class DatabaseController { rVal.succeeded = false; rVal.hasResultSet = false; LoggerInterface.loggerFileIO.ERROR("SQL statement execution error", ex); + ex.printStackTrace(); } return rVal; } diff --git a/src/main/java/electrosphere/game/server/db/DatabaseResult.java b/src/main/java/electrosphere/game/server/db/DatabaseResult.java index 4c7c5626..a64c282b 100644 --- a/src/main/java/electrosphere/game/server/db/DatabaseResult.java +++ b/src/main/java/electrosphere/game/server/db/DatabaseResult.java @@ -39,7 +39,7 @@ public class DatabaseResult { return rVal; } - public void addResultSet(ResultSet rs){ + protected void addResultSet(ResultSet rs){ this.rs = rs; } diff --git a/src/main/java/electrosphere/game/server/db/DatabaseUtils.java b/src/main/java/electrosphere/game/server/db/DatabaseUtils.java index 5ab2f009..e5b051e2 100644 --- a/src/main/java/electrosphere/game/server/db/DatabaseUtils.java +++ b/src/main/java/electrosphere/game/server/db/DatabaseUtils.java @@ -11,29 +11,54 @@ import java.util.logging.Logger; * @author satellite */ public class DatabaseUtils { + + public static boolean initCentralDBFile(String path){ - String sanitizedPath = "." + FileUtils.sanitizeFilePath(path); + String sanitizedPath = FileUtils.sanitizeFilePath(path); if(!FileUtils.checkFileExists(sanitizedPath)){ return false; } String dbFilePath = sanitizedPath + "/central.db"; DatabaseController controller = new DatabaseController(); controller.connect(dbFilePath); + runScript(controller,"createTables.sql"); + //both of these are used for arena mode as well as main game + runScript(controller,"/auth/createAuthTables.sql"); + runScript(controller,"/character/createCharacterTables.sql"); + //create adventure-only files + if(!dbFilePath.equals("./saves/arena/central.db")){ + //we only want to create these if we're not in arena mode + runScript(controller,"/towns/createTownsTables.sql"); + runScript(controller,"/structs/createStructsTables.sql"); + } + controller.disconnect(); + return true; + } + + public static boolean runScript(DatabaseController controller, String scriptPath){ String rawScript = ""; try { - rawScript = FileUtils.getSQLScriptFileAsString("createTables.sql"); + rawScript = FileUtils.getSQLScriptFileAsString(scriptPath); } catch (IOException ex) { LoggerInterface.loggerEngine.ERROR("Failure reading create db script", ex); return false; } String[] scriptLines = rawScript.split("\n"); + String accumulatorString = ""; for(String line : scriptLines){ if(line.length() > 1 && !line.startsWith("--")){ - System.out.println("EXECUTE: " + line); - controller.executeStatement(line); + if(line.contains(";")){ + accumulatorString = accumulatorString + line; + System.out.println("EXECUTE: " + accumulatorString); + controller.executeStatement(accumulatorString); + accumulatorString = ""; + } else { + accumulatorString = accumulatorString + line; + } } } - controller.disconnect(); return true; } + + } diff --git a/src/main/java/electrosphere/net/client/ClientNetworking.java b/src/main/java/electrosphere/net/client/ClientNetworking.java index 798d5f2f..b48e6b8e 100644 --- a/src/main/java/electrosphere/net/client/ClientNetworking.java +++ b/src/main/java/electrosphere/net/client/ClientNetworking.java @@ -94,7 +94,7 @@ public class ClientNetworking implements Runnable{ } if(connectionAttempts > MAX_CONNECTION_ATTEMPTS){ LoggerInterface.loggerNetworking.ERROR("Max client connection attempts!", new Exception()); - System.exit(1); + // System.exit(1); } } diff --git a/src/main/java/electrosphere/net/server/Server.java b/src/main/java/electrosphere/net/server/Server.java index 95deb960..4b5b76cd 100644 --- a/src/main/java/electrosphere/net/server/Server.java +++ b/src/main/java/electrosphere/net/server/Server.java @@ -1,5 +1,6 @@ package electrosphere.net.server; +import electrosphere.game.server.saves.SaveUtils; import electrosphere.main.Globals; import electrosphere.main.Main; import electrosphere.net.NetUtils; diff --git a/src/main/java/electrosphere/util/FileUtils.java b/src/main/java/electrosphere/util/FileUtils.java index 24652262..643ffd85 100644 --- a/src/main/java/electrosphere/util/FileUtils.java +++ b/src/main/java/electrosphere/util/FileUtils.java @@ -222,7 +222,7 @@ public class FileUtils { * @return true if directory was created, false if it was not */ public static boolean createDirectory(String directoryName){ - String sanitizedPath = "." + sanitizeFilePath(directoryName); + String sanitizedPath = sanitizeFilePath(directoryName); File targetDir = new File(sanitizedPath); if(targetDir.exists()){ return false;