#pragma once #include #include #include #include #include #include #include #include #include "utils.h" class TCPServer; // Forward declaration class ClientHandler { private: int clientSocket; TCPServer* server; // Reference to the TCPServer instance public: explicit ClientHandler(int clientSocket, TCPServer* server); void handle(); void processMessage(const std::string& message); void closeConnection(); }; class TCPServer { private: int serverSocket; std::vector clientThreads; std::vector clientSockets; // Store connected client sockets int connectedClients = 0; // Track the number of connected clients bool shouldStop = false; // Flag to indicate if the server should stop std::vector clients; // Store connected clients std::vector actions; int actionNb = -1; bool canMove = false; public: explicit TCPServer(int port); void start(); void acceptConnections(); // Broadcast message to all connected clients void broadcastMessage(const char* message, int senderSocket = -1); // Modified method signature void handleMessage(const std::string& message, int clientSocket = -1); void clientDisconnected(int clientSocket); // New method to handle client disconnection void stop(); [[nodiscard]] int nbClients() const; void checkIfAllClientsReady(); ~TCPServer(); };