Update number of votes on client.
This commit is contained in:
@@ -776,6 +776,13 @@ AbstractClientStateReceiving::Process(ClientThread &client)
|
||||
client.StartPetition(startPetitionData.petitionId, startPetitionData.proposingPlayerId,
|
||||
startPetitionData.kickPlayerId, startPetitionData.kickTimeoutSec, startPetitionData.numVotesNeededToKick);
|
||||
}
|
||||
else if (tmpPacket->ToNetPacketKickPlayerPetitionUpdate())
|
||||
{
|
||||
NetPacketKickPlayerPetitionUpdate::Data updatePetitionData;
|
||||
tmpPacket->ToNetPacketKickPlayerPetitionUpdate()->GetData(updatePetitionData);
|
||||
client.UpdatePetition(updatePetitionData.petitionId, updatePetitionData.numVotesAgainstKicking,
|
||||
updatePetitionData.numVotesInFavourOfKicking, updatePetitionData.numVotesNeededToKick);
|
||||
}
|
||||
else if (tmpPacket->ToNetPacketEndKickPlayerPetition())
|
||||
{
|
||||
NetPacketEndKickPlayerPetition::Data endPetitionData;
|
||||
|
||||
@@ -1037,6 +1037,20 @@ ClientThread::StartPetition(unsigned petitionId, unsigned proposingPlayerId, uns
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
ClientThread::UpdatePetition(unsigned petitionId, int /*numVotesAgainstKicking*/, int numVotesInFavourOfKicking, int numVotesToKick)
|
||||
{
|
||||
bool isCurPetition;
|
||||
{
|
||||
boost::mutex::scoped_lock lock(m_curPetitionIdMutex);
|
||||
isCurPetition = m_curPetitionId == petitionId;
|
||||
}
|
||||
if (isCurPetition)
|
||||
{
|
||||
GetGui().refreshVotesMonitor(numVotesInFavourOfKicking, numVotesToKick);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
ClientThread::EndPetition(unsigned petitionId)
|
||||
{
|
||||
|
||||
@@ -76,7 +76,8 @@ using namespace std;
|
||||
#define NET_TYPE_VOTE_KICK_PLAYER 0x0074
|
||||
#define NET_TYPE_VOTE_KICK_PLAYER_ACK 0x0075
|
||||
#define NET_TYPE_VOTE_KICK_PLAYER_DENIED 0x0076
|
||||
#define NET_TYPE_END_KICK_PLAYER_PETITION 0x0077
|
||||
#define NET_TYPE_KICK_PLAYER_PETITION_UPDATE 0x0077
|
||||
#define NET_TYPE_END_KICK_PLAYER_PETITION 0x0078
|
||||
|
||||
#define NET_TYPE_STATISTICS_CHANGED 0x0080
|
||||
|
||||
@@ -588,6 +589,16 @@ struct GCC_PACKED NetPacketVoteKickPlayerDeniedData
|
||||
u_int16_t reserved;
|
||||
};
|
||||
|
||||
struct GCC_PACKED NetPacketKickPlayerPetitionUpdateData
|
||||
{
|
||||
NetPacketHeader head;
|
||||
u_int32_t petitionId;
|
||||
u_int16_t numVotesAgainstKicking;
|
||||
u_int16_t numVotesInFavourOfKicking;
|
||||
u_int16_t numVotesNeededToKick;
|
||||
u_int16_t reserved;
|
||||
};
|
||||
|
||||
struct GCC_PACKED NetPacketEndKickPlayerPetitionData
|
||||
{
|
||||
NetPacketHeader head;
|
||||
@@ -915,6 +926,9 @@ NetPacket::Create(char *data, unsigned &dataSize)
|
||||
case NET_TYPE_VOTE_KICK_PLAYER_DENIED:
|
||||
tmpPacket = boost::shared_ptr<NetPacket>(new NetPacketVoteKickPlayerDenied);
|
||||
break;
|
||||
case NET_TYPE_KICK_PLAYER_PETITION_UPDATE:
|
||||
tmpPacket = boost::shared_ptr<NetPacket>(new NetPacketKickPlayerPetitionUpdate);
|
||||
break;
|
||||
case NET_TYPE_END_KICK_PLAYER_PETITION:
|
||||
tmpPacket = boost::shared_ptr<NetPacket>(new NetPacketEndKickPlayerPetition);
|
||||
break;
|
||||
@@ -1305,6 +1319,12 @@ NetPacket::ToNetPacketVoteKickPlayerDenied() const
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const NetPacketKickPlayerPetitionUpdate *
|
||||
NetPacket::ToNetPacketKickPlayerPetitionUpdate() const
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const NetPacketEndKickPlayerPetition *
|
||||
NetPacket::ToNetPacketEndKickPlayerPetition() const
|
||||
{
|
||||
@@ -4828,6 +4848,75 @@ NetPacketVoteKickPlayerDenied::InternalCheck(const NetPacketHeader*) const
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
NetPacketKickPlayerPetitionUpdate::NetPacketKickPlayerPetitionUpdate()
|
||||
: NetPacket(NET_TYPE_KICK_PLAYER_PETITION_UPDATE, sizeof(NetPacketKickPlayerPetitionUpdateData), sizeof(NetPacketKickPlayerPetitionUpdateData))
|
||||
{
|
||||
}
|
||||
|
||||
NetPacketKickPlayerPetitionUpdate::~NetPacketKickPlayerPetitionUpdate()
|
||||
{
|
||||
}
|
||||
|
||||
boost::shared_ptr<NetPacket>
|
||||
NetPacketKickPlayerPetitionUpdate::Clone() const
|
||||
{
|
||||
boost::shared_ptr<NetPacket> newPacket(new NetPacketKickPlayerPetitionUpdate);
|
||||
try
|
||||
{
|
||||
newPacket->SetRawData(GetRawData());
|
||||
} catch (const NetException &)
|
||||
{
|
||||
// Need to return the new packet anyway.
|
||||
}
|
||||
return newPacket;
|
||||
}
|
||||
|
||||
void
|
||||
NetPacketKickPlayerPetitionUpdate::SetData(const NetPacketKickPlayerPetitionUpdate::Data &inData)
|
||||
{
|
||||
NetPacketKickPlayerPetitionUpdateData *tmpData = (NetPacketKickPlayerPetitionUpdateData *)GetRawData();
|
||||
|
||||
tmpData->petitionId = htonl(inData.petitionId);
|
||||
tmpData->numVotesAgainstKicking = htons(inData.numVotesAgainstKicking);
|
||||
tmpData->numVotesInFavourOfKicking = htons(inData.numVotesInFavourOfKicking);
|
||||
tmpData->numVotesNeededToKick = htons(inData.numVotesNeededToKick);
|
||||
|
||||
// Check the packet - just in case.
|
||||
Check(GetRawData());
|
||||
}
|
||||
|
||||
void
|
||||
NetPacketKickPlayerPetitionUpdate::GetData(NetPacketKickPlayerPetitionUpdate::Data &outData) const
|
||||
{
|
||||
NetPacketKickPlayerPetitionUpdateData *tmpData = (NetPacketKickPlayerPetitionUpdateData *)GetRawData();
|
||||
|
||||
outData.petitionId = ntohl(tmpData->petitionId);
|
||||
outData.numVotesAgainstKicking = ntohs(tmpData->numVotesAgainstKicking);
|
||||
outData.numVotesInFavourOfKicking = ntohs(tmpData->numVotesInFavourOfKicking);
|
||||
outData.numVotesNeededToKick = ntohs(tmpData->numVotesNeededToKick);
|
||||
}
|
||||
|
||||
const NetPacketKickPlayerPetitionUpdate *
|
||||
NetPacketKickPlayerPetitionUpdate::ToNetPacketKickPlayerPetitionUpdate() const
|
||||
{
|
||||
return this;
|
||||
}
|
||||
|
||||
void
|
||||
NetPacketKickPlayerPetitionUpdate::InternalCheck(const NetPacketHeader *data) const
|
||||
{
|
||||
NetPacketKickPlayerPetitionUpdateData *tmpData = (NetPacketKickPlayerPetitionUpdateData *)data;
|
||||
|
||||
if (ntohs(tmpData->numVotesAgainstKicking) > MAX_NUMBER_OF_PLAYERS)
|
||||
throw NetException(__FILE__, __LINE__, ERR_SOCK_INVALID_PACKET, 0);
|
||||
if (ntohs(tmpData->numVotesInFavourOfKicking) > MAX_NUMBER_OF_PLAYERS)
|
||||
throw NetException(__FILE__, __LINE__, ERR_SOCK_INVALID_PACKET, 0);
|
||||
if (ntohs(tmpData->numVotesNeededToKick) > MAX_NUMBER_OF_PLAYERS)
|
||||
throw NetException(__FILE__, __LINE__, ERR_SOCK_INVALID_PACKET, 0);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
NetPacketEndKickPlayerPetition::NetPacketEndKickPlayerPetition()
|
||||
: NetPacket(NET_TYPE_END_KICK_PLAYER_PETITION, sizeof(NetPacketEndKickPlayerPetitionData), sizeof(NetPacketEndKickPlayerPetitionData))
|
||||
{
|
||||
|
||||
@@ -385,6 +385,16 @@ ServerGameThread::InternalVoteKick(SessionWrapper byWhom, unsigned petitionId, K
|
||||
m_voteKickData->numVotesInFavourOfKicking++;
|
||||
else
|
||||
m_voteKickData->numVotesAgainstKicking++;
|
||||
// Send update notification.
|
||||
boost::shared_ptr<NetPacket> updatePetition(new NetPacketKickPlayerPetitionUpdate);
|
||||
NetPacketKickPlayerPetitionUpdate::Data updatePetitionData;
|
||||
updatePetitionData.petitionId = m_voteKickData->petitionId;
|
||||
updatePetitionData.numVotesAgainstKicking = m_voteKickData->numVotesAgainstKicking;
|
||||
updatePetitionData.numVotesInFavourOfKicking = m_voteKickData->numVotesInFavourOfKicking;
|
||||
updatePetitionData.numVotesNeededToKick = m_voteKickData->numVotesToKick;
|
||||
|
||||
static_cast<NetPacketKickPlayerPetitionUpdate *>(updatePetition.get())->SetData(updatePetitionData);
|
||||
SendToAllPlayers(updatePetition, SessionData::Game);
|
||||
}
|
||||
else
|
||||
InternalDenyVoteKick(byWhom, petitionId, VOTE_DENIED_ALREADY_VOTED);
|
||||
|
||||
Reference in New Issue
Block a user