diff --git a/pom.xml b/pom.xml index fd49aa2d5cd023c2a8e021a3cfa1610101746843..00cecae4b603bb2ef7a769e8effa5db5010b47d5 100644 --- a/pom.xml +++ b/pom.xml @@ -94,6 +94,7 @@ <artifactId>gson</artifactId> <version>2.10.1</version> </dependency> + <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/AccountType.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/AccountType.java deleted file mode 100644 index 145d7a4f6f54bad787231fc80b276a2abaae261b..0000000000000000000000000000000000000000 --- a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/AccountType.java +++ /dev/null @@ -1,9 +0,0 @@ -package de.hdm_stuttgart.battlearena.Model.DataStorage.Classes; - -public enum AccountType { - - NONE, - LOCAL, - ONLINE - -} diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ENUMs/AccountType.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ENUMs/AccountType.java new file mode 100644 index 0000000000000000000000000000000000000000..4ddb26cd2de6356b40b45af16dad0b9dfeb7f4d8 --- /dev/null +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ENUMs/AccountType.java @@ -0,0 +1,9 @@ +package de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.ENUMs; + +public enum AccountType { + + NONE, + LOCAL, + ONLINE + +} diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ENUMs/MapType.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ENUMs/MapType.java new file mode 100644 index 0000000000000000000000000000000000000000..8403ea2c46b21e5b8349917316f7414eb1a74710 --- /dev/null +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ENUMs/MapType.java @@ -0,0 +1,8 @@ +package de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.ENUMs; + +public enum MapType { + + COREMAP, + COMMUNITYMAP + +} diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ENUMs/ThreadStatus.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ENUMs/ThreadStatus.java new file mode 100644 index 0000000000000000000000000000000000000000..fb75fb7eef6bf215cb9545b3e455c243d5ef4123 --- /dev/null +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ENUMs/ThreadStatus.java @@ -0,0 +1,9 @@ +package de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.ENUMs; + +public enum ThreadStatus { + + RUNNING, + FAILED, + FINISHED + +} diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/GsonHandler.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/GsonHandler.java index 308b553a68422590c8a0619baa336e91ee513bb2..0b6bb2a2974338947bbbd2a7f299ef52077dfd59 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/GsonHandler.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/GsonHandler.java @@ -3,6 +3,7 @@ package de.hdm_stuttgart.battlearena.Model.DataStorage.Classes; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.reflect.TypeToken; +import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.ENUMs.MapType; import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Exceptions.GSONException; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -145,5 +146,4 @@ public class GsonHandler { } } - } diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/MapType.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/MapType.java deleted file mode 100644 index d7738b3c5205d4f217e2a27f0e88578cc34f6fa1..0000000000000000000000000000000000000000 --- a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/MapType.java +++ /dev/null @@ -1,8 +0,0 @@ -package de.hdm_stuttgart.battlearena.Model.DataStorage.Classes; - -public enum MapType { - - COREMAP, - COMMUNITYMAP - -} diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Persistence.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Persistence.java index 638529da884c6bd83ae1f34bf67c653b6c73b89e..a27908ba0c61f640c24d0b1b8b788bfa0a52b8be 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Persistence.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Persistence.java @@ -1,5 +1,7 @@ package de.hdm_stuttgart.battlearena.Model.DataStorage.Classes; +import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.ENUMs.AccountType; +import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.ENUMs.MapType; import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Exceptions.GSONException; import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Exceptions.ParserException; import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Exceptions.SQLException; @@ -22,7 +24,7 @@ public class Persistence { private PlayerStatistics statistics; private PlayerAccount account; private AppSettings settings; - protected ArrayList<MapInfo> communityMapsListRemote; //for community map browser + private ArrayList<MapInfo> communityMapsListRemote; //for community map browser @@ -170,24 +172,6 @@ public class Persistence { } } -/* public MapData getGameMap(String mapSelected, boolean choseCoremaps) throws DatabaseException{ - String mapID = mapSelected.substring(mapSelected.indexOf("(") + 1, mapSelected.length() - 1); - if (choseCoremaps) { - for (int index = 0; index < coreMaps.size(); index++) { - if (coreMaps.get(index).getMapID().equals(mapID)) { - return coreMaps.get(index); - } - } - } else { - for (int index = 0; index < communityMaps.size(); index++) { - if (communityMaps.get(index).getMapID().equals(mapID)) { - return coreMaps.get(index); - } - } - } - throw new DatabaseException("Database error - Map not found!"); - }*/ - public void saveSettings(){ try{ gsonHandler.saveSettings(settings); @@ -211,7 +195,8 @@ public class Persistence { } } - public void saveCreatedMapLocally(MapData map) throws DatabaseException { + public void saveCreatedMap(MapData map, boolean doUpload) throws DatabaseException { + String part1 = ""; try { for(int i = 0; communityMaps.size() > i; i++){ if(communityMaps.get(i).getMapID().equals(map.getMapID())){ @@ -220,51 +205,50 @@ public class Persistence { } communityMaps.add(map); gsonHandler.saveMaps(communityMaps, MapType.COMMUNITYMAP); - //createLocalCommunityMapsList(); log.info("Newly created map stored successfully in JSON!"); } catch(Exception e){ log.error(e); - if(e.getMessage().contains("Identical map already saved") | e.getMessage().contains("ORA-01017")){ - throw new DatabaseException(e.getMessage()); - } - else{ - throw new DatabaseException("Unknown Database Error. Saving newly created Community-Map locally failed!"); + if(e.getMessage().contains("Identical map already saved")){ + part1 = e.getMessage(); + } + } + if(doUpload) { + try { + db.uploadCommunityMap(map); + log.info("Newly created Community-Map successfully published!"); + } + catch (Exception e) { + log.error(e); + if (e.getMessage().contains("ORA-17868") | e.getMessage().contains("ORA-01017")) { + throw new DatabaseException(part1 + "\nNo connection to SQL server! Saving to SQL communityMap server failed!"); + } else if (e.getMessage().contains("ORA-00001")) { + throw new DatabaseException(part1 + "\nMap already existing on communityMaps server!\n Look for mapID: " + map.getMapID()); + } else { + throw new DatabaseException(part1 + "\nUnknown Database Error. Saving to SQL communityMap server failed!"); + } } } } - public void uploadCreatedMap(MapData map) throws DatabaseException { + public void updatePlayerStatistics(int kills, int deaths, int gameTime, int blocksDestroyed, boolean gameWon) throws DatabaseException{ //after game round try { - db.uploadCommunityMap(map); - log.info("Newly created Community-Map successfully published!"); - } - catch(Exception e){ - log.error(e); - if(e.getMessage().contains("ORA-17868") | e.getMessage().contains("ORA-01017")){ - throw new DatabaseException("No connection to SQL server!"); - } - else if(e.getMessage().contains("ORA-00001")){ - throw new DatabaseException("Map already existing on communityMaps server!\n Look for mapID: " + map.getMapID()); + Parser.playerStatsValid(new PlayerStatistics(0, 0, kills, deaths, blocksDestroyed, gameTime)); //temp instance of PLayerStatistics to validate new values + statistics.addKills(kills); + statistics.addDeaths(deaths); + statistics.addGameTime(gameTime); + statistics.addBlocksDestroyed(blocksDestroyed); + if(gameWon){ + statistics.addGamesWon(); } else{ - throw new DatabaseException("Unknown Database Error. Saving to SQL communityMap server failed!"); + statistics.addGamesLost(); } + log.info("Statistics successfully updated!"); } - } - - public void updatePlayerStatistics(int kills, int deaths, int gameTime, int blocksDestroyed, boolean gameWon) throws DatabaseException{ //after game round - statistics.addKills(kills); - statistics.addDeaths(deaths); - statistics.addGameTime(gameTime); - statistics.addBlocksDestroyed(blocksDestroyed); - if(gameWon){ - statistics.addGamesWon(); - } - else{ - statistics.addGamesLost(); + catch(Exception e){ + log.error(e); } - log.info("Statistics successfully updated!"); } public void createAccount(String playerName, String password, AccountType type) throws DatabaseException { @@ -331,7 +315,7 @@ public class Persistence { throw new DatabaseException("Locally stored password does not match online password. Please reenter credentials!"); } } - else{ //überflüssig, da GSON schon beim laden der Daten meckern würde, wenn er den Accounttype nicht finden kann + else{ //eigentlich überflüssig, da GSON schon beim Laden der Daten meckern würde, wenn er den Accounttype nicht finden kann throw new DatabaseException("AccountType invalid - accountData corrupted! Please create new Account or login with existing!"); } log.info("Player account successfully verified!"); diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/PlayerAccount.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/PlayerAccount.java index a028edd30e66fc1116615efb7764503e3746469a..ae1e60649de3d31e4a1b99e70de92a9bfbfe0c53 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/PlayerAccount.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/PlayerAccount.java @@ -1,5 +1,7 @@ package de.hdm_stuttgart.battlearena.Model.DataStorage.Classes; +import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.ENUMs.AccountType; + public class PlayerAccount { private String playerName; diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/RuntimeInfo.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/RuntimeInfo.java index 14d1a3995c5cc6e831b18324cd91f745b58bdc1b..5564faa20622c1380dbaaaf80e2df616cebe5c7d 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/RuntimeInfo.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/RuntimeInfo.java @@ -2,6 +2,7 @@ package de.hdm_stuttgart.battlearena.Model.DataStorage.Classes; import de.hdm_stuttgart.battlearena.Controller.Enum.GameMode; import de.hdm_stuttgart.battlearena.Controller.Enum.GameState; +import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.ENUMs.ThreadStatus; import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Exceptions.ParserException; import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Utilities.HashGenerator; import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Utilities.Parser; @@ -23,6 +24,39 @@ public class RuntimeInfo { private EntityClass playerOneClass = EntityClass.HUMAN; private EntityClass playerTwoClass = EntityClass.HUMAN; + //Thread Status-Updates + private ThreadStatus threadStartup1; + private String threadStartup1Msg; + private ThreadStatus threadStartup2; + private String threadStartup2Msg; + private ThreadStatus threadUpdateMaps; + private String threadUpdateMapsMsg; + private ThreadStatus threadUpdateStats; + private String threadUpdateStatsMsg; + private ThreadStatus threadDLCommMap; + private String threadDLCommMapMsg; + private ThreadStatus threadSaveCommMap; + private String threadSaveCommMapMsg; + private ThreadStatus threadCommMapList; + private String threadCommMapListMsg; + private ThreadStatus threadRstStats; + private String threadRstStatsMsg; + private ThreadStatus threadSaveStats; + private String threadSaveStatsMsg; + private ThreadStatus threadCreateAcc; + private String threadCreateAccMsg; + + //Stats Tracking during Gameplay + private int kills; + private int deaths; + private int blocksDestroyed; + private int gameTime; + private boolean gameWon; + + + + + private RuntimeInfo(){}; @@ -30,10 +64,6 @@ public class RuntimeInfo { return runtimeInfoSingleton; } - public String getMapDataGame() { - return mapDataGame; - } - public MapData generateMap(String mapName, String mapData) throws ParserException { try { Parser.mapDataValid(mapData); @@ -88,4 +118,208 @@ public class RuntimeInfo { this.playerTwoClass = playerTwoClass; } + public String getMapDataGame() { + return mapDataGame; + } + + public ThreadStatus getThreadStartup1() { + return threadStartup1; + } + + public void setThreadStartup1(ThreadStatus threadStartup1) { + this.threadStartup1 = threadStartup1; + } + + public String getThreadStartup1Msg() { + return threadStartup1Msg; + } + + public void setThreadStartup1Msg(String threadStartup1Msg) { + this.threadStartup1Msg = threadStartup1Msg; + } + + public ThreadStatus getThreadStartup2() { + return threadStartup2; + } + + public void setThreadStartup2(ThreadStatus threadStartup2) { + this.threadStartup2 = threadStartup2; + } + + public String getThreadStartup2Msg() { + return threadStartup2Msg; + } + + public void setThreadStartup2Msg(String threadStartup2Msg) { + this.threadStartup2Msg = threadStartup2Msg; + } + + public ThreadStatus getThreadUpdateMaps() { + return threadUpdateMaps; + } + + public void setThreadUpdateMaps(ThreadStatus threadUpdateMaps) { + this.threadUpdateMaps = threadUpdateMaps; + } + + public String getThreadUpdateMapsMsg() { + return threadUpdateMapsMsg; + } + + public void setThreadUpdateMapsMsg(String threadUpdateMapsMsg) { + this.threadUpdateMapsMsg = threadUpdateMapsMsg; + } + + public ThreadStatus getThreadUpdateStats() { + return threadUpdateStats; + } + + public void setThreadUpdateStats(ThreadStatus threadUpdateStats) { + this.threadUpdateStats = threadUpdateStats; + } + + public String getThreadUpdateStatsMsg() { + return threadUpdateStatsMsg; + } + + public void setThreadUpdateStatsMsg(String threadUpdateStatsMsg) { + this.threadUpdateStatsMsg = threadUpdateStatsMsg; + } + + public ThreadStatus getThreadDLCommMap() { + return threadDLCommMap; + } + + public void setThreadDLCommMap(ThreadStatus threadDLCommMap) { + this.threadDLCommMap = threadDLCommMap; + } + + public String getThreadDLCommMapMsg() { + return threadDLCommMapMsg; + } + + public void setThreadDLCommMapMsg(String threadDLCommMapMsg) { + this.threadDLCommMapMsg = threadDLCommMapMsg; + } + + public ThreadStatus getThreadSaveCommMap() { + return threadSaveCommMap; + } + + public void setThreadSaveCommMap(ThreadStatus threadSaveCommMap) { + this.threadSaveCommMap = threadSaveCommMap; + } + + public String getThreadSaveCommMapMsg() { + return threadSaveCommMapMsg; + } + + public void setThreadSaveCommMapMsg(String threadSaveCommMapMsg) { + this.threadSaveCommMapMsg = threadSaveCommMapMsg; + } + + public ThreadStatus getThreadCommMapList() { + return threadCommMapList; + } + + public void setThreadCommMapList(ThreadStatus threadCommMapList) { + this.threadCommMapList = threadCommMapList; + } + + public String getThreadCommMapListMsg() { + return threadCommMapListMsg; + } + + public void setThreadCommMapListMsg(String threadCommMapListMsg) { + this.threadCommMapListMsg = threadCommMapListMsg; + } + + public ThreadStatus getThreadRstStats() { + return threadRstStats; + } + + public void setThreadRstStats(ThreadStatus threadRstStats) { + this.threadRstStats = threadRstStats; + } + + public String getThreadRstStatsMsg() { + return threadRstStatsMsg; + } + + public void setThreadRstStatsMsg(String threadRstStatsMsg) { + this.threadRstStatsMsg = threadRstStatsMsg; + } + + public ThreadStatus getThreadSaveStats() { + return threadSaveStats; + } + + public void setThreadSaveStats(ThreadStatus threadSaveStats) { + this.threadSaveStats = threadSaveStats; + } + + public String getThreadSaveStatsMsg() { + return threadSaveStatsMsg; + } + + public void setThreadSaveStatsMsg(String threadSaveStatsMsg) { + this.threadSaveStatsMsg = threadSaveStatsMsg; + } + + public ThreadStatus getThreadCreateAcc() { + return threadCreateAcc; + } + + public void setThreadCreateAcc(ThreadStatus threadCreateAcc) { + this.threadCreateAcc = threadCreateAcc; + } + + public String getThreadCreateAccMsg() { + return threadCreateAccMsg; + } + + public void setThreadCreateAccMsg(String threadCreateAccMsg) { + this.threadCreateAccMsg = threadCreateAccMsg; + } + + public int getKills() { + return kills; + } + + public void setKills(int kills) { + this.kills = kills; + } + + public int getDeaths() { + return deaths; + } + + public void setDeaths(int deaths) { + this.deaths = deaths; + } + + public int getBlocksDestroyed() { + return blocksDestroyed; + } + + public void setBlocksDestroyed(int blocksDestroyed) { + this.blocksDestroyed = blocksDestroyed; + } + + public int getGameTime() { + return gameTime; + } + + public void setGameTime(int gameTime) { + this.gameTime = gameTime; + } + + public boolean isGameWon() { + return gameWon; + } + + public void setGameWon(boolean gameWon) { + this.gameWon = gameWon; + } + } diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadCreateAcc.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadCreateAcc.java new file mode 100644 index 0000000000000000000000000000000000000000..e89ddac66104f2cb0603cf82060beab366839d3a --- /dev/null +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadCreateAcc.java @@ -0,0 +1,42 @@ +package de.hdm_stuttgart.battlearena.Model.DataStorage.Classes; + +import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.ENUMs.AccountType; +import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.ENUMs.ThreadStatus; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class ThreadCreateAcc extends Thread{ + + private static final Logger log = LogManager.getLogger(ThreadCreateAcc.class); + private String playerName; + private String password; + private AccountType type; + + @Override + public void run() { + + Persistence persistenceInst = Persistence.getInstance(); + RuntimeInfo runtimeInfoInst = RuntimeInfo.getInstance(); + + try { + runtimeInfoInst.setThreadCreateAccMsg(""); + runtimeInfoInst.setThreadCreateAcc(ThreadStatus.RUNNING); + persistenceInst.createAccount(playerName, password, type); + log.info("Create account thread finished successfully!"); + runtimeInfoInst.setThreadCreateAcc(ThreadStatus.FINISHED); + } catch (Exception e) { + log.error(e); + runtimeInfoInst.setThreadCreateAccMsg(e.getMessage()); + log.info("Create account thread failed!"); + runtimeInfoInst.setThreadCreateAcc(ThreadStatus.FAILED); + } + } + + public void startThread(String playerName, String password, AccountType type){ + this.playerName = playerName; + this.password = password; + this.type = type; + start(); + } + +} diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadDLCommMap.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadDLCommMap.java new file mode 100644 index 0000000000000000000000000000000000000000..8f83215abbb4dfe4f45b64f7ae6f8fb445158311 --- /dev/null +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadDLCommMap.java @@ -0,0 +1,37 @@ +package de.hdm_stuttgart.battlearena.Model.DataStorage.Classes; + +import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.ENUMs.ThreadStatus; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class ThreadDLCommMap extends Thread{ + + private static final Logger log = LogManager.getLogger(ThreadDLCommMap.class); + private String mapID; + + @Override + public void run() { + + Persistence persistenceInst = Persistence.getInstance(); + RuntimeInfo runtimeInfoInst = RuntimeInfo.getInstance(); + + try { + runtimeInfoInst.setThreadDLCommMapMsg(""); + runtimeInfoInst.setThreadDLCommMap(ThreadStatus.RUNNING); + persistenceInst.getCommunityMap(mapID); + log.info("Download Community-Map thread finished successfully!"); + runtimeInfoInst.setThreadDLCommMap(ThreadStatus.FINISHED); + } catch (Exception e) { + log.error(e); + runtimeInfoInst.setThreadDLCommMapMsg(e.getMessage()); + log.info("Download Community-Map thread failed!"); + runtimeInfoInst.setThreadDLCommMap(ThreadStatus.FAILED); + } + } + + public void startThread(String mapID){ + this.mapID = mapID; + start(); + } + +} diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadGetMapList.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadGetMapList.java new file mode 100644 index 0000000000000000000000000000000000000000..49478417c2fcdc7268a18d6f78589858bc2d8d8c --- /dev/null +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadGetMapList.java @@ -0,0 +1,31 @@ +package de.hdm_stuttgart.battlearena.Model.DataStorage.Classes; + +import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.ENUMs.ThreadStatus; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class ThreadGetMapList extends Thread { + + private static final Logger log = LogManager.getLogger(ThreadGetMapList.class); + + @Override + public void run() { + + Persistence persistenceInst = Persistence.getInstance(); + RuntimeInfo runtimeInfoInst = RuntimeInfo.getInstance(); + + try { + runtimeInfoInst.setThreadCommMapListMsg(""); + runtimeInfoInst.setThreadCommMapList(ThreadStatus.RUNNING); + persistenceInst.createRemoteCommunityMapsList(); + log.info("Retrieving Community-Map-List thread finished successfully!"); + runtimeInfoInst.setThreadCommMapList(ThreadStatus.FINISHED); + } catch (Exception e) { + log.error(e); + runtimeInfoInst.setThreadCommMapListMsg(e.getMessage()); + log.info("Retrieving Community-Map-List thread failed!"); + runtimeInfoInst.setThreadCommMapList(ThreadStatus.FAILED); + } + } + +} diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadRstStats.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadRstStats.java new file mode 100644 index 0000000000000000000000000000000000000000..117fd08d7655da86f083dd6774342db8a97dee64 --- /dev/null +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadRstStats.java @@ -0,0 +1,31 @@ +package de.hdm_stuttgart.battlearena.Model.DataStorage.Classes; + +import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.ENUMs.ThreadStatus; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class ThreadRstStats extends Thread { + + private static final Logger log = LogManager.getLogger(ThreadRstStats.class); + + @Override + public void run() { + + Persistence persistenceInst = Persistence.getInstance(); + RuntimeInfo runtimeInfoInst = RuntimeInfo.getInstance(); + + try { + runtimeInfoInst.setThreadRstStatsMsg(""); + runtimeInfoInst.setThreadRstStats(ThreadStatus.RUNNING); + persistenceInst.resetPlayerStatistics(); + log.info("Reset Player-Statistics thread finished successfully!"); + runtimeInfoInst.setThreadRstStats(ThreadStatus.FINISHED); + } catch (Exception e) { + log.error(e); + runtimeInfoInst.setThreadRstStatsMsg(e.getMessage()); + log.info("Reset Player-Statistics thread failed!"); + runtimeInfoInst.setThreadRstStats(ThreadStatus.FAILED); + } + } + +} diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadSaveCommMap.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadSaveCommMap.java new file mode 100644 index 0000000000000000000000000000000000000000..984c6654c9a0acbea0c7601ab3b9edea8a18ff7e --- /dev/null +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadSaveCommMap.java @@ -0,0 +1,39 @@ +package de.hdm_stuttgart.battlearena.Model.DataStorage.Classes; + +import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.ENUMs.ThreadStatus; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class ThreadSaveCommMap extends Thread{ + + private static final Logger log = LogManager.getLogger(ThreadSaveCommMap.class); + private MapData map; + private boolean doUpload; + + @Override + public void run() { + + Persistence persistenceInst = Persistence.getInstance(); + RuntimeInfo runtimeInfoInst = RuntimeInfo.getInstance(); + + try { + runtimeInfoInst.setThreadSaveCommMapMsg(""); + runtimeInfoInst.setThreadSaveCommMap(ThreadStatus.RUNNING); + persistenceInst.saveCreatedMap(map, doUpload); + log.info("Uploading Community-Map thread finished successfully!"); + runtimeInfoInst.setThreadSaveCommMap(ThreadStatus.FINISHED); + } catch (Exception e) { + log.error(e); + runtimeInfoInst.setThreadSaveCommMapMsg(e.getMessage()); + log.info("Uploading Community-Map thread failed!"); + runtimeInfoInst.setThreadSaveCommMap(ThreadStatus.FAILED); + } + } + + public void startThread(MapData map, boolean doUpload){ //user can check box to optionally publish map on SQL server + this.map = map; + this.doUpload = doUpload; + start(); + } + +} diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadSaveStats.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadSaveStats.java new file mode 100644 index 0000000000000000000000000000000000000000..ce753f13a26da1dbfd9976de6ac633a04ff968af --- /dev/null +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadSaveStats.java @@ -0,0 +1,31 @@ +package de.hdm_stuttgart.battlearena.Model.DataStorage.Classes; + +import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.ENUMs.ThreadStatus; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class ThreadSaveStats extends Thread{ + + private static final Logger log = LogManager.getLogger(ThreadSaveStats.class); + + @Override + public void run() { + + Persistence persistenceInst = Persistence.getInstance(); + RuntimeInfo runtimeInfoInst = RuntimeInfo.getInstance(); + + try { + runtimeInfoInst.setThreadSaveStatsMsg(""); + runtimeInfoInst.setThreadSaveStats(ThreadStatus.RUNNING); + persistenceInst.savePlayerStatistics(); + log.info("Save Player-Statistics thread finished successfully!"); + runtimeInfoInst.setThreadSaveStats(ThreadStatus.FINISHED); + } catch (Exception e) { + log.error(e); + runtimeInfoInst.setThreadSaveStatsMsg(e.getMessage()); + log.info("Save Player-Statistics thread failed!"); + runtimeInfoInst.setThreadSaveStats(ThreadStatus.FAILED); + } + } + +} diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/StartupThread.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadStartup1.java similarity index 51% rename from src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/StartupThread.java rename to src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadStartup1.java index a7ad2fddfea2cc499a0de9994f1bfe2b193f87aa..d7b273ce47aa67bf2c9d1a9326cb7ac5be732cee 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/StartupThread.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadStartup1.java @@ -1,18 +1,22 @@ package de.hdm_stuttgart.battlearena.Model.DataStorage.Classes; +import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.ENUMs.ThreadStatus; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -public class StartupThread extends Thread{ +public class ThreadStartup1 extends Thread{ - private static final Logger log = LogManager.getLogger(StartupThread.class); + private static final Logger log = LogManager.getLogger(ThreadStartup1.class); @Override public void run() { Persistence persistenceInst = Persistence.getInstance(); + RuntimeInfo runtimeInfoInst = RuntimeInfo.getInstance(); try { + runtimeInfoInst.setThreadStartup1Msg(""); + runtimeInfoInst.setThreadStartup1(ThreadStatus.RUNNING); persistenceInst.loadSettings(); persistenceInst.loadCoreMaps(); persistenceInst.loadCommunityMaps(); @@ -20,8 +24,12 @@ public class StartupThread extends Thread{ persistenceInst.verifyCoreMaps(); persistenceInst.verifyCommunityMaps(); log.info("Startup routine part1 complete!"); + runtimeInfoInst.setThreadStartup1(ThreadStatus.FINISHED); } catch (Exception e) { log.error(e); + runtimeInfoInst.setThreadStartup1Msg(e.getMessage()); + log.info("Startup routine part1 failed!"); + runtimeInfoInst.setThreadStartup1(ThreadStatus.FAILED); } } diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadStartup2.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadStartup2.java new file mode 100644 index 0000000000000000000000000000000000000000..4d9a3a57c6c76bf29425ecd0ce5f62a1dcc43d40 --- /dev/null +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadStartup2.java @@ -0,0 +1,31 @@ +package de.hdm_stuttgart.battlearena.Model.DataStorage.Classes; + +import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.ENUMs.ThreadStatus; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class ThreadStartup2 extends Thread{ + + private static final Logger log = LogManager.getLogger(ThreadStartup2.class); + + @Override + public void run() { + + Persistence persistenceInst = Persistence.getInstance(); + RuntimeInfo runtimeInfoInst = RuntimeInfo.getInstance(); + + try { + runtimeInfoInst.setThreadStartup2Msg(""); + runtimeInfoInst.setThreadStartup2(ThreadStatus.RUNNING); + persistenceInst.loadPlayerAccount(); + log.info("Startup routine part2 complete!"); + runtimeInfoInst.setThreadStartup2(ThreadStatus.FINISHED); + } catch (Exception e) { + log.error(e); + runtimeInfoInst.setThreadStartup2Msg(e.getMessage()); + log.info("Startup routine part2 failed!"); + runtimeInfoInst.setThreadStartup2(ThreadStatus.FAILED); + } + } + +} diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadUpdateMaps.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadUpdateMaps.java new file mode 100644 index 0000000000000000000000000000000000000000..793298791e2bda9e8da1af2a9796165878863eb7 --- /dev/null +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadUpdateMaps.java @@ -0,0 +1,31 @@ +package de.hdm_stuttgart.battlearena.Model.DataStorage.Classes; + +import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.ENUMs.ThreadStatus; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class ThreadUpdateMaps extends Thread{ + + private static final Logger log = LogManager.getLogger(ThreadUpdateMaps.class); + + @Override + public void run() { + + Persistence persistenceInst = Persistence.getInstance(); + RuntimeInfo runtimeInfoInst = RuntimeInfo.getInstance(); + + try { + runtimeInfoInst.setThreadUpdateMapsMsg(""); + runtimeInfoInst.setThreadUpdateMaps(ThreadStatus.RUNNING); + persistenceInst.updateCoreMaps(); + log.info("Update Core-Maps thread finished successfully!"); + runtimeInfoInst.setThreadUpdateMaps(ThreadStatus.FINISHED); + } catch (Exception e) { + log.error(e); + runtimeInfoInst.setThreadUpdateMapsMsg(e.getMessage()); + log.info("Update Core-Maps thread failed!"); + runtimeInfoInst.setThreadUpdateMaps(ThreadStatus.FAILED); + } + } + +} diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadUpdateStats.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadUpdateStats.java new file mode 100644 index 0000000000000000000000000000000000000000..f8869a397009d5b29511440ea4843ae5a7382567 --- /dev/null +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadUpdateStats.java @@ -0,0 +1,36 @@ +package de.hdm_stuttgart.battlearena.Model.DataStorage.Classes; + +import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.ENUMs.ThreadStatus; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class ThreadUpdateStats extends Thread{ + + private static final Logger log = LogManager.getLogger(ThreadUpdateStats.class); + + @Override + public void run() { + + Persistence persistenceInst = Persistence.getInstance(); + RuntimeInfo runtimeInfoInst = RuntimeInfo.getInstance(); + + try { + runtimeInfoInst.setThreadUpdateStatsMsg(""); + runtimeInfoInst.setThreadUpdateStats(ThreadStatus.RUNNING); + persistenceInst.updatePlayerStatistics(runtimeInfoInst.getKills(), runtimeInfoInst.getDeaths(), runtimeInfoInst.getGameTime(), runtimeInfoInst.getBlocksDestroyed(), runtimeInfoInst.isGameWon()); + runtimeInfoInst.setKills(0); + runtimeInfoInst.setDeaths(0); + runtimeInfoInst.setGameTime(0); + runtimeInfoInst.setBlocksDestroyed(0); + runtimeInfoInst.setGameWon(false); + log.info("Update statistics thread finished successfully!"); + runtimeInfoInst.setThreadUpdateStats(ThreadStatus.FINISHED); + } catch (Exception e) { + log.error(e); + runtimeInfoInst.setThreadUpdateStatsMsg(e.getMessage()); + log.info("Update statistics thread failed!"); + runtimeInfoInst.setThreadUpdateStats(ThreadStatus.FAILED); + } + } + +} diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index 7170d5f5377d9044dc83b6f3705c684f0db71786..f0029279f9b345c8bca30dd1ea57552d991b6c83 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -16,6 +16,7 @@ module gui { opens de.hdm_stuttgart.battlearena to javafx.fxml; opens de.hdm_stuttgart.battlearena.Model.Sound to javafx.media; opens de.hdm_stuttgart.battlearena.Controller.Utilities to javafx.fxml; + opens de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.ENUMs to com.google.gson; exports de.hdm_stuttgart.battlearena.Main; exports de.hdm_stuttgart.battlearena.Controller; @@ -23,4 +24,4 @@ module gui { exports de.hdm_stuttgart.battlearena.Model.Inputs; exports de.hdm_stuttgart.battlearena.Model.Map; exports de.hdm_stuttgart.battlearena.Controller.Utilities; -} \ No newline at end of file +}