feat(network): add playerId to InitGamePayload

- Updated `InitGamePayload` to include `playerId`.
- Modified `MessageSerializer` to handle serialization and deserialization of `playerId`.
- Added validation for `playerId` in INIT_GAME payload.
This commit is contained in:
Kieran Kihn
2025-12-04 16:21:11 +08:00
parent 1d2e77aca3
commit 731ed5a890
2 changed files with 8 additions and 2 deletions

View File

@@ -34,6 +34,7 @@ namespace UNO::NETWORK {
};
struct InitGamePayload {
size_t playerId;
GAME::DiscardPile discardPile;
std::multiset<GAME::Card> handCard;
size_t currentPlayerIndex;

View File

@@ -55,7 +55,8 @@ namespace UNO::NETWORK {
nlohmann::json MessageSerializer::serializePayload(const InitGamePayload &payload)
{
return {{"discard_pile", serializeDiscardPile(payload.discardPile)},
return {{"player_id", payload.playerId},
{"discard_pile", serializeDiscardPile(payload.discardPile)},
{"hand_card", serializeCards(payload.handCard.begin(), payload.handCard.end())},
{"current_player", payload.currentPlayerIndex}};
}
@@ -291,10 +292,14 @@ namespace UNO::NETWORK {
if (payload.is_object() == false) {
throw std::invalid_argument("Invalid INIT_GAME payload: expected JSON object");
}
if (payload.at("player_id").is_number_unsigned() == false) {
throw std::invalid_argument("Invalid 'player_id' field in INIT_GAME payload: expected unsigned interger");
}
if (payload.at("current_player").is_number_unsigned() == false) {
throw std::invalid_argument("Invalid 'current_player' field in INIT_GAME payload: expected unsigned integer");
}
return {deserializeDiscardPile(payload.at("discard_pile")),
return {payload.at("player_id"),
deserializeDiscardPile(payload.at("discard_pile")),
deserializeHandCard(payload.at("hand_card")),
payload.at("current_player")};
}