mirror of
https://github.com/kierankihn/uno-game.git
synced 2025-12-27 02:13:18 +08:00
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:
@@ -34,6 +34,7 @@ namespace UNO::NETWORK {
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct InitGamePayload {
|
struct InitGamePayload {
|
||||||
|
size_t playerId;
|
||||||
GAME::DiscardPile discardPile;
|
GAME::DiscardPile discardPile;
|
||||||
std::multiset<GAME::Card> handCard;
|
std::multiset<GAME::Card> handCard;
|
||||||
size_t currentPlayerIndex;
|
size_t currentPlayerIndex;
|
||||||
|
|||||||
@@ -55,7 +55,8 @@ namespace UNO::NETWORK {
|
|||||||
|
|
||||||
nlohmann::json MessageSerializer::serializePayload(const InitGamePayload &payload)
|
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())},
|
{"hand_card", serializeCards(payload.handCard.begin(), payload.handCard.end())},
|
||||||
{"current_player", payload.currentPlayerIndex}};
|
{"current_player", payload.currentPlayerIndex}};
|
||||||
}
|
}
|
||||||
@@ -291,10 +292,14 @@ namespace UNO::NETWORK {
|
|||||||
if (payload.is_object() == false) {
|
if (payload.is_object() == false) {
|
||||||
throw std::invalid_argument("Invalid INIT_GAME payload: expected JSON object");
|
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) {
|
if (payload.at("current_player").is_number_unsigned() == false) {
|
||||||
throw std::invalid_argument("Invalid 'current_player' field in INIT_GAME payload: expected unsigned integer");
|
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")),
|
deserializeHandCard(payload.at("hand_card")),
|
||||||
payload.at("current_player")};
|
payload.at("current_player")};
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user