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="1681217780586" duration="94000" />
<workItem from="1681218296017" duration="162000" />
<workItem from="1681481242206" duration="12651000" />
<workItem from="1681481242206" duration="13595000" />
</task>
<servers />
</component>
+14
View File
@@ -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<Thread> 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();
}
}
+12 -1
View File
@@ -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!!
+4 -1
View File
@@ -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);