diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Game.java b/src/main/java/it/polimi/ingsw/gc14/Model/Game.java index 4091090..98507e0 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Game.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Game.java @@ -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 playersList; private CurrentState currentState; diff --git a/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Server/ClientHandler.java b/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Server/ClientHandler.java index 7000c31..6ac06de 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Server/ClientHandler.java +++ b/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Server/ClientHandler.java @@ -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 clientHandlers; GameController gameController; + public Socket getClientSocket() { + return clientSocket; + } + public ClientHandler(Socket clientSocket, List 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 } } } @@ -48,9 +42,17 @@ public class ClientHandler implements Runnable { } } - public void notifyEvent(Object event) { + 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(); + } } } } + + diff --git a/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Server/TCPServer.java b/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Server/TCPServer.java index 7cafb9e..0614f7b 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Server/TCPServer.java +++ b/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Server/TCPServer.java @@ -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 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(); }