Comments
This commit is contained in:
+60
-4
@@ -8,17 +8,27 @@ import java.util.List;
|
||||
import java.util.Timer;
|
||||
import java.util.TimerTask;
|
||||
|
||||
/**
|
||||
* this class handels all operations / syncs performed in a single room
|
||||
*/
|
||||
public class Room
|
||||
{
|
||||
//tells how many clients can connect to a room
|
||||
private Client[] players = new Client[2];
|
||||
//the array of players start positions
|
||||
private Vector3[] startPositions;
|
||||
//the generated roomcode
|
||||
private String roomCode;
|
||||
//the instance to the main server
|
||||
private Server server;
|
||||
|
||||
//all threads created stored in this list to close them after room closure
|
||||
private List<Thread> threads = new ArrayList<>();
|
||||
|
||||
//count of players in the game
|
||||
private int playerCount = 0;
|
||||
|
||||
//tells players turn (array index)
|
||||
private int currentPlayer = 0;
|
||||
|
||||
private long timeOut = 0;
|
||||
@@ -31,6 +41,7 @@ public class Room
|
||||
this.roomCode = roomCode;
|
||||
startPositions = new Vector3[4];
|
||||
|
||||
//set up the start positions
|
||||
startPositions[0] = new Vector3(96, 1, 126);
|
||||
startPositions[1] = new Vector3(92, 1, 126);
|
||||
startPositions[2] = new Vector3(96, 1, 128);
|
||||
@@ -38,6 +49,7 @@ public class Room
|
||||
|
||||
this.server = server;
|
||||
|
||||
//calculates a room timeout
|
||||
try
|
||||
{
|
||||
t = new Timer();
|
||||
@@ -79,29 +91,40 @@ public class Room
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a Client to the game (on new player joined the room)
|
||||
* @param client
|
||||
*/
|
||||
public void addClient(Client client)
|
||||
{
|
||||
//the timeout variable for a single player
|
||||
timeOut = System.currentTimeMillis();
|
||||
|
||||
//loops through all players existing and sends the needed information
|
||||
for (int i = 0; i < players.length; i++)
|
||||
{
|
||||
//places the new joined player in the next free slot
|
||||
if (players[i] == null)
|
||||
{
|
||||
players[i] = client;
|
||||
playerCount++;
|
||||
|
||||
//LOG
|
||||
System.out.println("[" + Server.getDateTime() + "] " + client.name.replace(" ", "") + " joined room " + roomCode + " successfully as player " + i);
|
||||
|
||||
//creates a thread for the connection with the joined player
|
||||
Thread t = new Thread(new Runnable()
|
||||
{
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
//assignes a player id
|
||||
int player = playerCount - 1;
|
||||
|
||||
DataInputStream input = null;
|
||||
try
|
||||
{
|
||||
//tries to get the input stream (TCP)
|
||||
input = new DataInputStream(players[player].socket.getInputStream());
|
||||
} catch (IOException e)
|
||||
{
|
||||
@@ -112,10 +135,13 @@ public class Room
|
||||
{
|
||||
try
|
||||
{
|
||||
//this is a buffer for all data being received by the player
|
||||
byte[] readData = new byte[10];
|
||||
|
||||
//read the data to the buffer
|
||||
input.read(readData);
|
||||
|
||||
//reset the timeout once something is received
|
||||
timeOut = System.currentTimeMillis();
|
||||
|
||||
|
||||
@@ -128,6 +154,7 @@ public class Room
|
||||
----------------------------------------
|
||||
----------------------------------------
|
||||
*/
|
||||
//Checks which action (array[0]) is received
|
||||
switch (readData[0])
|
||||
{
|
||||
|
||||
@@ -136,6 +163,7 @@ public class Room
|
||||
case 3:
|
||||
for (int i = 0; i < players.length; i++)
|
||||
{
|
||||
//sync to all OTHER players
|
||||
if (i != player)
|
||||
{
|
||||
players[i].output.write(new byte[]{3, (byte) player, readData[1], 0, 0, 0, 0, 0, 0, 0});
|
||||
@@ -147,6 +175,7 @@ public class Room
|
||||
case 4:
|
||||
for (int i = 0; i < players.length; i++)
|
||||
{
|
||||
//sync to all OTHER players
|
||||
if (i != player)
|
||||
{
|
||||
players[i].output.write(new byte[]{4, (byte) player, readData[1], 0, 0, 0, 0, 0, 0, 0});
|
||||
@@ -157,11 +186,13 @@ public class Room
|
||||
//Spieler ist fertig mit seinem Zug
|
||||
//1 x, x = next player
|
||||
case 5:
|
||||
//calculate the next player
|
||||
currentPlayer++;
|
||||
if (currentPlayer >= players.length)
|
||||
{
|
||||
currentPlayer = 0;
|
||||
}
|
||||
//sync the activation of the current player to ALL clients
|
||||
for (int i = 0; i < players.length; i++)
|
||||
{
|
||||
players[i].output.write(new byte[]{2, (byte) currentPlayer, 0, 0, 0, 0, 0, 0, 0, 0});
|
||||
@@ -173,6 +204,7 @@ public class Room
|
||||
case 6:
|
||||
for (int i = 0; i < players.length; i++)
|
||||
{
|
||||
//sync to OTHER players
|
||||
if (i != player)
|
||||
{
|
||||
players[i].output.write(new byte[]{6, (byte)player, readData[1], 0, 0, 0, 0, 0, 0, 0});
|
||||
@@ -180,18 +212,20 @@ public class Room
|
||||
}
|
||||
break;
|
||||
|
||||
//Eventstop (ItemShop, BuyStar, ...) ist fertig
|
||||
//Eventstop (ItemShop, BuyStar, ...) ist fertig
|
||||
//1 x, x = player
|
||||
case 7:
|
||||
//sync to ALL players
|
||||
for (int i = 0; i < players.length; i++)
|
||||
{
|
||||
players[i].output.write(new byte[]{7, (byte)player, 0, 0, 0, 0, 0, 0, 0, 0});
|
||||
players[i].output.write(new byte[]{7, (byte)player, 0, 0, 0, 0, 0, 0, 0, 0});
|
||||
}
|
||||
break;
|
||||
//Spieler hat einen Stern gekauft
|
||||
case 8:
|
||||
for (int i = 0; i < players.length; i++)
|
||||
{
|
||||
//sync to OTHER players
|
||||
if (i != player)
|
||||
{
|
||||
players[i].output.write(new byte[]{8, (byte)player, 0, 0, 0, 0, 0, 0, 0, 0});
|
||||
@@ -204,12 +238,14 @@ public class Room
|
||||
case 9:
|
||||
for (int i = 0; i < players.length; i++)
|
||||
{
|
||||
//Sync to OTHER players
|
||||
if (i != player)
|
||||
{
|
||||
players[i].output.write(new byte[]{9, (byte)player, readData[1], 0, 0, 0, 0, 0, 0, 0});
|
||||
}
|
||||
}
|
||||
break;
|
||||
//the timeout check action
|
||||
case 126:
|
||||
players[player].lastTimeSendTimeOutCheck = System.currentTimeMillis();
|
||||
break;
|
||||
@@ -217,13 +253,17 @@ public class Room
|
||||
|
||||
} catch (IOException e)
|
||||
{
|
||||
//if something is crashing, the room is being deleted
|
||||
server.deleteRoom(roomCode);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
//name the thread for better debugging
|
||||
t.setName("Thread Player: " + (playerCount - 1));
|
||||
//start the thread
|
||||
t.start();
|
||||
//add the thread to the threads list
|
||||
threads.add(t);
|
||||
break;
|
||||
}
|
||||
@@ -241,11 +281,16 @@ public class Room
|
||||
//1 1 playable character
|
||||
//2-3-4 default pos
|
||||
//5 player index
|
||||
|
||||
//if the player should be playable
|
||||
if (j == k)
|
||||
{
|
||||
try
|
||||
{
|
||||
//sends the inital message to the player
|
||||
players[j].output.write(new byte[]{1, 1, (byte) startPositions[k].x, (byte) startPositions[k].y, (byte) startPositions[k].z, (byte) k, 0, 0, 0, 0});
|
||||
|
||||
//sends the name of the player (ASCII encoding)............................................................................
|
||||
byte[] name = players[k].name.substring(0, 8).getBytes(StandardCharsets.US_ASCII);
|
||||
byte[] send = new byte[10];
|
||||
send[0] = 5;
|
||||
@@ -257,11 +302,14 @@ public class Room
|
||||
}
|
||||
|
||||
players[j].output.write(send);
|
||||
//stop sending the name................................................................................
|
||||
} catch (IOException e)
|
||||
{
|
||||
|
||||
}
|
||||
} else
|
||||
}
|
||||
//if the player should be a bot
|
||||
else
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -287,6 +335,8 @@ public class Room
|
||||
|
||||
//0 2, activate a player
|
||||
//1 x, x = idx
|
||||
|
||||
//send the inital activation message
|
||||
try
|
||||
{
|
||||
for (Client c : players)
|
||||
@@ -300,13 +350,18 @@ public class Room
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Closes the room
|
||||
*/
|
||||
public void closeRoom()
|
||||
{
|
||||
//try to cick all the players (still connected) of the room
|
||||
try
|
||||
{
|
||||
|
||||
|
||||
if (players[0] != null)
|
||||
{
|
||||
//127 is the action for room cick
|
||||
players[0].output.write(new byte[]{127, 0, 0, 0, 0, 0, 0, 0, 0, 0});
|
||||
}
|
||||
|
||||
@@ -348,6 +403,7 @@ public class Room
|
||||
}
|
||||
|
||||
|
||||
//try to close all open threads (not crashed yet)
|
||||
for (int i = 0; i < threads.size(); i++)
|
||||
{
|
||||
try
|
||||
|
||||
Reference in New Issue
Block a user