diff --git a/Server/.idea/workspace.xml b/Server/.idea/workspace.xml index 4240467..ae5a2b1 100644 --- a/Server/.idea/workspace.xml +++ b/Server/.idea/workspace.xml @@ -102,7 +102,7 @@ - + diff --git a/Server/src/Minigame.java b/Server/src/Minigame.java index d7815fd..441b481 100644 --- a/Server/src/Minigame.java +++ b/Server/src/Minigame.java @@ -8,8 +8,13 @@ import java.util.TimerTask; public class Minigame { + //referenz auf den ursprünglichen raum protected Room room; + + //liste aller threads zum korrekten beenden dieser private List threads = new ArrayList<>(); + + //liste aller temporären minigame verbindungen private Client[] players; public Minigame(Room room) @@ -18,6 +23,7 @@ public class Minigame players = new Client[room.players.length]; } + //fügt dem minigame "Raum" einen spieler hinzu (ähnlich wie im Room selbst) public void addClient(Client client, int index) { Thread t = new Thread(new Runnable() @@ -25,9 +31,12 @@ public class Minigame @Override public void run() { + players[index] = client; DataInputStream input = client.input; DataOutputStream output = client.output; + + //Buffer für eingehende narichten byte[] readData = new byte[10]; @@ -40,6 +49,7 @@ public class Minigame } + //eingehende narichten verarbeiten: while (true) { try @@ -79,8 +89,10 @@ public class Minigame t.start(); } + //das minigame wird beendet public void end() { + //alle bestehenden threads in diesem Minigame beenden for (int i = 0; i < threads.size(); i++) { try @@ -92,11 +104,13 @@ public class Minigame } } + //temporäre verbindungen schließen for(int i = 0; i < players.length; i++) { players[i].close(); } + //threads liste löschen threads.clear(); } } diff --git a/Server/src/Room.java b/Server/src/Room.java index ba89a1d..725ecd8 100644 --- a/Server/src/Room.java +++ b/Server/src/Room.java @@ -53,21 +53,28 @@ public class Room public void addPlayerToCurrentMiniGame(int index, Client tempClient) { + //fügt eine eingehende Verbindung vom Server dem Minigame hinzu currentMiniGame.addClient(tempClient, index); } + //erstellt ein neues minigame private void activateMinigame() { inMiniGame = true; + + //zufälliges minigame auswählen (mapping hier zu im Client c#) int randomGame = (int) (Math.random() * 1); + //minigame instanz erstellen currentMiniGame = new Minigame(this); try { + //jedem client die anweisung geben die angegebene minigameinstanz zu laden for (int i = 0; i < players.length; i++) { + //i = jeder spieler bekommt vorübergehend seine Server ID zugeordnet um die Spieler im Minigame richtig mappen zu können players[i].output.write(new byte[]{100, (byte) i, (byte) randomGame, 0, 0, 0, 0, 0, 0, 0}); } } catch (Exception e) @@ -78,15 +85,19 @@ public class Room public void closeMinigame() { + //überprüfen ob das minigame existiert if(currentMiniGame != null) { System.out.println("close minigame"); + //das minigame beenden currentMiniGame.end(); + //minigame objekt dem garbage collector überlassen XD currentMiniGame = null; inMiniGame = false; try { + //den clients die Anweisung geben die ursprüngliche welt zu laden und die Minigamemap zu töten ^^ for (int i = 0; i < players.length; i++) { players[i].output.write(new byte[]{101, 0, 0, 0, 0, 0, 0, 0, 0, 0}); @@ -97,7 +108,7 @@ public class Room } } - //sync the activation of the current player to ALL clients + //den nächsten spieler aktivieren (der vor dem minigame dran gewesen wäre) for (int i = 0; i < players.length; i++) { //!!data processing!! diff --git a/Server/src/Server.java b/Server/src/Server.java index 99fc8c2..47110e5 100644 --- a/Server/src/Server.java +++ b/Server/src/Server.java @@ -190,14 +190,17 @@ public class Server break; } break; - //Player wats to join a minigame + //Player wats to join a minigame (nur möglich wenn bereits in einem bestehenden spiel) case 5: int playerIDInRoom = readData[1]; input.read(readData); + //um die eingehende Verbindung einem bestehenden Raum zuordnen zu können String roomCodeOriginal = new String(readData, StandardCharsets.US_ASCII); + //ein temporäre instanz eines clients für das Minigame wird erstellt Client miniGameConnectorClient = new Client(output, input, client); + //die Verbindung wird an das Minigame des Angeforderten Raums weitergeleitet. rooms.get(roomCodeOriginal).addPlayerToCurrentMiniGame(playerIDInRoom, miniGameConnectorClient);