From ed43fa107c74128ee6a6e6e69e5bed315f49910e Mon Sep 17 00:00:00 2001 From: lotodore Date: Mon, 9 Apr 2012 10:22:24 +0000 Subject: [PATCH] Server feedback after report game. --- src/net/common/clientstate.cpp | 15 +++++++++++++++ src/net/common/servergame.cpp | 15 ++++++++++++++- src/net/common/serverlobbythread.cpp | 26 +++++++++++++++++++++----- src/net/servergame.h | 4 ++++ src/net/serverlobbythread.h | 3 +-- 5 files changed, 55 insertions(+), 8 deletions(-) diff --git a/src/net/common/clientstate.cpp b/src/net/common/clientstate.cpp index 165d26d6..58c35a4d 100644 --- a/src/net/common/clientstate.cpp +++ b/src/net/common/clientstate.cpp @@ -765,6 +765,21 @@ AbstractClientStateReceiving::HandlePacket(boost::shared_ptr clien break; } client->GetCallback().SignalNetClientMsgBox(msgCode); + } else if (tmpPacket->GetMsg()->present == PokerTHMessage_PR_reportGameAckMessage) { + ReportGameAckMessage_t *netReportAck = &tmpPacket->GetMsg()->choice.reportGameAckMessage; + unsigned msgCode; + switch (netReportAck->reportGameResult) { + case reportGameResult_gameReportAccepted: + msgCode = MSG_NET_GAMENAME_REPORT_ACCEPTED; + break; + case reportGameResult_gameReportDuplicate: + msgCode = MSG_NET_GAMENAME_REPORT_DUP; + break; + default: + msgCode = MSG_NET_GAMENAME_REPORT_REJECTED; + break; + } + client->GetCallback().SignalNetClientMsgBox(msgCode); } else if (tmpPacket->GetMsg()->present == PokerTHMessage_PR_statisticsMessage) { StatisticsMessage_t *netStatistics = &tmpPacket->GetMsg()->choice.statisticsMessage; diff --git a/src/net/common/servergame.cpp b/src/net/common/servergame.cpp index f63088b8..7efbf98e 100644 --- a/src/net/common/servergame.cpp +++ b/src/net/common/servergame.cpp @@ -52,7 +52,8 @@ ServerGame::ServerGame(boost::shared_ptr lobbyThread, u_int32 m_gameData(gameData), m_curState(NULL), m_id(id), m_name(name), m_password(pwd), m_creatorPlayerDBId(creatorPlayerDBId), m_playerConfig(playerConfig), m_gameNum(1), m_curPetitionId(1), m_voteKickTimer(lobbyThread->GetIOService()), - m_stateTimer1(lobbyThread->GetIOService()), m_stateTimer2(lobbyThread->GetIOService()) + m_stateTimer1(lobbyThread->GetIOService()), m_stateTimer2(lobbyThread->GetIOService()), + m_isNameReported(false) { LOG_VERBOSE("Game object " << GetId() << " created."); } @@ -724,6 +725,18 @@ ServerGame::GetAndResetReactivatePlayers() return tmpList; } +void +ServerGame::SetNameReported() +{ + m_isNameReported = true; +} + +bool +ServerGame::IsNameReported() const +{ + return m_isNameReported; +} + void ServerGame::AddComputerPlayer(boost::shared_ptr player) { diff --git a/src/net/common/serverlobbythread.cpp b/src/net/common/serverlobbythread.cpp index fb60db53..1f0b29bf 100644 --- a/src/net/common/serverlobbythread.cpp +++ b/src/net/common/serverlobbythread.cpp @@ -179,11 +179,11 @@ public: } virtual void ReportGameSuccess(unsigned requestId, unsigned replyId) { - // TODO + m_server.SendReportGameResult(requestId, replyId, true); } virtual void ReportGameFailed(unsigned requestId, unsigned replyId) { - // TODO + m_server.SendReportGameResult(requestId, replyId, false); } private: @@ -1467,11 +1467,11 @@ ServerLobbyThread::HandleNetPacketReportGame(boost::shared_ptr sess GameMap::iterator pos = m_gameMap.find(report.reportedGameId); if (pos != m_gameMap.end() && session->GetPlayerData()) { - if (!IsGameReported(report.reportedGameId)) { + boost::shared_ptr tmpGame(pos->second); + if (!tmpGame->IsNameReported()) { // Temporarily note that this game was reported. // This prevents spamming of the game report. - AddReportedGame(report.reportedGameId); - boost::shared_ptr tmpGame(pos->second); + tmpGame->SetNameReported(); unsigned creatorDBId = tmpGame->GetCreatorDBId(); unsigned reporterDBId = session->GetPlayerData()->GetDBId(); GetDatabase()->AsyncReportGame( @@ -1682,6 +1682,22 @@ ServerLobbyThread::SendReportAvatarResult(unsigned byPlayerId, unsigned reported } } +void +ServerLobbyThread::SendReportGameResult(unsigned byPlayerId, unsigned reportedGameId, bool success) +{ + boost::shared_ptr session = m_sessionManager.GetSessionByUniquePlayerId(byPlayerId); + if (!session) + session = m_gameSessionManager.GetSessionByUniquePlayerId(byPlayerId); + if (session) { + boost::shared_ptr packet(new NetPacket(NetPacket::Alloc)); + packet->GetMsg()->present = PokerTHMessage_PR_reportGameAckMessage; + ReportGameAckMessage_t *netReportAck = &packet->GetMsg()->choice.reportGameAckMessage; + netReportAck->reportedGameId = reportedGameId; + netReportAck->reportGameResult = success ? reportGameResult_gameReportAccepted : reportGameResult_gameReportInvalid; + GetSender().Send(session, packet); + } +} + void ServerLobbyThread::UserBlocked(unsigned playerId) { diff --git a/src/net/servergame.h b/src/net/servergame.h index e4dff935..6d4c3eab 100644 --- a/src/net/servergame.h +++ b/src/net/servergame.h @@ -98,6 +98,9 @@ public: void AddReactivatePlayer(unsigned playerId); PlayerIdList GetAndResetReactivatePlayers(); + void SetNameReported(); + bool IsNameReported() const; + // should be protected, but is needed in function. const Game &GetGame() const; Game &GetGame(); @@ -216,6 +219,7 @@ private: boost::asio::deadline_timer m_voteKickTimer; boost::asio::deadline_timer m_stateTimer1; boost::asio::deadline_timer m_stateTimer2; + bool m_isNameReported; friend class ServerLobbyThread; friend class AbstractServerGameStateReceiving; diff --git a/src/net/serverlobbythread.h b/src/net/serverlobbythread.h index 3db51c4f..d6950f8d 100644 --- a/src/net/serverlobbythread.h +++ b/src/net/serverlobbythread.h @@ -154,10 +154,9 @@ protected: void UserValid(unsigned playerId, const DBPlayerData &dbPlayerData); void UserInvalid(unsigned playerId); void UserBlocked(unsigned playerId); - bool IsGameReported(unsigned /*gameId*/) const {return false;} - void AddReportedGame(unsigned /*gameId*/) {} void SendReportAvatarResult(unsigned byPlayerId, unsigned reportedPlayerId, bool success); + void SendReportGameResult(unsigned byPlayerId, unsigned reportedGameId, bool success); void RequestPlayerAvatar(boost::shared_ptr session); void TimerRemoveGame(const boost::system::error_code &ec); void TimerRemovePlayer(const boost::system::error_code &ec);