From a66345259ae971cccc74d943bd93332a4139d9cc Mon Sep 17 00:00:00 2001 From: Seraina Date: Mon, 18 Apr 2022 21:05:49 +0200 Subject: [PATCH 1/6] Updated Diary --- Meilenstein III/Diary.txt | 53 +++++++++++++++++++++++++++++++++------ 1 file changed, 46 insertions(+), 7 deletions(-) diff --git a/Meilenstein III/Diary.txt b/Meilenstein III/Diary.txt index f4eff03..76e3d19 100644 --- a/Meilenstein III/Diary.txt +++ b/Meilenstein III/Diary.txt @@ -115,12 +115,12 @@ Allerdings werden die Nachrichten noch als einfacher String übermittelt und noc Wer macht Was? -Seraina: bis 25.4 Abends +Seraina: bis 25.3 Abends • QA-Concept • Fortfahren mit Spiellogik -Sebastian: bis 25.4 Abends +Sebastian: bis 25.3 Abends Protocol • Formatter /Parser(Namingconvention überlegen) o Format: COMND$parameter(i.e. Name)$parameter(i.e. msg) @@ -130,7 +130,7 @@ Protocol • Enum: All Legal Protocol Commands -Jonas: bis 25.4 Abends +Jonas: bis 25.3 Abends • PingPong-Funktionalität o PingPong handler o Every two seconds (what is the standard?) @@ -142,7 +142,7 @@ Jonas: bis 25.4 Abends o assign Ip (maybe port) method ? -Alexandr: bis 26.4 Abends +Alexandr: bis 26.3 Abends • Automatic username assignment • Username duplicate handler o Login -> username? -> check -> username01 @@ -155,7 +155,7 @@ Alexandr: bis 26.4 Abends Rule: Alles was geht in eigene Klassen Methoden schreiben. Soviel wie möglich commiten mit Aufschlussreichen messages. -Nächste Absprache Fr 25.4 Abends +Nächste Absprache Fr 25.3 Abends @@ -266,7 +266,8 @@ Stand 17:30 Uhr: auf Integration in einen grösseres GUI-Modul. Wir werden wohl JavaFX(openFX) verwenden. ToDo: - Spiellogik: - Send() methode von Passenger mit Client-Server verknüpfen(Seraina) + Spiellogik: + - Send() methode von Passenger mit Client-Server verknüpfen(Seraina) - NoiseHandler (Alex) - Game Zyklus implementieren (Seraina) @@ -275,9 +276,47 @@ ToDo: - Implementierung NoiseHandler, Verbindung mit VoteHandler - Verbesserung der Lesbarkeit von VoteHandler (Code-Duplikate in eine Methode zusammengefasst) +11.04.2022 - Seraina +Spiellogik: Es besteht eine basale Verknüpfung zwischen Client-Server und Spiellogik. Ein Client kann +eine Stimme abgeben und sie wird gezählt, NPC können sehr stupide stimmen abgegen (randomisiert). Der +Server schickt dem Client bei einem Voterequest immer seine Position im Zug mit, und der client schickt +sie dem Server wieder zurück. + +13.04.2022 - Seraina +Spiellogik: Habe Alexs noiseHandling in die restliche Spiellogik integriert und debugged. Ebenso musste +ich den Input der Clients beim Abstimmen geben umstrukturieren. Anstatt dass eine speziefische Methode +für das Voting aufgerufen wird, wird über ein Befehl '/v vote' gemacht der über die gleichen Kanäle geht +wie alle anderen Konsolenbefehle. +TODO: Vote enforcement von Serverseite. Momentan können Humans in der Nacht und umgekehrt reinfunken und +ihre Stimmen werden gezählt. + 14.04.2022 - Alex - Erste Version des Spiel-Manuals + +14.04.2022 - Jonas, Seraina, Sebi, Alex +Integration von Lobby und gamelogic. + +15.04.2022 - Seraina +Die Spiellogik läuft nun mit Enforcment. Geister und Menschen können nur zu enstprechender Zeit voten, +sonst werden ihre stimmen einfach nicht gewertet. Geister, die schon vom Zug geflogen sind, können nun +auch nicht mehr mitspielen. Habe eine Spectator Klasse hinzugefügt für Spieler, die aus dem Spiel geflogen +sind. + +16.04.2022 - Seraina, Sebi +Es gibt ein Problem mit der Gui, irgendwie funktioniert die Verbindung von Application Klasse zu +fxlm file nicht. + +17.04.2022 - Seraina, Sebi +GUI-Troubleshooting: wir haben das Problem mit der GUI lokalisiert, es wird beim launch einer Application +immer nur ein Objekt der Klasse erstellt, und zwar mit Konstruktor ohne Parametern. Um Parameter zu übergeben, +müssen statische Felder und definiert und diese nach launch und Initialisierung (beim Controller) mittels +Setter übergeben werden. + 17.04.2022 - Sebastian -- Dank Sereina kommuniziert die GUI nun mit dem Client und Nachrichten kommen korrekt an und werden korrekt verschickt. +- Dank Seraina kommuniziert die GUI nun mit dem Client und Nachrichten kommen korrekt an und werden korrekt verschickt. Im GUI funktioniert der Whisper nun. Folgendes Colorcoding: Eigene Nachrichten sind Lavendelfarben. Normale Chat nachrichten blau, und im Momentan Whisper Nachrichten violet. + +18.04.2022 - Seraina +Nach etlichem lesen von Websites zu custom tasks in gradle habe ich entlich die build-cs108 task zum Laufen +gebracht. Es war wie so oft die einfachste Lösung. \ No newline at end of file From 7106bf55884593d9bff9602a832d7d6cb9bf0a99 Mon Sep 17 00:00:00 2001 From: Seraina Date: Mon, 18 Apr 2022 21:06:30 +0200 Subject: [PATCH 2/6] Corrected some Comments --- .../java/ch/unibas/dmi/dbis/cs108/gamelogic/VoteHandler.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/VoteHandler.java b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/VoteHandler.java index 900fd51..da15b50 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/VoteHandler.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/VoteHandler.java @@ -51,7 +51,7 @@ public class VoteHandler { } } - try { // waits 20 seconds before votes get collected + try { // waits 60 seconds before votes get collected Thread.sleep(60*1000); } catch (InterruptedException e) { LOGGER.warn("Thread " + Thread.currentThread() + " was interrupted"); @@ -143,7 +143,7 @@ public class VoteHandler { } } - try { // waits 20 seconds before votes get collected + try { // waits 60 seconds before votes get collected Thread.sleep(60*1000); } catch (InterruptedException e) { LOGGER.warn("Thread " + Thread.currentThread() + " was interrupted"); From d25b6c405d7839b0134706e8dc0aecebf274364b Mon Sep 17 00:00:00 2001 From: Seraina Date: Mon, 18 Apr 2022 21:12:12 +0200 Subject: [PATCH 3/6] slashed ghostVote Time in half to 30 seconds --- .../java/ch/unibas/dmi/dbis/cs108/gamelogic/VoteHandler.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/VoteHandler.java b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/VoteHandler.java index da15b50..5fe9e1d 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/VoteHandler.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/VoteHandler.java @@ -51,8 +51,8 @@ public class VoteHandler { } } - try { // waits 60 seconds before votes get collected - Thread.sleep(60*1000); + try { // waits 30 seconds before votes get collected + Thread.sleep(30*1000); } catch (InterruptedException e) { LOGGER.warn("Thread " + Thread.currentThread() + " was interrupted"); } From 55147ce1cfb169200b1e2bf249e44b5295a43ef4 Mon Sep 17 00:00:00 2001 From: Seraina Date: Mon, 18 Apr 2022 21:57:33 +0200 Subject: [PATCH 4/6] went over all classes and added docs where is appropriate and needed --- .../unibas/dmi/dbis/cs108/BudaLogConfig.java | 2 +- .../dmi/dbis/cs108/NightTrainToBudapest.java | 5 +++ .../gamelogic/ClientGameInfoHandler.java | 1 - .../unibas/dmi/dbis/cs108/gamelogic/Game.java | 6 +-- .../dmi/dbis/cs108/gamelogic/GameState.java | 2 - .../dbis/cs108/gamelogic/NoiseHandler.java | 2 +- .../gamelogic/ServerGameInfoHandler.java | 2 - .../dmi/dbis/cs108/gamelogic/Train.java | 3 -- .../dmi/dbis/cs108/gamelogic/VoteHandler.java | 1 - .../gamelogic/klassenstruktur/Ghost.java | 1 - .../gamelogic/klassenstruktur/GhostNPC.java | 8 ---- .../gamelogic/klassenstruktur/Human.java | 1 - .../gamelogic/klassenstruktur/Spectator.java | 7 +++- .../dbis/cs108/multiplayer/client/Client.java | 11 +++++- .../client/JClientProtocolParser.java | 1 - .../cs108/multiplayer/client/gui/GUI.java | 9 +---- .../multiplayer/client/gui/chat/ChatApp.java | 39 ++++++++++--------- .../client/gui/chat/ChatController.java | 12 ++++-- .../multiplayer/helpers/ServerPinger.java | 1 - .../server/JServerProtocolParser.java | 5 --- .../dbis/cs108/multiplayer/server/Server.java | 11 ++++++ 21 files changed, 66 insertions(+), 64 deletions(-) diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/BudaLogConfig.java b/src/main/java/ch/unibas/dmi/dbis/cs108/BudaLogConfig.java index 0d809eb..0ee0b70 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/BudaLogConfig.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/BudaLogConfig.java @@ -8,7 +8,7 @@ import org.apache.logging.log4j.core.config.Configuration; import org.apache.logging.log4j.core.config.LoggerConfig; /** - * + *A Class that lets us set the RootLogger Level of all Classes in this Project */ public class BudaLogConfig { diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/NightTrainToBudapest.java b/src/main/java/ch/unibas/dmi/dbis/cs108/NightTrainToBudapest.java index 35a3b20..2c61262 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/NightTrainToBudapest.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/NightTrainToBudapest.java @@ -7,6 +7,11 @@ import java.net.InetAddress; public class NightTrainToBudapest { + /** + * The main Method of the jar build of this project. calls either the main method of the server or + * the main method of the client + * @param args the arguments are either client : [] or server + */ public static void main(String[] args) { try { String clientOrServer = args[0]; diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/ClientGameInfoHandler.java b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/ClientGameInfoHandler.java index 375dc47..9317836 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/ClientGameInfoHandler.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/ClientGameInfoHandler.java @@ -1,6 +1,5 @@ package ch.unibas.dmi.dbis.cs108.gamelogic; -import ch.unibas.dmi.dbis.cs108.gamelogic.klassenstruktur.Passenger; /** * Handles all communication Client to Server concerning gamestate updates i.e. client a has voted diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/Game.java b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/Game.java index ea1db1c..6ab28ee 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/Game.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/Game.java @@ -81,7 +81,7 @@ public class Game implements Runnable { LOGGER.info(gameState.toString()); - for (ClientHandler client : lobbyClients) { + for (ClientHandler client : lobbyClients) {//begins filling the train with clients int index = order[i]; if (passengerTrain[index].getIsGhost()) { //if there is a ghost GhostPlayer ghostPlayer = new GhostPlayer(passengerTrain[index].getPosition(), @@ -94,7 +94,7 @@ public class Game implements Runnable { } i++; } - while (i < order.length) { + while (i < order.length) {//fills the rest of the train with npcs int index = order[i]; if (passengerTrain[index].getIsGhost()) { //if they are a ghost GhostNPC ghostNPC = new GhostNPC(passengerTrain[index].getPosition(), "NPC" + passengerTrain[index].getPosition(),passengerTrain[index].getIsOG()); @@ -109,7 +109,7 @@ public class Game implements Runnable { LOGGER.info(gameState.toString()); i = 0; - while (isOngoing == true) { + while (isOngoing == true) {//game cycle if (!isDay) { LOGGER.info("NIGHT"); gameOverCheck = voteHandler.ghostVote(gameState.getPassengerTrain(), this); diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/GameState.java b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/GameState.java index 3d2388a..344ec44 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/GameState.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/GameState.java @@ -7,8 +7,6 @@ import ch.unibas.dmi.dbis.cs108.gamelogic.klassenstruktur.Human; import ch.unibas.dmi.dbis.cs108.gamelogic.klassenstruktur.HumanNPC; import ch.unibas.dmi.dbis.cs108.gamelogic.klassenstruktur.Passenger; import ch.unibas.dmi.dbis.cs108.multiplayer.server.ClientHandler; -import java.util.Arrays; -import java.util.HashSet; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/NoiseHandler.java b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/NoiseHandler.java index 4b29d23..cdda0ee 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/NoiseHandler.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/NoiseHandler.java @@ -1,6 +1,6 @@ package ch.unibas.dmi.dbis.cs108.gamelogic; -import ch.unibas.dmi.dbis.cs108.gamelogic.klassenstruktur.Ghost; + import ch.unibas.dmi.dbis.cs108.gamelogic.klassenstruktur.Passenger; /** diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/ServerGameInfoHandler.java b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/ServerGameInfoHandler.java index 253b231..061301c 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/ServerGameInfoHandler.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/ServerGameInfoHandler.java @@ -1,12 +1,10 @@ package ch.unibas.dmi.dbis.cs108.gamelogic; import ch.unibas.dmi.dbis.cs108.BudaLogConfig; -import ch.unibas.dmi.dbis.cs108.gamelogic.klassenstruktur.Ghost; import ch.unibas.dmi.dbis.cs108.gamelogic.klassenstruktur.GhostNPC; import ch.unibas.dmi.dbis.cs108.gamelogic.klassenstruktur.HumanNPC; import ch.unibas.dmi.dbis.cs108.gamelogic.klassenstruktur.Passenger; import ch.unibas.dmi.dbis.cs108.multiplayer.helpers.Protocol; -import ch.unibas.dmi.dbis.cs108.multiplayer.server.ClientHandler; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/Train.java b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/Train.java index 10212b5..d6041d9 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/Train.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/Train.java @@ -75,8 +75,5 @@ public class Train { return false; } - public static void main(String[] args) { - System.out.println("Hallo"); - } } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/VoteHandler.java b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/VoteHandler.java index 5fe9e1d..457dee1 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/VoteHandler.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/VoteHandler.java @@ -1,7 +1,6 @@ package ch.unibas.dmi.dbis.cs108.gamelogic; import ch.unibas.dmi.dbis.cs108.BudaLogConfig; -import ch.unibas.dmi.dbis.cs108.gamelogic.klassenstruktur.Ghost; import ch.unibas.dmi.dbis.cs108.gamelogic.klassenstruktur.Passenger; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/klassenstruktur/Ghost.java b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/klassenstruktur/Ghost.java index 515d2b3..b17ab40 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/klassenstruktur/Ghost.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/klassenstruktur/Ghost.java @@ -1,7 +1,6 @@ package ch.unibas.dmi.dbis.cs108.gamelogic.klassenstruktur; import ch.unibas.dmi.dbis.cs108.BudaLogConfig; -import ch.unibas.dmi.dbis.cs108.gamelogic.Game; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/klassenstruktur/GhostNPC.java b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/klassenstruktur/GhostNPC.java index c9793cd..c218814 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/klassenstruktur/GhostNPC.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/klassenstruktur/GhostNPC.java @@ -2,9 +2,7 @@ package ch.unibas.dmi.dbis.cs108.gamelogic.klassenstruktur; import ch.unibas.dmi.dbis.cs108.BudaLogConfig; import ch.unibas.dmi.dbis.cs108.gamelogic.Game; -import ch.unibas.dmi.dbis.cs108.gamelogic.GameState; import ch.unibas.dmi.dbis.cs108.gamelogic.ServerGameInfoHandler; -import ch.unibas.dmi.dbis.cs108.gamelogic.TrainOverflow; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -77,10 +75,4 @@ public class GhostNPC extends Ghost { } } - /** - * Decides what to do when a noise ist heard, currently just always broadcasts it - * TODO: Make NPC smarter - */ - - } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/klassenstruktur/Human.java b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/klassenstruktur/Human.java index 0ac7dbd..f6af8cc 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/klassenstruktur/Human.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/klassenstruktur/Human.java @@ -1,7 +1,6 @@ package ch.unibas.dmi.dbis.cs108.gamelogic.klassenstruktur; import ch.unibas.dmi.dbis.cs108.BudaLogConfig; -import ch.unibas.dmi.dbis.cs108.gamelogic.Game; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/klassenstruktur/Spectator.java b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/klassenstruktur/Spectator.java index be229c6..9569714 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/klassenstruktur/Spectator.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/klassenstruktur/Spectator.java @@ -3,7 +3,6 @@ package ch.unibas.dmi.dbis.cs108.gamelogic.klassenstruktur; import ch.unibas.dmi.dbis.cs108.BudaLogConfig; import ch.unibas.dmi.dbis.cs108.gamelogic.Game; import ch.unibas.dmi.dbis.cs108.gamelogic.ServerGameInfoHandler; -import ch.unibas.dmi.dbis.cs108.multiplayer.server.ClientHandler; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -23,7 +22,11 @@ public class Spectator extends Passenger{ isSpectator = true; } - + /** + * Sends a message to the Client assosiated with this Spectator via ServerGameInfoHandler.spectatorFormat + * @param msg the message that is sent to this player. + * @param game the game the Passenger lives on + */ @Override public void send(String msg, Game game) { clientHandler.sendMsgToClient(ServerGameInfoHandler.spectatorFormat(msg, this, game)); diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/Client.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/Client.java index 7c666c1..436f601 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/Client.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/Client.java @@ -62,7 +62,6 @@ public class Client { sendMsgToServer(Protocol.clientLogin + "$" + systemName); this.chatApp = new ChatApp(new ClientModel(systemName, this)); this.chatGui = new GUI(this.chatApp); - chatGui.setName(systemName); clientPinger = new ClientPinger(this, this.socket); } catch (IOException e) { e.printStackTrace(); @@ -205,6 +204,10 @@ public class Client { } } + /** + * The main Method used for testing in IDE + * @param args not used in this main + */ public static void main(String[] args) { Scanner sc = new Scanner(System.in); String hostname; @@ -239,6 +242,12 @@ public class Client { } + /** + * The main-method used for the jar build of this project + * @param address the IP address of the Server (can be localhost) + * @param port the port for the connection + * @param username the username of this client + */ public static void main(InetAddress address, int port, String username) { Scanner sc = new Scanner(System.in); Socket socket; diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/JClientProtocolParser.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/JClientProtocolParser.java index 739158c..f497bf0 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/JClientProtocolParser.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/JClientProtocolParser.java @@ -31,7 +31,6 @@ public class JClientProtocolParser { } switch (header) { case Protocol.pingFromServer: - c.sendMsgToServer(Protocol.pingBack); break; case Protocol.pingBack: diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/GUI.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/GUI.java index f7a47d3..06a9d30 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/GUI.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/GUI.java @@ -11,16 +11,13 @@ public class GUI implements Runnable { public static final Logger LOGGER = LogManager.getLogger(GUI.class); public static final BudaLogConfig l = new BudaLogConfig(LOGGER); - ChatApp chatApp; - private String name; + private ChatApp chatApp; + public GUI(ChatApp chatApp) { this.chatApp = chatApp; } - public void setName(String name) { - this.name = name; - } /** * When an object implementing interface {@code Runnable} is used to create a thread, starting the @@ -32,11 +29,9 @@ public class GUI implements Runnable { * @see Thread#run() */ - @Override public void run() { LOGGER.info("here"); - //String name = Application.launch(this.chatApp.getClass()); } } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/ChatApp.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/ChatApp.java index 5386a24..8b04c5a 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/ChatApp.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/ChatApp.java @@ -1,7 +1,6 @@ package ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.chat; import ch.unibas.dmi.dbis.cs108.BudaLogConfig; -import ch.unibas.dmi.dbis.cs108.multiplayer.client.Client; import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.ClientModel; import java.net.URL; import java.util.Objects; @@ -25,19 +24,28 @@ public class ChatApp extends Application { public ChatApp() { super(); LOGGER.info("Empty ChatApp constructor got called: "); - } - public ChatApp(ClientModel clientModel) { - this.clientModel = clientModel; - this.chatController = new ChatController(clientModel); + public ChatApp(ClientModel clientM) { + clientModel = clientM; + chatController = new ChatController(clientM); } - public static void setChatController( - ChatController chatC) { + /** + * Sets the ChatController for the Application, needs to be static, but only one application can + * be launched per programm + * + * @param chatC the ChatController to be linked to this chatApp + */ + public static void setChatController(ChatController chatC) { chatController = chatC; } + /** + * Sets the non-static ClientModel field of this class + * + * @param cModel the non static ClientModel to be added + */ public void setcModel(ClientModel cModel) { this.cModel = cModel; } @@ -54,6 +62,11 @@ public class ChatApp extends Application { return clientModel; } + public ChatController getChatController() { + return chatController; + } + + /** * The main entry point for all JavaFX applications. The start method is called after the init * method has returned, and after the system is ready for the application to begin running. @@ -69,11 +82,9 @@ public class ChatApp extends Application { */ @Override public void start(Stage primaryStage) throws Exception { - LOGGER.info("made it here"); this.setcModel(clientModel); URL resource = ChatApp.class.getResource( "splitPaneChatView.fxml"); - LOGGER.info("1"); if (resource == null) { System.out.println("File wasnt found"); } @@ -82,23 +93,16 @@ public class ChatApp extends Application { Parent root = FXMLLoader.load( Objects.requireNonNull(ChatApp.class.getResource( "splitPaneChatView.fxml"))); - LOGGER.info("2"); // TODO bin chatController.getChatPaneRoot() border to root border for rezising Scene scene = new Scene(root); - LOGGER.info("3"); scene.setRoot(root); - LOGGER.info("4"); primaryStage.setScene(scene); - LOGGER.info("5"); } catch (Exception e) { e.printStackTrace(); } primaryStage.setResizable(true); - LOGGER.info("6"); primaryStage.setTitle("Chat"); - LOGGER.info("7"); primaryStage.show(); - LOGGER.info("8"); } @@ -107,7 +111,4 @@ public class ChatApp extends Application { launch(args); } - public ChatController getChatController() { - return chatController; - } } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/ChatController.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/ChatController.java index 1f535d9..11b6f5a 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/ChatController.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/ChatController.java @@ -22,7 +22,6 @@ import javafx.scene.control.SplitPane; import javafx.scene.control.TextArea; import javafx.scene.control.TextField; import javafx.scene.layout.Background; -import javafx.scene.layout.BackgroundFill; import javafx.scene.layout.VBox; import javafx.scene.paint.Color; import org.apache.logging.log4j.LogManager; @@ -53,7 +52,10 @@ public class ChatController implements Initializable { private static final String chatToAll = Protocol.chatMsgToAll; private static final String chatToLobby = Protocol.chatMsgToLobby; - public ChatController() { //TODO: why does this get called + /** + * Needs to stay, because it gets called in initialisation + */ + public ChatController() { super(); whisperTargetChosen = new SimpleBooleanProperty(); cmd = Protocol.chatMsgToLobby + "$"; @@ -154,13 +156,15 @@ public class ChatController implements Initializable { } /** - * @return the client who's chat controller this is + * @return the ClientModel whose chat controller this is */ public static ClientModel getClient() { return client; } /** + * Sets the ClientModel of this ChatController + * * @param client who's gui controller this should be */ public void setClient(ClientModel client) { @@ -172,7 +176,7 @@ public class ChatController implements Initializable { } /** - * The client calls this method to foreward a chat message to the chat gui + * The client calls this method to forward a chat message to the chat gui * * @param msg the message to be displayed */ diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/helpers/ServerPinger.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/helpers/ServerPinger.java index 3ff3421..938fae6 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/helpers/ServerPinger.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/helpers/ServerPinger.java @@ -3,7 +3,6 @@ package ch.unibas.dmi.dbis.cs108.multiplayer.helpers; import ch.unibas.dmi.dbis.cs108.BudaLogConfig; import ch.unibas.dmi.dbis.cs108.multiplayer.server.ClientHandler; import java.io.BufferedWriter; -import java.io.IOException; import java.net.Socket; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/JServerProtocolParser.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/JServerProtocolParser.java index b5bb04b..c15f7b8 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/JServerProtocolParser.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/JServerProtocolParser.java @@ -2,11 +2,6 @@ package ch.unibas.dmi.dbis.cs108.multiplayer.server; import ch.unibas.dmi.dbis.cs108.BudaLogConfig; -import ch.unibas.dmi.dbis.cs108.gamelogic.ClientVoteData; -import ch.unibas.dmi.dbis.cs108.gamelogic.Game; -import ch.unibas.dmi.dbis.cs108.gamelogic.GameState; -import ch.unibas.dmi.dbis.cs108.gamelogic.TrainOverflow; -import ch.unibas.dmi.dbis.cs108.gamelogic.VoteHandler; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import ch.unibas.dmi.dbis.cs108.multiplayer.helpers.Protocol; diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/Server.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/Server.java index fcf5c72..1df003e 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/Server.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/Server.java @@ -43,6 +43,9 @@ public class Server { } } + /** + * closes the Server socket of this server + */ public void closeServerSocket() { try { if (serverSocket != null) { @@ -53,6 +56,10 @@ public class Server { } } + /** + * The main method used for testing + * @param args not used in this method + */ public static void main(String[] args) { ServerSocket serverSocket = null; gamePort = 1873; @@ -65,6 +72,10 @@ public class Server { server.startServer(); } + /** + * The main method of the Server that is used for the jar build of this project + * @param port the port the server will open on + */ public static void main(int port) { gamePort = port; ServerSocket serverSocket = null; From 95a18d3d5c7c457e6bac6b87135cf88d3e484bd8 Mon Sep 17 00:00:00 2001 From: Seraina Date: Mon, 18 Apr 2022 22:11:56 +0200 Subject: [PATCH 5/6] added a @code in doc so javadoc builds --- .../java/ch/unibas/dmi/dbis/cs108/NightTrainToBudapest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/NightTrainToBudapest.java b/src/main/java/ch/unibas/dmi/dbis/cs108/NightTrainToBudapest.java index 2c61262..5b2b641 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/NightTrainToBudapest.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/NightTrainToBudapest.java @@ -10,7 +10,7 @@ public class NightTrainToBudapest { /** * The main Method of the jar build of this project. calls either the main method of the server or * the main method of the client - * @param args the arguments are either client : [] or server + * @param args the arguments are either client {@code : [] or server } */ public static void main(String[] args) { try { From 82c561bcb39392c0ae96aba0905c6c5e298e1c44 Mon Sep 17 00:00:00 2001 From: Seraina Date: Mon, 18 Apr 2022 22:14:39 +0200 Subject: [PATCH 6/6] copied the protocol just to be sure --- Meilenstein III/Protocol.txt | 163 +++++++++++++++++++++++++++++++++++ 1 file changed, 163 insertions(+) create mode 100644 Meilenstein III/Protocol.txt diff --git a/Meilenstein III/Protocol.txt b/Meilenstein III/Protocol.txt new file mode 100644 index 0000000..e040b17 --- /dev/null +++ b/Meilenstein III/Protocol.txt @@ -0,0 +1,163 @@ +GENERAL INFORMATION: _______________________________________________________________________________________________ + +Protocol messages should always start with five characters (these are the Strings listed here). +If additional information is necessary, it should be given after a dollar sign, as such: PRTCL$information. +It should be noted that the server simply ignores the 6th character, however for clarity's sake it should always +be a $. If more than one piece of information needs to be sent, the separate pieces of information should also be +delimited with a dollar sign (see whisper for an example). In that case, it is very important that it is a $ and +nothing else. Also, in such cases, we need to make sure the pieces of information between the $ do not contain $ +themselves (for example, usernames cannot contain $). + +____________________________________________________________________________________________________________________ + +The five-character Strings that define protocol messages are all defined as String variables in the Protocol.java +class. In this document, they are depicted as such: + +nameOfStringVariable = "EXMPL" +EXMPL$information one$information two + Documentation of Protocol message + +So "EXMPL" is the actual protocol message being sent, however the code never implements this five-character String +directly but instead accesses it via Protocol.nameOfStringVariable, so the actual protocol message can be changed +later. + +The second line, if present, shows an example of how the Syntax of the protocol message works, if the protocol +message is sent with additional arguments. + +Indented is the actual documentation, which explains what the protocol message does. + + +BIDIRECTIONAL COMMANDS: ____________________________________________________________________________________________ + +pingBack = "PINGB" + Ping-back message from client to server / server to client. To be sent upon receiving "CPING" / "SPING". + The other party then registers this in its ClientPinger / ServerPinger thread. + + +CLIENT TO SERVER COMMANDS: _________________________________________________________________________________________ + +chatMsgToAll = "CHATA" +CHATA$Chat message + When the server receives this, it broadcasts a chat message to all clients. The message has to be given in the + protocol message after CHATA$, for example the protocol message CHATA$Hello everybody!, if sent from the user + named Poirot, will print Poirot: Hello everybody! to every connected client's chat console (note the absence + / presence of spaces). + + +chatMsgToLobby = "CHATL" +CHATL$Chat message + When the server receives this, it broadcasts a chat message to all clients in the same Lobby. The message has to be + given in the protocol message after CHATL$, for example the protocol message CHATL$Hello everybody!, if sent from + the user named Poirot, will print Poirot: Hello everybody! to the chat console of every client in the lobby (note + the absence / presence of spaces). If the client is not in a lobby, the chat message will be sent to everyone not + in a lobby. + + +clientLogin = "LOGIN" +LOGIN$username + The message sent by the client on login to set their name. For example, LOGIN$Poirot will use the + clientHandler.setUsernameOnLogin() method to set this client's username to Poirot, and broadcast the announcement: + "Poirot has joined the Server". Also, it will set this clientHandler's loggedIn boolean to true, which could be + used later to refuse access to users who haven't formally logged in using this command. + + +nameChange = "NAMEC" +NAMEC$new name + Client requests their name to be changed to whatever follows NAMEC$. For example, NAMEC$Poirot means the client + wants to change their name to Poirot. However, the server will first pass this name through + nameDuplicateChecker.checkName() to adjust it as needed (remove : and $ and add suffix in case of duplicate name.) + + +pingFromClient = "CPING" + Client sends ping message to server. If the client doesn't recieve a pingback from the server, it shows a + disconnection message and sets clientPinger.isConnected to false, which can be implemented somehow later. + As soon as a pingback message is received, isConnected is set to true again and a reconnection message is printed. + + +clientQuitRequest = "QUITR" + The client requests to quit. Once the server receives this message, it will send a serverConfirmQuit message to the + client to confirm the quitting, then close the socket associated with that client and remove the clientHandler from + the list of clientHandlers. + + +createNewLobby = "CRTLB" + Client sends this message when they want to create a new lobby (& automatically join it). Client issues this + command in ch.unibas.dmi.dbis.cs108.multiplayer.client.MessageFormatter using "/g". First a lobby Lobby is created + of which the requesting client is the admin of. + + +listLobbies = "LISTL" + Represents a clients' request for a list of lobbies, plus what players are in them. + + +listPlayersInLobby = "LISTP" + Represents a clients' request for a list of all players within the lobby. + + +joinLobby = "JOINL" +JOINL$int + Client requests to join the Lobby with the given number, for example, + JOINL$2 means the client wants to join lobby 2. + +leaveLobby = "LEAVL" + Client requests to leave whatever lobby they're in. + + +whisper = "WHISP" +WHISP$recipient's username$message + Whisper chat. + + +startANewGame = "STGAM" + A Client (lobby admin) decides to start the game. The game is started in the lobby the message came from. + Only one game can be started per lobby at a time. + + +listGames = "LISTG" + Client request to see a list of all games, ongoing and finished. + + +votedFor = "CVOTE" +CVOTE$position$vote + Client informs server that they have voted and delivers this vote in the form of "CVOTE$position$vote" + + +SERVER TO CLIENT COMMANDS: _________________________________________________________________________________________ + +pingFromServer = "SPING" + Server sends ping message to client. If the server doesn't recieve a pingback from the client, it shows a + disconnection message and sets serverPinger.isConnected to false, which can be implemented somehow later. + As soon as a pingback message is received, isConnected is set to true again and a reconnection message is printed. + + +printToClientConsole = "CONSM" +CONSM$message + prints out incoming announcements into the user's console. any string that follows CONSM$ is printed as is, so the + message that follows already has to be formatted the way it should be shown to the client. + + +printToClientChat = "CHATM" +CHATM$message + prints out incoming chat messages into the user's chat. any string that follows CHATM$ is printed as is, so the + message that follows already has to be formatted the way it should be shown to the client. + + +serverConfirmQuit = "QUITC" + Server confirms the client's quit request, meaning that the client can now close its sockets and quit. + + +serverRequestsGhostVote = "GVOTR" +GVOTR$passenger position (int)$train information + The server requests the client (who should be a ghost) to vote on the victim. in the format + GVOTR$string the current train will be shown as a string to the client + + +serverRequestsHumanVote = "HVOTR" +HVOTR$passenger position (int)$train information + The server requests the client (who should be a human) to vote on who is a ghost / who should be kicked + off the train. + + +changedUserName = "CHNAM" +CHNAM$newname + Informs Client that their username has been changed. \ No newline at end of file