- Updated `InitGamePayload` to include an empty `players` array.
- Adjusted related serialization and deserialization test cases in `MessageSerializerTest`.
- Added `ServerGameStage` check in turn validation logic.
- Switched to `ClientPlayerState` in `handleStartGame` for player initialization.
- Integrated `endGame` in `handleEndGame` and removed redundant `reset` call.
- Added `clear` methods to `PlayerState`, `ServerPlayerState`, and `HandCard`.
- Introduced `endGame` methods to `GameState`, `ClientGameState`, and `ServerGameState`.
- Improved `init` and `nextPlayer` logic in `ClientGameState`.
- Added `getClientGameStage` and `getServerGameStage` methods to retrieve game stages.
- Updated `InitGamePayload` to use `ClientPlayerState` instead of `PlayerPublicState`.
- Adjusted serialization and deserialization methods in `MessageSerializer` accordingly.
- Replaced iterator-based `play` methods with a single card-based method.
- Streamlined logic in `ServerPlayerState`, `ClientGameState`, and `HandCard`.
- Introduced `PlayerPublicState` structure to represent player state.
- Updated `InitGamePayload` to include `PlayerPublicState` for all players.
- Enhanced `MessageSerializer` to handle serialization and deserialization of `PlayerPublicState`.
- Removed redundant tests and merged similar cases in `NetworkClientTest`.
- Updated `Connect` and `Send` tests to streamline functionality.
- Enhanced `MessageSerializerTest` to validate `playerId` in `InitGamePayload`.
- Updated `InitGamePayload` to include `playerId`.
- Modified `MessageSerializer` to handle serialization and deserialization of `playerId`.
- Added validation for `playerId` in INIT_GAME payload.
- Moved `Session` implementation to `Session.cpp` and `Session.h`.
- Updated `Session` to use a `message` queue for sending data, improving handling of writes.
- Adjusted `NetworkClient` and `NetworkServer` to integrate with the new `Session` logic.
- Introduced `reset` method in `ServerGameState` to allow game state reinitialization.
- Added `handleEndGame` in `UnoServer` to detect and process game conclusion.
- Changed `uno-game-lib` dependencies to `PUBLIC` visibility for `ftxui` components, `nlohmann_json`, and `asio`.
- Modified `uno-game-test` to use `PRIVATE` visibility for `uno-game-lib`.
- Added `UnoServer` class to handle player actions, game state, and networking.
- Supported message handling for joining, starting, drawing, and playing cards.
- Integrated `ServerGameState` with `NetworkServer` for multiplayer game logic.
- Created `main.cpp` to initialize and run the Uno server.
- Updated `InitGamePayload` to use `std::multiset<Card>` for `handCard`.
- Removed `serializeHandCard` method and replaced its usage with `serializeCards`.
- Adjusted `deserializeHandCard` to return `std::multiset<Card>` and simplified insertion logic.
- Cleaned up unused declarations in `MessageSerializer`.
- Updated `updateStateByDraw` to return a `std::vector<Card>` instead of `void`.
- Adjusted `ServerGameState`, `GameState`, and `ClientGameState` implementations to reflect the change.
- Removed `GameStatus` dependency from `GameState` constructors.
- Adjusted `ClientGameState` and `ServerGameState` constructors accordingly.
- Simplified `ServerGameState::init()` to handle card initialization and player actions.
- Updated tests to reflect these changes.
- Introduced comprehensive test cases for `NetworkClient` and `NetworkServer` functionality.
- Added tests for constructor, `connect`, `send`, `read`, and round-trip scenarios in `NetworkClientTest`.
- Added tests for player management, message sending, and concurrent access in `NetworkServerTest`.
- Updated `CMakeLists.txt` to include `NetworkClientTest` and `NetworkServerTest` in the build configuration.
- Added `disconnect` method to gracefully close existing connections before establishing a new one.
- Updated `connect` to call `disconnect` to prevent resource conflicts.
- Implemented `stop` method in `NetworkServer` to close the acceptor and stop the IO context.
- Updated `NetworkServer.h` with corresponding method declaration and documentation.
- Introduced `NetworkClient` class for client-side TCP communication.
- Implemented `connect`, `send`, and `read` methods for message handling.
- Updated `CMakeLists.txt` to include `NetworkClient.cpp` in the build configuration.
- Implemented `NetworkServer` and `Session` classes for handling TCP communication with players.
- Added `NetworkServer.cpp` and `NetworkServer.h` to the project.
- Integrated `asio` library into the build configuration in `CMakeLists.txt`.
- Added `status_code` expectations in serialization and deserialization tests.
- Introduced tests for invalid `status_code` handling in `MessageSerializer`.
- Updated test cases to include `MessageStatus::OK` for payload validation and round-trip scenarios.
- Added reusable `serializeCards` function for card list serialization.
- Enhanced `DrawCardPayload` with a `cards` field.
- Introduced `serializeMessageStatus` and `deserializeMessageStatus` for message status handling.
- Updated deserialization logic to validate and include `status_code` field.
- Improved error messaging and validation for payload deserialization methods.
- Introduced `MessageStatus` for message validation and tracking.
- Added `EMPTY` payload type to `MessagePayloadType` for invalid or empty messages.
- Updated `Message` constructor to validate payload type and status.
- Implemented `getMessageStatus` to retrieve the message status.
- Disallow short `if` statements on a single line by setting `AllowShortIfStatementsOnASingleLine` to `Never`.
- Enable insertion of braces for control statements with `InsertBraces`.
- Added comprehensive unit tests for `MessageSerializer` in `MessageSerializerTest.cpp`.
- Included `MessageSerializerTest.cpp` in `test/CMakeLists.txt`.
- Implemented `MessageSerializer` class to handle JSON serialization and deserialization of game messages and payloads.
- Added `MessageSerializer.cpp` and `MessageSerializer.h` to `CMakeLists.txt`.
- Linked `nlohmann_json` library to the project.
- Introduced `Message` class in `src/network` for handling game-related message payloads (e.g., `JOIN_GAME`, `START_GAME`, etc.).
- Added `Message.cpp` and `Message.h` to `CMakeLists.txt`.