Updated server and client ping to 5 seconds. Also changed hard set 1 second value on the ping timers to read values from the settings cache.

This commit is contained in:
woogerboy21 2015-07-29 23:44:00 -04:00
parent 183fbd2805
commit 8c7301b19f
5 changed files with 133 additions and 122 deletions

View file

@ -1,7 +1,7 @@
#include <QTimer> #include <QTimer>
#include <QThread> #include <QThread>
#include "remoteclient.h" #include "remoteclient.h"
#include "settingscache.h"
#include "pending_command.h" #include "pending_command.h"
#include "pb/commands.pb.h" #include "pb/commands.pb.h"
#include "pb/session_commands.pb.h" #include "pb/session_commands.pb.h"
@ -16,8 +16,10 @@ static const unsigned int protocolVersion = 14;
RemoteClient::RemoteClient(QObject *parent) RemoteClient::RemoteClient(QObject *parent)
: AbstractClient(parent), timeRunning(0), lastDataReceived(0), messageInProgress(false), handshakeStarted(false), messageLength(0) : AbstractClient(parent), timeRunning(0), lastDataReceived(0), messageInProgress(false), handshakeStarted(false), messageLength(0)
{ {
int keepalive = settingsCache->getKeepAlive();
timer = new QTimer(this); timer = new QTimer(this);
timer->setInterval(1000); timer->setInterval(keepalive * 1000);
connect(timer, SIGNAL(timeout()), this, SLOT(ping())); connect(timer, SIGNAL(timeout()), this, SLOT(ping()));
socket = new QTcpSocket(this); socket = new QTcpSocket(this);
@ -309,9 +311,10 @@ void RemoteClient::ping()
} }
} }
int keepalive = settingsCache->getKeepAlive();
int maxTime = timeRunning - lastDataReceived; int maxTime = timeRunning - lastDataReceived;
emit maxPingTime(maxTime, maxTimeout); emit maxPingTime(maxTime, maxTimeout);
if (maxTime >= maxTimeout) { if (maxTime >= (keepalive * maxTimeout)) {
disconnectFromServer(); disconnectFromServer();
emit serverTimeout(); emit serverTimeout();
} else { } else {

View file

@ -6,6 +6,7 @@ SettingsCache::SettingsCache()
settings = new QSettings(this); settings = new QSettings(this);
lang = settings->value("personal/lang").toString(); lang = settings->value("personal/lang").toString();
keepalive = settings->value("personal/keepalive", 5).toInt();
deckPath = settings->value("paths/decks").toString(); deckPath = settings->value("paths/decks").toString();
replaysPath = settings->value("paths/replays").toString(); replaysPath = settings->value("paths/replays").toString();

View file

@ -97,6 +97,7 @@ private:
bool spectatorsNeedPassword; bool spectatorsNeedPassword;
bool spectatorsCanTalk; bool spectatorsCanTalk;
bool spectatorsCanSeeEverything; bool spectatorsCanSeeEverything;
int keepalive;
public: public:
SettingsCache(); SettingsCache();
const QByteArray &getMainWindowGeometry() const { return mainWindowGeometry; } const QByteArray &getMainWindowGeometry() const { return mainWindowGeometry; }
@ -167,6 +168,7 @@ public:
bool getSpectatorsNeedPassword() const { return spectatorsNeedPassword; } bool getSpectatorsNeedPassword() const { return spectatorsNeedPassword; }
bool getSpectatorsCanTalk() const { return spectatorsCanTalk; } bool getSpectatorsCanTalk() const { return spectatorsCanTalk; }
bool getSpectatorsCanSeeEverything() const { return spectatorsCanSeeEverything; } bool getSpectatorsCanSeeEverything() const { return spectatorsCanSeeEverything; }
int getKeepAlive() const { return keepalive; }
public slots: public slots:
void setMainWindowGeometry(const QByteArray &_mainWindowGeometry); void setMainWindowGeometry(const QByteArray &_mainWindowGeometry);
void setLang(const QString &_lang); void setLang(const QString &_lang);

View file

@ -38,6 +38,14 @@ logfile=server.log
; it won't be logged. Default is empty; example: "kittens,ponies,faires" ; it won't be logged. Default is empty; example: "kittens,ponies,faires"
logfilters="" logfilters=""
; Set the time interval in seconds that servatrice will use to communicate with each connected client
; to verify the client has not timed out. Defaults is 5 seconds
clientkeepalive=5
; Maximum time in seconds a player can stay inactive with there client not even responding to pings, before is
; considered disconnected; default is 15
max_player_inactivity_time=15
[authentication] [authentication]
@ -178,10 +186,6 @@ roomlist\1\game_types\3\name="GameType3"
[game] [game]
; Maximum time in seconds a player can stay inactive, with his client hot even responding to pings, before is
; considered disconnected; default is 15
max_player_inactivity_time=15
; Maximum time in seconds all players in a game can stay inactive before the game is automatically closed; ; Maximum time in seconds all players in a game can stay inactive before the game is automatically closed;
; default is 120 ; default is 120
max_game_inactivity_time=120 max_game_inactivity_time=120

View file

@ -273,7 +273,7 @@ bool Servatrice::initServer()
updateLoginMessage(); updateLoginMessage();
maxGameInactivityTime = settingsCache->value("game/max_game_inactivity_time", 120).toInt(); maxGameInactivityTime = settingsCache->value("game/max_game_inactivity_time", 120).toInt();
maxPlayerInactivityTime = settingsCache->value("game/max_player_inactivity_time", 15).toInt(); maxPlayerInactivityTime = settingsCache->value("server/max_player_inactivity_time", 15).toInt();
maxUsersPerAddress = settingsCache->value("security/max_users_per_address", 4).toInt(); maxUsersPerAddress = settingsCache->value("security/max_users_per_address", 4).toInt();
messageCountingInterval = settingsCache->value("security/message_counting_interval", 10).toInt(); messageCountingInterval = settingsCache->value("security/message_counting_interval", 10).toInt();
@ -343,9 +343,10 @@ bool Servatrice::initServer()
return false; return false;
} }
int clientkeepalive = settingsCache->value("server/clientkeepalive", 1).toInt();
pingClock = new QTimer(this); pingClock = new QTimer(this);
connect(pingClock, SIGNAL(timeout()), this, SIGNAL(pingClockTimeout())); connect(pingClock, SIGNAL(timeout()), this, SIGNAL(pingClockTimeout()));
pingClock->start(1000); pingClock->start(clientkeepalive * 1000);
int statusUpdateTime = settingsCache->value("server/statusupdate", 15000).toInt(); int statusUpdateTime = settingsCache->value("server/statusupdate", 15000).toInt();
statusUpdateClock = new QTimer(this); statusUpdateClock = new QTimer(this);