Hi guys I have problem with my server code for puns game, I am trying to make server send actual list of players when player join game, but server send only first list it get,
Player class:
import java.io.Serializable;
public class Player implements Serializable {
private static final long serialVersionUID = 1;
private String name;
private Boolean isReady = false;
private int score = 0;
public Player(String name) {
this.name = name;
}
public String getName() {
return name;
}
public int getScore() {
return score;
}
}
Server class
import java.io.IOException;
import java.io.Serializable;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
public class Server {
private List<ClientHandler> clients = new ArrayList<>();
private List<Player> playerList = new ArrayList<>(); // Corrected declaration
public static void main(String[] args) {
new Server().start(12345);
}
public void start(int port) {
try (ServerSocket serverSocket = new ServerSocket(port)) {
System.out.println("Server started on port " + port);
while (true) {
Socket clientSocket = serverSocket.accept();
System.out.println("New client connected: " + clientSocket);
ClientHandler clientHandler = new ClientHandler(clientSocket, this, playerList);
clients.add(clientHandler);
new Thread(clientHandler).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
public synchronized void broadcastPlayerList() {
for (ClientHandler client : clients) {
try {
client.sendPlayerList(playerList);
System.out.println(playerList);
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void addPlayer(Player player) {
playerList.add(player);
broadcastPlayerList();
}
}
ClientHandler Class
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.util.List;
public class ClientHandler implements Runnable {
private Socket clientSocket;
private ObjectOutputStream out;
private ObjectInputStream in;
private List<Player> playerList;
private Server server;
public ClientHandler(Socket socket, Server server, List<Player> playerList) throws IOException {
this.clientSocket = socket;
this.playerList = playerList;
this.server = server;
out = new ObjectOutputStream(clientSocket.getOutputStream());
in = new ObjectInputStream(clientSocket.getInputStream());
}
@Override
public void run() {
try {
while (true) {
Object obj = in.readObject();
if (obj instanceof Player) {
Player player = (Player) obj;
server.addPlayer(player);
}
}
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
public void sendPlayerList(List<Player> players) throws IOException {
out.writeObject(players);
out.flush();
}
}
I spend a lot of time on chat gpt and google search to find solution and i couldnt find one working, I am sure that this server is receiving players correctly, but idk why it doesnt send them properly. Thanks for all tips