From 731ed5a890f82b12da81003fea8e24773ff4845d Mon Sep 17 00:00:00 2001 From: Kieran Kihn <114803508+kierankihn@users.noreply.github.com> Date: Thu, 4 Dec 2025 16:21:11 +0800 Subject: [PATCH] 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. --- src/network/Message.h | 1 + src/network/MessageSerializer.cpp | 9 +++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/network/Message.h b/src/network/Message.h index d260436..852c6dc 100644 --- a/src/network/Message.h +++ b/src/network/Message.h @@ -34,6 +34,7 @@ namespace UNO::NETWORK { }; struct InitGamePayload { + size_t playerId; GAME::DiscardPile discardPile; std::multiset handCard; size_t currentPlayerIndex; diff --git a/src/network/MessageSerializer.cpp b/src/network/MessageSerializer.cpp index e51da2a..a929456 100644 --- a/src/network/MessageSerializer.cpp +++ b/src/network/MessageSerializer.cpp @@ -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")}; }