From dbdd135bc7846d3d3c73ec70e655ff7d57a3ee57 Mon Sep 17 00:00:00 2001 From: lotodore Date: Sun, 8 Apr 2012 16:54:31 +0000 Subject: [PATCH] More work on report game function on server side. --- src/db/common/serverdbgeneric.cpp | 6 ++++ src/db/serverdbcallback.h | 3 ++ src/db/serverdbgeneric.h | 1 + src/db/serverdbinterface.h | 1 + src/db/serverdbnoaction.h | 1 + src/net/common/serverlobbythread.cpp | 42 ++++++++++++++++++++++++++++ src/net/serverlobbythread.h | 2 ++ 7 files changed, 56 insertions(+) diff --git a/src/db/common/serverdbgeneric.cpp b/src/db/common/serverdbgeneric.cpp index afe7d268..19f9de6c 100644 --- a/src/db/common/serverdbgeneric.cpp +++ b/src/db/common/serverdbgeneric.cpp @@ -90,3 +90,9 @@ ServerDBGeneric::AsyncReportAvatar(unsigned requestId, unsigned replyId, DB_id / { m_ioService->post(boost::bind(&ServerDBCallback::ReportAvatarFailed, &m_callback, requestId, replyId)); } + +void +ServerDBGeneric::AsyncReportGame(unsigned requestId, unsigned replyId, DB_id */*creatorPlayerId*/, unsigned /*gameId*/, const std::string &/*gameName*/, DB_id */*byPlayerId*/) +{ + m_ioService->post(boost::bind(&ServerDBCallback::ReportGameFailed, &m_callback, requestId, replyId)); +} diff --git a/src/db/serverdbcallback.h b/src/db/serverdbcallback.h index 4853751f..a8d4666b 100644 --- a/src/db/serverdbcallback.h +++ b/src/db/serverdbcallback.h @@ -47,6 +47,9 @@ public: virtual void ReportAvatarSuccess(unsigned requestId, unsigned replyId) = 0; virtual void ReportAvatarFailed(unsigned requestId, unsigned replyId) = 0; + + virtual void ReportGameSuccess(unsigned requestId, unsigned replyId) = 0; + virtual void ReportGameFailed(unsigned requestId, unsigned replyId) = 0; }; #endif diff --git a/src/db/serverdbgeneric.h b/src/db/serverdbgeneric.h index a13b15ec..801203a9 100644 --- a/src/db/serverdbgeneric.h +++ b/src/db/serverdbgeneric.h @@ -47,6 +47,7 @@ public: virtual void EndGame(unsigned requestId); virtual void AsyncReportAvatar(unsigned requestId, unsigned replyId, DB_id reportedPlayerId, const std::string &avatarHash, const std::string &avatarType, DB_id *byPlayerId); + virtual void AsyncReportGame(unsigned requestId, unsigned replyId, DB_id *creatorPlayerId, unsigned gameId, const std::string &gameName, DB_id *byPlayerId); private: boost::shared_ptr m_ioService; diff --git a/src/db/serverdbinterface.h b/src/db/serverdbinterface.h index 3b0b1f61..d354f486 100644 --- a/src/db/serverdbinterface.h +++ b/src/db/serverdbinterface.h @@ -47,6 +47,7 @@ public: virtual void EndGame(unsigned requestId) = 0; virtual void AsyncReportAvatar(unsigned requestId, unsigned replyId, DB_id reportedPlayerId, const std::string &avatarHash, const std::string &avatarType, DB_id *byPlayerId) = 0; + virtual void AsyncReportGame(unsigned requestId, unsigned replyId, DB_id *creatorPlayerId, unsigned gameId, const std::string &gameName, DB_id *byPlayerId) = 0; }; #endif diff --git a/src/db/serverdbnoaction.h b/src/db/serverdbnoaction.h index 8fc34e73..6d85587d 100644 --- a/src/db/serverdbnoaction.h +++ b/src/db/serverdbnoaction.h @@ -45,6 +45,7 @@ public: virtual void EndGame(unsigned /*requestId*/) {} virtual void AsyncReportAvatar(unsigned /*requestId*/, unsigned /*replyId*/, DB_id /*reportedPlayerId*/, const std::string &/*avatarHash*/, const std::string &/*avatarType*/, DB_id * /*byPlayerId*/) {} + virtual void AsyncReportGame(unsigned /*requestId*/, unsigned /*replyId*/, DB_id */*creatorPlayerId*/, unsigned /*gameId*/, const std::string &/*gameName*/, DB_id */*byPlayerId*/) {} }; #endif // _SERVERDBNOACTION_H_ diff --git a/src/net/common/serverlobbythread.cpp b/src/net/common/serverlobbythread.cpp index 71518fc9..fb60db53 100644 --- a/src/net/common/serverlobbythread.cpp +++ b/src/net/common/serverlobbythread.cpp @@ -178,6 +178,14 @@ public: m_server.SendReportAvatarResult(requestId, replyId, false); } + virtual void ReportGameSuccess(unsigned requestId, unsigned replyId) { + // TODO + } + + virtual void ReportGameFailed(unsigned requestId, unsigned replyId) { + // TODO + } + private: ServerLobbyThread &m_server; }; @@ -1456,6 +1464,40 @@ ServerLobbyThread::HandleNetPacketRejectGameInvitation(boost::shared_ptr session, const ReportGameMessage_t &report) { + GameMap::iterator pos = m_gameMap.find(report.reportedGameId); + + if (pos != m_gameMap.end() && session->GetPlayerData()) { + if (!IsGameReported(report.reportedGameId)) { + // Temporarily note that this game was reported. + // This prevents spamming of the game report. + AddReportedGame(report.reportedGameId); + boost::shared_ptr tmpGame(pos->second); + unsigned creatorDBId = tmpGame->GetCreatorDBId(); + unsigned reporterDBId = session->GetPlayerData()->GetDBId(); + GetDatabase()->AsyncReportGame( + session->GetPlayerData()->GetUniqueId(), + tmpGame->GetId(), + creatorDBId != 0 ? &creatorDBId : NULL, + tmpGame->GetId(), + tmpGame->GetName(), + reporterDBId != 0 ? &reporterDBId : NULL + ); + } else { + boost::shared_ptr packet(new NetPacket(NetPacket::Alloc)); + packet->GetMsg()->present = PokerTHMessage_PR_reportGameAckMessage; + ReportGameAckMessage_t *netReportAck = &packet->GetMsg()->choice.reportGameAckMessage; + netReportAck->reportedGameId = report.reportedGameId; + netReportAck->reportGameResult = reportGameResult_gameReportDuplicate; + GetSender().Send(session, packet); + } + } else { + boost::shared_ptr packet(new NetPacket(NetPacket::Alloc)); + packet->GetMsg()->present = PokerTHMessage_PR_reportGameAckMessage; + ReportGameAckMessage_t *netReportAck = &packet->GetMsg()->choice.reportGameAckMessage; + netReportAck->reportedGameId = report.reportedGameId; + netReportAck->reportGameResult = reportGameResult_gameReportInvalid; + GetSender().Send(session, packet); + } } void diff --git a/src/net/serverlobbythread.h b/src/net/serverlobbythread.h index c09e57ec..3db51c4f 100644 --- a/src/net/serverlobbythread.h +++ b/src/net/serverlobbythread.h @@ -154,6 +154,8 @@ 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 RequestPlayerAvatar(boost::shared_ptr session);