Merge remote-tracking branch 'origin/master'

This commit is contained in:
doitux
2013-12-09 08:28:52 +01:00
12 changed files with 114 additions and 39 deletions
-12
View File
@@ -179,16 +179,4 @@ enum NetTimeoutReason {
NETWORK_TIMEOUT_KICK_AFTER_AUTOFOLD
};
struct ServerStats {
ServerStats()
: numberOfPlayersOnServer(0), numberOfGamesOpen(0), totalPlayersEverLoggedIn(0),
totalGamesEverCreated(0), maxGamesOpen(0), maxPlayersLoggedIn(0) {}
unsigned numberOfPlayersOnServer;
unsigned numberOfGamesOpen;
unsigned totalPlayersEverLoggedIn;
unsigned totalGamesEverCreated;
unsigned maxGamesOpen;
unsigned maxPlayersLoggedIn;
};
#endif
+4
View File
@@ -156,6 +156,10 @@ void ServerGuiWrapper::SignalNetClientStatsUpdate(const ServerStats &stats)
{
if (myClientcb) myClientcb->SignalNetClientStatsUpdate(stats);
}
void ServerGuiWrapper::SignalNetClientPingUpdate(unsigned minPing, unsigned avgPing, unsigned maxPing)
{
if (myClientcb) myClientcb->SignalNetClientPingUpdate(minPing, avgPing, maxPing);
}
void ServerGuiWrapper::SignalNetClientShowTimeoutDialog(NetTimeoutReason reason, unsigned remainingSec)
{
if (myClientcb) myClientcb->SignalNetClientShowTimeoutDialog(reason, remainingSec);
+1
View File
@@ -126,6 +126,7 @@ public:
void SignalNetClientError(int errorID, int osErrorID);
void SignalNetClientNotification(int notificationId);
void SignalNetClientStatsUpdate(const ServerStats &stats);
void SignalNetClientPingUpdate(unsigned minPing, unsigned avgPing, unsigned maxPing);
void SignalNetClientShowTimeoutDialog(NetTimeoutReason reason, unsigned remainingSec);
void SignalNetClientRemovedFromGame(int notificationId);
void SignalNetClientSelfJoined(unsigned playerId, const std::string &playerName, bool isGameAdmin);
+4
View File
@@ -341,6 +341,10 @@ void GuiWrapper::SignalNetClientStatsUpdate(const ServerStats &stats)
{
myStartWindow->signalNetClientStatsUpdate(stats);
}
void GuiWrapper::SignalNetClientPingUpdate(unsigned minPing, unsigned avgPing, unsigned maxPing)
{
// TODO
}
void GuiWrapper::SignalNetClientShowTimeoutDialog(NetTimeoutReason reason, unsigned remainingSec)
{
myStartWindow->signalNetClientShowTimeoutDialog(reason, remainingSec);
+1
View File
@@ -138,6 +138,7 @@ public:
void SignalNetClientError(int errorID, int osErrorID);
void SignalNetClientNotification(int notificationId);
void SignalNetClientStatsUpdate(const ServerStats &stats);
void SignalNetClientPingUpdate(unsigned minPing, unsigned avgPing, unsigned maxPing);
void SignalNetClientShowTimeoutDialog(NetTimeoutReason reason, unsigned remainingSec);
void SignalNetClientRemovedFromGame(int notificationId);
void SignalNetClientSelfJoined(unsigned playerId, const std::string &playerName, bool isGameAdmin);
+2 -1
View File
@@ -40,7 +40,8 @@
#include "ui_startwindow.h"
#endif
#include "game_defs.h"
#include <game_defs.h>
#include <serverdata.h>
#include <QMessageBox>
#include "mymessagebox.h"
+2
View File
@@ -38,6 +38,7 @@
#include <game_defs.h>
#include <gamedata.h>
#include <serverdata.h>
class Game;
@@ -51,6 +52,7 @@ public:
virtual void SignalNetClientError(int errorID, int osErrorID) = 0;
virtual void SignalNetClientNotification(int notificationId) = 0;
virtual void SignalNetClientStatsUpdate(const ServerStats &stats) = 0;
virtual void SignalNetClientPingUpdate(unsigned minPing, unsigned avgPing, unsigned maxPing) = 0;
virtual void SignalNetClientShowTimeoutDialog(NetTimeoutReason reason, unsigned remainingSec) = 0;
virtual void SignalNetClientRemovedFromGame(int notificationId) = 0;
+33
View File
@@ -37,6 +37,8 @@
#include <boost/asio.hpp>
#include <boost/enable_shared_from_this.hpp>
#include <string>
#include <algorithm>
#include <numeric>
#include <core/thread.h>
#include <net/sessiondatacallback.h>
@@ -56,6 +58,33 @@ class Log;
class QtToolsInterface;
struct Gsasl;
#define SIZE_PING_BACKLOG 20
class PingData
{
public:
PingData() : pingTimer(boost::posix_time::time_duration(0, 0, 0), boost::timers::portable::microsec_timer::manual_start) {}
unsigned MinPing() {return *std::min_element(pingValues.begin(), pingValues.end());}
unsigned MaxPing() {return *std::max_element(pingValues.begin(), pingValues.end());}
unsigned AveragePing() {return std::accumulate(pingValues.begin(), pingValues.end(), 0) / (unsigned)pingValues.size();}
void StartPing() {pingTimer.start();}
void EndPing()
{
if (pingTimer.is_running()) {
pingValues.push_back((unsigned)pingTimer.elapsed().total_milliseconds());
if (pingValues.size() > SIZE_PING_BACKLOG) {
pingValues.pop_front();
}
pingTimer.reset();
}
}
private:
std::list<unsigned> pingValues;
boost::timers::portable::microsec_timer pingTimer;
};
class ClientThread : public Thread, public boost::enable_shared_from_this<ClientThread>, public SessionDataCallback
{
public:
@@ -228,6 +257,7 @@ protected:
void EndPetition(unsigned petitionId);
void UpdateStatData(const ServerStats &stats);
void EndPing();
bool IsSessionEstablished() const;
void SetSessionEstablished(bool flag);
@@ -298,6 +328,9 @@ private:
mutable boost::mutex m_curStatsMutex;
ServerStats m_curStats;
mutable boost::mutex m_pingDataMutex;
PingData m_pingData;
boost::asio::deadline_timer m_stateTimer;
boost::asio::deadline_timer m_avatarTimer;
+4
View File
@@ -1771,6 +1771,10 @@ ClientStateRunHand::InternalHandlePacket(boost::shared_ptr<ClientThread> client,
client->GetClientLog()->transformPlayerActionLog(PlayerAction(netActionDone.playeraction())),
netActionDone.totalplayerbet() - tmpPlayer->getMySet()
);
if (tmpPlayer->getMyID() == 0)
{
client->EndPing();
}
}
// Update last players turn only after the blinds.
curGame->getCurrentHand()->setPreviousPlayerID(tmpPlayer->getMyID());
+12
View File
@@ -158,6 +158,10 @@ ClientThread::SendPlayerAction()
{
// Warning: This function is called in the context of the GUI thread.
// Create a network packet containing the current player action.
{
boost::mutex::scoped_lock lock(m_pingDataMutex);
m_pingData.StartPing();
}
boost::shared_ptr<NetPacket> packet(new NetPacket);
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_MyActionRequestMessage);
MyActionRequestMessage *netMyAction = packet->GetMsg()->mutable_myactionrequestmessage();
@@ -1558,6 +1562,14 @@ ClientThread::UpdateStatData(const ServerStats &stats)
GetCallback().SignalNetClientStatsUpdate(m_curStats);
}
void
ClientThread::EndPing()
{
boost::mutex::scoped_lock lock(m_pingDataMutex);
m_pingData.EndPing();
GetCallback().SignalNetClientPingUpdate(m_pingData.MinPing(), m_pingData.AveragePing(), m_pingData.MaxPing());
}
ServerStats
ClientThread::GetStatData() const
{
+13 -1
View File
@@ -35,7 +35,6 @@
#include <string>
struct ServerInfo {
ServerInfo() : id(0), supportsSctp(false), port(0) {}
unsigned id;
@@ -49,5 +48,18 @@ struct ServerInfo {
std::string avatarServerAddr;
};
struct ServerStats {
ServerStats()
: numberOfPlayersOnServer(0), numberOfGamesOpen(0), totalPlayersEverLoggedIn(0),
totalGamesEverCreated(0), maxGamesOpen(0), maxPlayersLoggedIn(0) {}
unsigned numberOfPlayersOnServer;
unsigned numberOfGamesOpen;
unsigned totalPlayersEverLoggedIn;
unsigned totalGamesEverCreated;
unsigned maxGamesOpen;
unsigned maxPlayersLoggedIn;
};
#endif