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.GamePackage.GameStages;
import java.io.Serializable;
import java.util.*;
import java.util.stream.Collectors;
public class Game {
public class Game implements Serializable {
private ArrayList<Player> playersList;
private CurrentState currentState;
@@ -8,11 +8,15 @@ import java.util.List;
public class ClientHandler implements Runnable {
private Socket clientSocket;
BufferedReader in = null;
PrintWriter out = null;
public ObjectInputStream in = null;
public ObjectOutputStream out = null;
List<ClientHandler> clientHandlers;
GameController gameController;
public Socket getClientSocket() {
return clientSocket;
}
public ClientHandler(Socket clientSocket, List<ClientHandler> clientHandlers, GameController gameController) {
this.clientSocket = clientSocket;
this.clientHandlers = clientHandlers;
@@ -25,21 +29,11 @@ public class ClientHandler implements Runnable {
}
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 = "";
try{
while ((s = in.readLine()) != null) {
synchronized(out){
System.out.println(s);
out.println(s.toUpperCase());
//do something
}
}
}
@@ -50,7 +44,15 @@ public class ClientHandler implements Runnable {
public void notifyEvent(Object event){
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 java.io.IOException;
import java.io.*;
import java.net.*;
import java.util.ArrayList;
import java.util.List;
@@ -15,6 +15,8 @@ public class TCPServer {
private List<ClientHandler> clientHandlers;
private int getConnectedPlayers(){
return ConnectedPlayers;
}
@@ -46,10 +48,27 @@ public class TCPServer {
e.printStackTrace();
}
System.out.println("Accepted");
System.out.println("Accepted player: " + gameController.getModel().getPlayerByUsername(clientSocket.getInetAddress().toString()));
ConnectedPlayers++;
ClientHandler clientHandler = new ClientHandler(clientSocket, clientHandlers, gameController);
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);
t.start();
}