Add: Added Partial Logic For Client-Server Serialized Message Handling.

This commit is contained in:
GabrieleRadice
2026-04-19 16:07:05 +02:00
parent c1e9602b35
commit 4b732139ea
3 changed files with 40 additions and 18 deletions
@@ -14,10 +14,11 @@ import it.polimi.ingsw.gc14.Model.Orders.Order4;
import it.polimi.ingsw.gc14.Model.Orders.Order5; import it.polimi.ingsw.gc14.Model.Orders.Order5;
import it.polimi.ingsw.gc14.Model.GamePackage.GameStages; import it.polimi.ingsw.gc14.Model.GamePackage.GameStages;
import java.io.Serializable;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
public class Game { public class Game implements Serializable {
private ArrayList<Player> playersList; private ArrayList<Player> playersList;
private CurrentState currentState; private CurrentState currentState;
@@ -8,11 +8,15 @@ import java.util.List;
public class ClientHandler implements Runnable { public class ClientHandler implements Runnable {
private Socket clientSocket; private Socket clientSocket;
BufferedReader in = null; public ObjectInputStream in = null;
PrintWriter out = null; public ObjectOutputStream out = null;
List<ClientHandler> clientHandlers; List<ClientHandler> clientHandlers;
GameController gameController; GameController gameController;
public Socket getClientSocket() {
return clientSocket;
}
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;
@@ -25,21 +29,11 @@ public class ClientHandler implements Runnable {
} }
private void clientLoop(){ private void clientLoop(){
try{
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
synchronized(out){
out = new PrintWriter(clientSocket.getOutputStream(), true);
}
}
catch(IOException e){
e.printStackTrace();
}
String s = ""; String s = "";
try{ try{
while ((s = in.readLine()) != null) { while ((s = in.readLine()) != null) {
synchronized(out){ synchronized(out){
System.out.println(s); //do something
out.println(s.toUpperCase());
} }
} }
} }
@@ -48,9 +42,17 @@ public class ClientHandler implements Runnable {
} }
} }
public void notifyEvent(Object event) { public void notifyEvent(Object event){
synchronized(out){ synchronized(out){
out.println(event.toString()); try{
out = new ObjectOutputStream(clientSocket.getOutputStream());
out.writeObject(gameController.getModel());
}
catch(IOException e){
e.printStackTrace();
}
} }
} }
} }
@@ -2,7 +2,7 @@ package it.polimi.ingsw.gc14.Network.TCP.Server;
import it.polimi.ingsw.gc14.Controller.GameController; import it.polimi.ingsw.gc14.Controller.GameController;
import java.io.IOException; import java.io.*;
import java.net.*; import java.net.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -15,6 +15,8 @@ public class TCPServer {
private List<ClientHandler> clientHandlers; private List<ClientHandler> clientHandlers;
private int getConnectedPlayers(){ private int getConnectedPlayers(){
return ConnectedPlayers; return ConnectedPlayers;
} }
@@ -46,10 +48,27 @@ public class TCPServer {
e.printStackTrace(); e.printStackTrace();
} }
System.out.println("Accepted"); System.out.println("Accepted player: " + gameController.getModel().getPlayerByUsername(clientSocket.getInetAddress().toString()));
ConnectedPlayers++; ConnectedPlayers++;
ClientHandler clientHandler = new ClientHandler(clientSocket, clientHandlers, gameController); ClientHandler clientHandler = new ClientHandler(clientSocket, clientHandlers, gameController);
clientHandlers.add(clientHandler); clientHandlers.add(clientHandler);
//Sending model to clients
if(ConnectedPlayers == gameController.getModel().getNPlayers()){
for (ClientHandler handler : clientHandlers) {
try {
synchronized(handler.out){
ObjectOutputStream socketTx = new ObjectOutputStream(handler.getClientSocket().getOutputStream());
socketTx.writeObject(gameController.getModel());
}
}
catch(IOException e){
e.printStackTrace();
}
}
}
Thread t = new Thread(clientHandler); Thread t = new Thread(clientHandler);
t.start(); t.start();
} }