Fikset oppdeling og lagt til metode for å merkere døde spillere.

This commit is contained in:
Steinar Aalstad Lillesund 2020-04-14 16:03:01 +02:00
parent 99f7578cd7
commit 911a725a26

View File

@ -1,14 +1,11 @@
package inf112.fiasko.roborally.networking; package inf112.fiasko.roborally.networking;
import com.esotericsoftware.kryonet.Connection; import com.esotericsoftware.kryonet.Connection;
import com.esotericsoftware.kryonet.Listener;
import com.esotericsoftware.kryonet.Server; import com.esotericsoftware.kryonet.Server;
import inf112.fiasko.roborally.element_properties.RobotID; import inf112.fiasko.roborally.elementproperties.RobotID;
import inf112.fiasko.roborally.networking.containers.ErrorResponse;
import inf112.fiasko.roborally.utility.NetworkUtil; import inf112.fiasko.roborally.utility.NetworkUtil;
import java.io.IOException; import java.io.IOException;
import java.util.HashMap; import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
@ -31,6 +28,10 @@ public class RoboRallyServer {
server.addListener(listener); server.addListener(listener);
} }
public void setDeadPlayers(List<RobotID> deadRobotList) {
listener.setDeadPlayers(deadRobotList);
}
/** /**
* Gets a map between connections and their robot id * Gets a map between connections and their robot id
* @return A mapping between connections and robot ids * @return A mapping between connections and robot ids
@ -59,72 +60,3 @@ public class RoboRallyServer {
} }
} }
/**
* This listener handles all sending and responses for the server
*/
class RoboRallyServerListener extends Listener {
private Connection host;
private final Map<Connection, RobotID> clients;
private final Map<Connection, String> playerNames;
/**
* Instantiates a new Robo Rally server listener
*/
RoboRallyServerListener() {
super();
clients = new HashMap<>();
playerNames = new HashMap<>();
}
/**
* Gets a map between connections and their player name
* @return A mapping between connections and robot ids
*/
public Map<Connection, String> getPlayerNames() {
return playerNames;
}
/**
* Gets a map between connections and their robot id
* @return A mapping between connections and robot ids
*/
public Map<Connection, RobotID> getRobotID() {
return clients;
}
@Override
public void received (Connection connection, Object object) {
if (object instanceof String) {
String playerName = (String) object;
if (playerNames.values().contains(playerName)) {
String errorMessage = "The player name send is already taken.";
connection.sendTCP(new ErrorResponse(errorMessage, new IllegalArgumentException(errorMessage)));
} else {
playerNames.put(connection, playerName);
}
}
}
@Override
public void connected(Connection connection) {
//The first client to connect is assumed to be the host
if (host == null) {
host = connection;
}
//Prevents more than 8 players from connecting at once
if (clients.size() >= 8) {
String errorMessage = "The server already has 8 players. You cannot join.";
connection.sendTCP(new ErrorResponse(errorMessage, new IOException(errorMessage)));
connection.close();
return;
}
clients.put(connection, RobotID.getRobotIDFromID(clients.size() + 1));
System.out.println(connection.getRemoteAddressTCP() + " connected");
}
@Override
public void disconnected(Connection connection) {
System.out.println(connection.getRemoteAddressTCP() + " disconnected");
}
}