Add: Added Partial Logic For Client Connection Handling And Termination In TCPServer.java.

This commit is contained in:
GabrieleRadice
2026-04-18 19:17:55 +02:00
parent 47f39d3c2b
commit c1e9602b35
2 changed files with 23 additions and 13 deletions
@@ -12,37 +12,44 @@ public class ClientHandler implements Runnable {
PrintWriter out = null; PrintWriter out = null;
List<ClientHandler> clientHandlers; List<ClientHandler> clientHandlers;
GameController gameController; GameController gameController;
public ClientHandler(Socket clientSocket, List<ClientHandler> clientHandlers, GameController gameController) { public ClientHandler(Socket clientSocket, List<ClientHandler> clientHandlers, GameController gameController) {
this.clientSocket = clientSocket; this.clientSocket = clientSocket;
this.clientHandlers = clientHandlers; this.clientHandlers = clientHandlers;
this.gameController = gameController; this.gameController = gameController;
} }
@Override @Override
public void run() { public void run(){
clientLoop(); clientLoop();
} }
private void clientLoop() {
try { private void clientLoop(){
try{
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
synchronized (out) { synchronized(out){
out = new PrintWriter(clientSocket.getOutputStream(), true); out = new PrintWriter(clientSocket.getOutputStream(), true);
} }
} catch (IOException e) { }
catch(IOException e){
e.printStackTrace(); e.printStackTrace();
} }
String s = ""; String s = "";
try{ try{
while ((s = in.readLine()) != null) { while ((s = in.readLine()) != null) {
synchronized(out){
System.out.println(s); System.out.println(s);
out.println(s.toUpperCase()); out.println(s.toUpperCase());
} }
} }
}
catch (IOException e) { catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
private void notifyEvent(Object event) {
synchronized (out) { public void notifyEvent(Object event) {
synchronized(out){
out.println(event.toString()); out.println(event.toString());
} }
} }
@@ -37,16 +37,15 @@ public class TCPServer {
try{ try{
clientSocket = serverTCP.accept(); clientSocket = serverTCP.accept();
if(!gameController.addPlayer(clientSocket.getInputStream().toString()) || ConnectedPlayers >= clientHandlers.size()){ if(!gameController.addPlayer(clientSocket.getInputStream().toString()) || ConnectedPlayers > gameController.getModel().getNPlayers()){
clientSocket.close(); clientSocket.close();
System.out.println("Player already present or username is invalid. Connection terminated.\n"); System.out.println("Invalid parameters. Connection terminated.\n");
} }
} }
catch (IOException e){ catch (IOException e){
e.printStackTrace(); e.printStackTrace();
} }
System.out.println("Accepted"); System.out.println("Accepted");
ConnectedPlayers++; ConnectedPlayers++;
ClientHandler clientHandler = new ClientHandler(clientSocket, clientHandlers, gameController); ClientHandler clientHandler = new ClientHandler(clientSocket, clientHandlers, gameController);
@@ -56,8 +55,12 @@ public class TCPServer {
} }
} }
private TCPServer(GameController gameController, int port) { private TCPServer(GameController gameController, int port){
this.port = port; this.port = port;
this.gameController = gameController; this.gameController = gameController;
} }
public void broadcastUpdate(Object event){
clientHandlers.forEach((x) -> x.notifyEvent(event));
}
} }