Server kommentare zu minigame system
This commit is contained in:
Generated
+1
-1
@@ -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>
|
||||||
|
|||||||
@@ -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
@@ -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!!
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user