Server kommentare zu minigame system

This commit is contained in:
brausjonas
2023-04-15 04:00:47 +02:00
parent 412490ea85
commit 9938247ff4
4 changed files with 31 additions and 3 deletions
+1 -1
View File
@@ -102,7 +102,7 @@
<workItem from="1681130452664" duration="6192000" /> <workItem from="1681130452664" duration="6192000" />
<workItem from="1681217780586" duration="94000" /> <workItem from="1681217780586" duration="94000" />
<workItem from="1681218296017" duration="162000" /> <workItem from="1681218296017" duration="162000" />
<workItem from="1681481242206" duration="12651000" /> <workItem from="1681481242206" duration="13595000" />
</task> </task>
<servers /> <servers />
</component> </component>
+14
View File
@@ -8,8 +8,13 @@ import java.util.TimerTask;
public class Minigame public class Minigame
{ {
//referenz auf den ursprünglichen raum
protected Room room; protected Room room;
//liste aller threads zum korrekten beenden dieser
private List<Thread> threads = new ArrayList<>(); private List<Thread> threads = new ArrayList<>();
//liste aller temporären minigame verbindungen
private Client[] players; private Client[] players;
public Minigame(Room room) public Minigame(Room room)
@@ -18,6 +23,7 @@ public class Minigame
players = new Client[room.players.length]; 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) public void addClient(Client client, int index)
{ {
Thread t = new Thread(new Runnable() Thread t = new Thread(new Runnable()
@@ -25,9 +31,12 @@ public class Minigame
@Override @Override
public void run() public void run()
{ {
players[index] = client; players[index] = client;
DataInputStream input = client.input; DataInputStream input = client.input;
DataOutputStream output = client.output; DataOutputStream output = client.output;
//Buffer für eingehende narichten
byte[] readData = new byte[10]; byte[] readData = new byte[10];
@@ -40,6 +49,7 @@ public class Minigame
} }
//eingehende narichten verarbeiten:
while (true) while (true)
{ {
try try
@@ -79,8 +89,10 @@ public class Minigame
t.start(); t.start();
} }
//das minigame wird beendet
public void end() public void end()
{ {
//alle bestehenden threads in diesem Minigame beenden
for (int i = 0; i < threads.size(); i++) for (int i = 0; i < threads.size(); i++)
{ {
try try
@@ -92,11 +104,13 @@ public class Minigame
} }
} }
//temporäre verbindungen schließen
for(int i = 0; i < players.length; i++) for(int i = 0; i < players.length; i++)
{ {
players[i].close(); players[i].close();
} }
//threads liste löschen
threads.clear(); threads.clear();
} }
} }
+12 -1
View File
@@ -53,21 +53,28 @@ public class Room
public void addPlayerToCurrentMiniGame(int index, Client tempClient) public void addPlayerToCurrentMiniGame(int index, Client tempClient)
{ {
//fügt eine eingehende Verbindung vom Server dem Minigame hinzu
currentMiniGame.addClient(tempClient, index); currentMiniGame.addClient(tempClient, index);
} }
//erstellt ein neues minigame
private void activateMinigame() private void activateMinigame()
{ {
inMiniGame = true; inMiniGame = true;
//zufälliges minigame auswählen (mapping hier zu im Client c#)
int randomGame = (int) (Math.random() * 1); int randomGame = (int) (Math.random() * 1);
//minigame instanz erstellen
currentMiniGame = new Minigame(this); currentMiniGame = new Minigame(this);
try try
{ {
//jedem client die anweisung geben die angegebene minigameinstanz zu laden
for (int i = 0; i < players.length; i++) 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}); players[i].output.write(new byte[]{100, (byte) i, (byte) randomGame, 0, 0, 0, 0, 0, 0, 0});
} }
} catch (Exception e) } catch (Exception e)
@@ -78,15 +85,19 @@ public class Room
public void closeMinigame() public void closeMinigame()
{ {
//überprüfen ob das minigame existiert
if(currentMiniGame != null) if(currentMiniGame != null)
{ {
System.out.println("close minigame"); System.out.println("close minigame");
//das minigame beenden
currentMiniGame.end(); currentMiniGame.end();
//minigame objekt dem garbage collector überlassen XD
currentMiniGame = null; currentMiniGame = null;
inMiniGame = false; inMiniGame = false;
try 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++) for (int i = 0; i < players.length; i++)
{ {
players[i].output.write(new byte[]{101, 0, 0, 0, 0, 0, 0, 0, 0, 0}); 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++) for (int i = 0; i < players.length; i++)
{ {
//!!data processing!! //!!data processing!!
+4 -1
View File
@@ -190,14 +190,17 @@ public class Server
break; break;
} }
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: case 5:
int playerIDInRoom = readData[1]; int playerIDInRoom = readData[1];
input.read(readData); input.read(readData);
//um die eingehende Verbindung einem bestehenden Raum zuordnen zu können
String roomCodeOriginal = new String(readData, StandardCharsets.US_ASCII); 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); Client miniGameConnectorClient = new Client(output, input, client);
//die Verbindung wird an das Minigame des Angeforderten Raums weitergeleitet.
rooms.get(roomCodeOriginal).addPlayerToCurrentMiniGame(playerIDInRoom, miniGameConnectorClient); rooms.get(roomCodeOriginal).addPlayerToCurrentMiniGame(playerIDInRoom, miniGameConnectorClient);