Preventing spam of report avatar function on server side.
This commit is contained in:
@@ -644,6 +644,24 @@ ServerGame::IsPlayerInvited(unsigned playerId) const
|
|||||||
return retVal;
|
return retVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ServerGame::AddReportedAvatar(unsigned playerId)
|
||||||
|
{
|
||||||
|
boost::mutex::scoped_lock lock(m_reportedAvatarListMutex);
|
||||||
|
m_reportedAvatarList.push_back(playerId);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
ServerGame::IsAvatarReported(unsigned playerId) const
|
||||||
|
{
|
||||||
|
bool retVal = false;
|
||||||
|
boost::mutex::scoped_lock lock(m_reportedAvatarListMutex);
|
||||||
|
PlayerIdList::const_iterator pos = find(m_reportedAvatarList.begin(), m_reportedAvatarList.end(), playerId);
|
||||||
|
if (pos != m_reportedAvatarList.end())
|
||||||
|
retVal = true;
|
||||||
|
return retVal;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerGame::AddComputerPlayer(boost::shared_ptr<PlayerData> player)
|
ServerGame::AddComputerPlayer(boost::shared_ptr<PlayerData> player)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -312,15 +312,32 @@ AbstractServerGameStateReceiving::ProcessPacket(boost::shared_ptr<ServerGame> se
|
|||||||
memcpy(tmpMD5.GetData(), netReport->reportedAvatar.buf, MD5_DATA_SIZE);
|
memcpy(tmpMD5.GetData(), netReport->reportedAvatar.buf, MD5_DATA_SIZE);
|
||||||
if (tmpPlayer && tmpPlayer->GetDBId() && tmpPlayer->GetAvatarMD5() == tmpMD5)
|
if (tmpPlayer && tmpPlayer->GetDBId() && tmpPlayer->GetAvatarMD5() == tmpMD5)
|
||||||
{
|
{
|
||||||
DB_id myDBid = session.playerData->GetDBId();
|
if (!server->IsAvatarReported(tmpPlayer->GetUniqueId()))
|
||||||
// Do not use the "game" database object, but the global one.
|
{
|
||||||
server->GetLobbyThread().GetDatabase()->AsyncReportAvatar(
|
// Temporarily note that this avatar was reported.
|
||||||
session.playerData->GetUniqueId(),
|
// This prevents spamming of the avatar report.
|
||||||
tmpPlayer->GetUniqueId(),
|
server->AddReportedAvatar(tmpPlayer->GetUniqueId());
|
||||||
tmpPlayer->GetDBId(),
|
DB_id myDBid = session.playerData->GetDBId();
|
||||||
tmpPlayer->GetAvatarMD5().ToString(),
|
// Do not use the "game" database object, but the global one.
|
||||||
myDBid != 0 ? &myDBid : NULL
|
// The entry should be created even if we are not running a
|
||||||
);
|
// ranking game.
|
||||||
|
server->GetLobbyThread().GetDatabase()->AsyncReportAvatar(
|
||||||
|
session.playerData->GetUniqueId(),
|
||||||
|
tmpPlayer->GetUniqueId(),
|
||||||
|
tmpPlayer->GetDBId(),
|
||||||
|
tmpPlayer->GetAvatarMD5().ToString(),
|
||||||
|
myDBid != 0 ? &myDBid : NULL
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
boost::shared_ptr<NetPacket> packet(new NetPacket(NetPacket::Alloc));
|
||||||
|
packet->GetMsg()->present = PokerTHMessage_PR_reportAvatarAckMessage;
|
||||||
|
ReportAvatarAckMessage_t *netReportAck = &packet->GetMsg()->choice.reportAvatarAckMessage;
|
||||||
|
netReportAck->reportedPlayerId = netReport->reportedPlayerId;
|
||||||
|
netReportAck->reportResult = reportResult_avatarReportDuplicate;
|
||||||
|
server->GetLobbyThread().GetSender().Send(session.sessionData, packet);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -87,6 +87,9 @@ public:
|
|||||||
void RemovePlayerInvitation(unsigned playerId);
|
void RemovePlayerInvitation(unsigned playerId);
|
||||||
bool IsPlayerInvited(unsigned playerId) const;
|
bool IsPlayerInvited(unsigned playerId) const;
|
||||||
|
|
||||||
|
void AddReportedAvatar(unsigned playerId);
|
||||||
|
bool IsAvatarReported(unsigned playerId) const;
|
||||||
|
|
||||||
unsigned GetSmallDelaySec() const;
|
unsigned GetSmallDelaySec() const;
|
||||||
|
|
||||||
// should be protected, but is needed in function.
|
// should be protected, but is needed in function.
|
||||||
@@ -168,6 +171,9 @@ private:
|
|||||||
PlayerIdList m_playerInvitationList;
|
PlayerIdList m_playerInvitationList;
|
||||||
mutable boost::mutex m_playerInvitationListMutex;
|
mutable boost::mutex m_playerInvitationListMutex;
|
||||||
|
|
||||||
|
PlayerIdList m_reportedAvatarList;
|
||||||
|
mutable boost::mutex m_reportedAvatarListMutex;
|
||||||
|
|
||||||
RankingMap m_rankingMap;
|
RankingMap m_rankingMap;
|
||||||
|
|
||||||
unsigned m_adminPlayerId;
|
unsigned m_adminPlayerId;
|
||||||
|
|||||||
Reference in New Issue
Block a user