Client side vote kick changes - tab closes now. Server side fixes.

This commit is contained in:
lotodore
2008-12-07 11:48:01 +00:00
parent 89450a9a32
commit bd55b69817
4 changed files with 28 additions and 7 deletions
+1
View File
@@ -151,6 +151,7 @@ protected:
void ClearGameInfoMap();
void StartPetition(unsigned petitionId, unsigned proposingPlayerId, unsigned kickPlayerId, int timeoutSec, int numVotesToKick);
void EndPetition(unsigned petitionId);
void UpdateStatData(const ServerStats &stats);
+10 -4
View File
@@ -771,10 +771,16 @@ AbstractClientStateReceiving::Process(ClientThread &client)
}
else if (tmpPacket->ToNetPacketStartKickPlayerPetition())
{
NetPacketStartKickPlayerPetition::Data petitionData;
tmpPacket->ToNetPacketStartKickPlayerPetition()->GetData(petitionData);
client.StartPetition(petitionData.petitionId, petitionData.proposingPlayerId,
petitionData.kickPlayerId, petitionData.kickTimeoutSec, petitionData.numVotesNeededToKick);
NetPacketStartKickPlayerPetition::Data startPetitionData;
tmpPacket->ToNetPacketStartKickPlayerPetition()->GetData(startPetitionData);
client.StartPetition(startPetitionData.petitionId, startPetitionData.proposingPlayerId,
startPetitionData.kickPlayerId, startPetitionData.kickTimeoutSec, startPetitionData.numVotesNeededToKick);
}
else if (tmpPacket->ToNetPacketEndKickPlayerPetition())
{
NetPacketEndKickPlayerPetition::Data endPetitionData;
tmpPacket->ToNetPacketEndKickPlayerPetition()->GetData(endPetitionData);
client.EndPetition(endPetitionData.petitionId);
}
else if (tmpPacket->ToNetPacketAvatarHeader())
{
+12
View File
@@ -1037,6 +1037,18 @@ ClientThread::StartPetition(unsigned petitionId, unsigned proposingPlayerId, uns
}
}
void
ClientThread::EndPetition(unsigned petitionId)
{
bool isCurPetition;
{
boost::mutex::scoped_lock lock(m_curPetitionIdMutex);
isCurPetition = m_curPetitionId == petitionId;
}
if (isCurPetition)
GetGui().endVoteOnKick();
}
void
ClientThread::UpdateStatData(const ServerStats &stats)
{
+5 -3
View File
@@ -33,6 +33,7 @@
#define SERVER_CHECK_VOTE_KICK_INTERVAL_MSEC 500
#define SERVER_KICK_TIMEOUT_ADD_DELAY_SEC 2
using namespace std;
@@ -239,7 +240,6 @@ ServerGameThread::VoteKickAction()
endPetitionData.numVotesInFavourOfKicking = m_voteKickData->numVotesInFavourOfKicking;
endPetitionData.playerKicked = doKick;
endPetitionData.endReason = reason;
m_voteKickData.reset();
static_cast<NetPacketEndKickPlayerPetition *>(endPetition.get())->SetData(endPetitionData);
SendToAllPlayers(endPetition, SessionData::Game);
@@ -247,6 +247,8 @@ ServerGameThread::VoteKickAction()
// Perform kick.
if (doKick)
InternalKickPlayer(m_voteKickData->kickPlayerId);
// This petition has ended.
m_voteKickData.reset();
}
}
}
@@ -328,7 +330,7 @@ ServerGameThread::InternalAskVoteKick(SessionWrapper byWhom, unsigned playerIdWh
m_voteKickData->petitionId = m_curPetitionId++;
m_voteKickData->kickPlayerId = playerIdWho;
m_voteKickData->numVotesToKick = static_cast<int>(ceil(numPlayers / 3. * 2.));
m_voteKickData->timeLimitSec = timeoutSec;
m_voteKickData->timeLimitSec = timeoutSec + SERVER_KICK_TIMEOUT_ADD_DELAY_SEC;
// Consider first vote.
m_voteKickData->numVotesInFavourOfKicking = 1;
m_voteKickData->votedPlayerIds.push_back(playerIdByWhom);
@@ -338,7 +340,7 @@ ServerGameThread::InternalAskVoteKick(SessionWrapper byWhom, unsigned playerIdWh
startPetitionData.petitionId = m_voteKickData->petitionId;
startPetitionData.proposingPlayerId = playerIdByWhom;
startPetitionData.kickPlayerId = m_voteKickData->kickPlayerId;
startPetitionData.kickTimeoutSec = m_voteKickData->timeLimitSec;
startPetitionData.kickTimeoutSec = timeoutSec;
startPetitionData.numVotesNeededToKick = m_voteKickData->numVotesToKick;
static_cast<NetPacketStartKickPlayerPetition *>(startPetition.get())->SetData(startPetitionData);