Support report bad avatar function on server side.
This commit is contained in:
@@ -307,6 +307,30 @@ AbstractServerGameStateReceiving::ProcessPacket(boost::shared_ptr<ServerGame> se
|
||||
else if (packet->GetMsg()->present == PokerTHMessage_PR_reportAvatarMessage)
|
||||
{
|
||||
ReportAvatarMessage_t *netReport = &packet->GetMsg()->choice.reportAvatarMessage;
|
||||
boost::shared_ptr<PlayerData> tmpPlayer = server->GetPlayerDataByUniqueId(netReport->reportedPlayerId);
|
||||
MD5Buf tmpMD5;
|
||||
memcpy(tmpMD5.GetData(), netReport->reportedAvatar.buf, MD5_DATA_SIZE);
|
||||
if (tmpPlayer && tmpPlayer->GetDBId() && tmpPlayer->GetAvatarMD5() == tmpMD5)
|
||||
{
|
||||
DB_id myDBid = session.playerData->GetDBId();
|
||||
// Do not use the "game" database object, but the global one.
|
||||
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_avatarReportInvalid;
|
||||
server->GetLobbyThread().GetSender().Send(session.sessionData, packet);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -157,6 +157,16 @@ public:
|
||||
LOG_ERROR("DB create game failed for request " << requestId);
|
||||
}
|
||||
|
||||
virtual void ReportAvatarSuccess(unsigned requestId, unsigned replyId)
|
||||
{
|
||||
m_server.SendReportAvatarResult(requestId, replyId, true);
|
||||
}
|
||||
|
||||
virtual void ReportAvatarFailed(unsigned requestId, unsigned replyId)
|
||||
{
|
||||
m_server.SendReportAvatarResult(requestId, replyId, false);
|
||||
}
|
||||
|
||||
private:
|
||||
ServerLobbyThread &m_server;
|
||||
};
|
||||
@@ -1623,6 +1633,23 @@ ServerLobbyThread::UserInvalid(unsigned playerId)
|
||||
SessionError(m_sessionManager.GetSessionByUniquePlayerId(playerId, true), ERR_NET_INVALID_PASSWORD);
|
||||
}
|
||||
|
||||
void
|
||||
ServerLobbyThread::SendReportAvatarResult(unsigned byPlayerId, unsigned reportedPlayerId, bool success)
|
||||
{
|
||||
SessionWrapper session = m_sessionManager.GetSessionByUniquePlayerId(byPlayerId);
|
||||
if (!session.sessionData)
|
||||
session = m_gameSessionManager.GetSessionByUniquePlayerId(byPlayerId);
|
||||
if (session.sessionData)
|
||||
{
|
||||
boost::shared_ptr<NetPacket> packet(new NetPacket(NetPacket::Alloc));
|
||||
packet->GetMsg()->present = PokerTHMessage_PR_reportAvatarAckMessage;
|
||||
ReportAvatarAckMessage_t *netReportAck = &packet->GetMsg()->choice.reportAvatarAckMessage;
|
||||
netReportAck->reportedPlayerId = reportedPlayerId;
|
||||
netReportAck->reportResult = success ? reportResult_avatarReportAccepted : reportResult_avatarReportInvalid;
|
||||
GetSender().Send(session.sessionData, packet);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
ServerLobbyThread::UserBlocked(unsigned playerId)
|
||||
{
|
||||
@@ -1632,7 +1659,7 @@ ServerLobbyThread::UserBlocked(unsigned playerId)
|
||||
void
|
||||
ServerLobbyThread::RequestPlayerAvatar(SessionWrapper session)
|
||||
{
|
||||
if (!session.playerData.get())
|
||||
if (!session.playerData)
|
||||
throw ServerException(__FILE__, __LINE__, ERR_NET_INVALID_SESSION, 0);
|
||||
// Ask the client to send its avatar.
|
||||
boost::shared_ptr<NetPacket> packet(new NetPacket(NetPacket::Alloc));
|
||||
|
||||
Reference in New Issue
Block a user