Merge pull request #1313 from woogerboy21/update_pingtime
Update Client & Server ping time
This commit is contained in:
commit
13011180f7
8 changed files with 231 additions and 210 deletions
|
@ -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 {
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -56,6 +56,7 @@ public:
|
||||||
virtual QString getLoginMessage() const { return QString(); }
|
virtual QString getLoginMessage() const { return QString(); }
|
||||||
|
|
||||||
virtual bool getGameShouldPing() const { return false; }
|
virtual bool getGameShouldPing() const { return false; }
|
||||||
|
virtual int getPingClockInterval() const { return 0; }
|
||||||
virtual int getMaxGameInactivityTime() const { return 9999999; }
|
virtual int getMaxGameInactivityTime() const { return 9999999; }
|
||||||
virtual int getMaxPlayerInactivityTime() const { return 9999999; }
|
virtual int getMaxPlayerInactivityTime() const { return 9999999; }
|
||||||
virtual int getMessageCountingInterval() const { return 0; }
|
virtual int getMessageCountingInterval() const { return 0; }
|
||||||
|
|
|
@ -342,21 +342,30 @@ void Server_ProtocolHandler::processCommandContainer(const CommandContainer &con
|
||||||
|
|
||||||
void Server_ProtocolHandler::pingClockTimeout()
|
void Server_ProtocolHandler::pingClockTimeout()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
int cmdcountinterval = server->getCommandCountingInterval();
|
||||||
|
int msgcountinterval = server->getMessageCountingInterval();
|
||||||
|
int pingclockinterval = server->getPingClockInterval();
|
||||||
|
|
||||||
int interval = server->getMessageCountingInterval();
|
int interval = server->getMessageCountingInterval();
|
||||||
if (interval > 0) {
|
if (interval > 0) {
|
||||||
messageSizeOverTime.prepend(0);
|
if(pingclockinterval > 0) {
|
||||||
if (messageSizeOverTime.size() > server->getMessageCountingInterval())
|
messageSizeOverTime.prepend(0);
|
||||||
messageSizeOverTime.removeLast();
|
if (messageSizeOverTime.size() > (msgcountinterval / pingclockinterval))
|
||||||
messageCountOverTime.prepend(0);
|
messageSizeOverTime.removeLast();
|
||||||
if (messageCountOverTime.size() > server->getMessageCountingInterval())
|
messageCountOverTime.prepend(0);
|
||||||
messageCountOverTime.removeLast();
|
if (messageCountOverTime.size() > (msgcountinterval / pingclockinterval))
|
||||||
|
messageCountOverTime.removeLast();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
interval = server->getCommandCountingInterval();
|
interval = server->getCommandCountingInterval();
|
||||||
if (interval > 0) {
|
if (interval > 0) {
|
||||||
commandCountOverTime.prepend(0);
|
if (pingclockinterval > 0) {
|
||||||
if (commandCountOverTime.size() > server->getCommandCountingInterval())
|
commandCountOverTime.prepend(0);
|
||||||
commandCountOverTime.removeLast();
|
if (commandCountOverTime.size() > (cmdcountinterval / pingclockinterval))
|
||||||
|
commandCountOverTime.removeLast();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (timeRunning - lastDataReceived > server->getMaxPlayerInactivityTime())
|
if (timeRunning - lastDataReceived > server->getMaxPlayerInactivityTime())
|
||||||
|
|
|
@ -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 1 seconds
|
||||||
|
clientkeepalive=1
|
||||||
|
|
||||||
|
; 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
|
||||||
|
|
|
@ -161,13 +161,13 @@ bool Servatrice::initServer()
|
||||||
authenticationMethod = AuthenticationNone;
|
authenticationMethod = AuthenticationNone;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool maxUserLimitEnabled = settingsCache->value("security/enable_max_user_limit", false).toBool();
|
bool maxUserLimitEnabled = settingsCache->value("security/enable_max_user_limit", false).toBool();
|
||||||
qDebug() << "Maximum user limit enabled: " << maxUserLimitEnabled;
|
qDebug() << "Maximum user limit enabled: " << maxUserLimitEnabled;
|
||||||
|
|
||||||
if (maxUserLimitEnabled){
|
if (maxUserLimitEnabled){
|
||||||
int maxUserLimit = settingsCache->value("security/max_users_total", 500).toInt();
|
int maxUserLimit = settingsCache->value("security/max_users_total", 500).toInt();
|
||||||
qDebug() << "Maximum user limit: " << maxUserLimit;
|
qDebug() << "Maximum user limit: " << maxUserLimit;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool registrationEnabled = settingsCache->value("registration/enabled", false).toBool();
|
bool registrationEnabled = settingsCache->value("registration/enabled", false).toBool();
|
||||||
bool requireEmailForRegistration = settingsCache->value("registration/requireemail", true).toBool();
|
bool requireEmailForRegistration = settingsCache->value("registration/requireemail", true).toBool();
|
||||||
|
@ -273,8 +273,8 @@ 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();
|
||||||
|
pingClockInterval = settingsCache->value("server/clientkeepalive", 1).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();
|
||||||
maxMessageCountPerInterval = settingsCache->value("security/max_message_count_per_interval", 15).toInt();
|
maxMessageCountPerInterval = settingsCache->value("security/max_message_count_per_interval", 15).toInt();
|
||||||
|
@ -283,90 +283,90 @@ bool Servatrice::initServer()
|
||||||
commandCountingInterval = settingsCache->value("game/command_counting_interval", 10).toInt();
|
commandCountingInterval = settingsCache->value("game/command_counting_interval", 10).toInt();
|
||||||
maxCommandCountPerInterval = settingsCache->value("game/max_command_count_per_interval", 20).toInt();
|
maxCommandCountPerInterval = settingsCache->value("game/max_command_count_per_interval", 20).toInt();
|
||||||
|
|
||||||
try { if (settingsCache->value("servernetwork/active", 0).toInt()) {
|
try { if (settingsCache->value("servernetwork/active", 0).toInt()) {
|
||||||
qDebug() << "Connecting to ISL network.";
|
qDebug() << "Connecting to ISL network.";
|
||||||
const QString certFileName = settingsCache->value("servernetwork/ssl_cert").toString();
|
const QString certFileName = settingsCache->value("servernetwork/ssl_cert").toString();
|
||||||
const QString keyFileName = settingsCache->value("servernetwork/ssl_key").toString();
|
const QString keyFileName = settingsCache->value("servernetwork/ssl_key").toString();
|
||||||
qDebug() << "Loading certificate...";
|
qDebug() << "Loading certificate...";
|
||||||
QFile certFile(certFileName);
|
QFile certFile(certFileName);
|
||||||
if (!certFile.open(QIODevice::ReadOnly))
|
if (!certFile.open(QIODevice::ReadOnly))
|
||||||
throw QString("Error opening certificate file: %1").arg(certFileName);
|
throw QString("Error opening certificate file: %1").arg(certFileName);
|
||||||
QSslCertificate cert(&certFile);
|
QSslCertificate cert(&certFile);
|
||||||
#if QT_VERSION < 0x050000
|
#if QT_VERSION < 0x050000
|
||||||
if (!cert.isValid())
|
if (!cert.isValid())
|
||||||
throw(QString("Invalid certificate."));
|
throw(QString("Invalid certificate."));
|
||||||
#else
|
#else
|
||||||
const QDateTime currentTime = QDateTime::currentDateTime();
|
const QDateTime currentTime = QDateTime::currentDateTime();
|
||||||
if(currentTime < cert.effectiveDate() ||
|
if(currentTime < cert.effectiveDate() ||
|
||||||
currentTime > cert.expiryDate() ||
|
currentTime > cert.expiryDate() ||
|
||||||
cert.isBlacklisted())
|
cert.isBlacklisted())
|
||||||
throw(QString("Invalid certificate."));
|
throw(QString("Invalid certificate."));
|
||||||
#endif
|
#endif
|
||||||
qDebug() << "Loading private key...";
|
qDebug() << "Loading private key...";
|
||||||
QFile keyFile(keyFileName);
|
QFile keyFile(keyFileName);
|
||||||
if (!keyFile.open(QIODevice::ReadOnly))
|
if (!keyFile.open(QIODevice::ReadOnly))
|
||||||
throw QString("Error opening private key file: %1").arg(keyFileName);
|
throw QString("Error opening private key file: %1").arg(keyFileName);
|
||||||
QSslKey key(&keyFile, QSsl::Rsa, QSsl::Pem, QSsl::PrivateKey);
|
QSslKey key(&keyFile, QSsl::Rsa, QSsl::Pem, QSsl::PrivateKey);
|
||||||
if (key.isNull())
|
if (key.isNull())
|
||||||
throw QString("Invalid private key.");
|
throw QString("Invalid private key.");
|
||||||
|
|
||||||
QMutableListIterator<ServerProperties> serverIterator(serverList);
|
QMutableListIterator<ServerProperties> serverIterator(serverList);
|
||||||
while (serverIterator.hasNext()) {
|
while (serverIterator.hasNext()) {
|
||||||
const ServerProperties &prop = serverIterator.next();
|
const ServerProperties &prop = serverIterator.next();
|
||||||
if (prop.cert == cert) {
|
if (prop.cert == cert) {
|
||||||
serverIterator.remove();
|
serverIterator.remove();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
QThread *thread = new QThread;
|
QThread *thread = new QThread;
|
||||||
thread->setObjectName("isl_" + QString::number(prop.id));
|
thread->setObjectName("isl_" + QString::number(prop.id));
|
||||||
connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
|
connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
|
||||||
|
|
||||||
IslInterface *interface = new IslInterface(prop.id, prop.hostname, prop.address.toString(), prop.controlPort, prop.cert, cert, key, this);
|
IslInterface *interface = new IslInterface(prop.id, prop.hostname, prop.address.toString(), prop.controlPort, prop.cert, cert, key, this);
|
||||||
interface->moveToThread(thread);
|
interface->moveToThread(thread);
|
||||||
connect(interface, SIGNAL(destroyed()), thread, SLOT(quit()));
|
connect(interface, SIGNAL(destroyed()), thread, SLOT(quit()));
|
||||||
|
|
||||||
thread->start();
|
thread->start();
|
||||||
QMetaObject::invokeMethod(interface, "initClient", Qt::BlockingQueuedConnection);
|
QMetaObject::invokeMethod(interface, "initClient", Qt::BlockingQueuedConnection);
|
||||||
}
|
}
|
||||||
|
|
||||||
const int networkPort = settingsCache->value("servernetwork/port", 14747).toInt();
|
const int networkPort = settingsCache->value("servernetwork/port", 14747).toInt();
|
||||||
qDebug() << "Starting ISL server on port" << networkPort;
|
qDebug() << "Starting ISL server on port" << networkPort;
|
||||||
|
|
||||||
islServer = new Servatrice_IslServer(this, cert, key, this);
|
islServer = new Servatrice_IslServer(this, cert, key, this);
|
||||||
if (islServer->listen(QHostAddress::Any, networkPort))
|
if (islServer->listen(QHostAddress::Any, networkPort))
|
||||||
qDebug() << "ISL server listening.";
|
qDebug() << "ISL server listening.";
|
||||||
else
|
else
|
||||||
throw QString("islServer->listen()");
|
throw QString("islServer->listen()");
|
||||||
} } catch (QString error) {
|
} } catch (QString error) {
|
||||||
qDebug() << "ERROR --" << error;
|
qDebug() << "ERROR --" << error;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
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(pingClockInterval * 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);
|
||||||
connect(statusUpdateClock, SIGNAL(timeout()), this, SLOT(statusUpdate()));
|
connect(statusUpdateClock, SIGNAL(timeout()), this, SLOT(statusUpdate()));
|
||||||
if (statusUpdateTime != 0) {
|
if (statusUpdateTime != 0) {
|
||||||
qDebug() << "Starting status update clock, interval " << statusUpdateTime << " ms";
|
qDebug() << "Starting status update clock, interval " << statusUpdateTime << " ms";
|
||||||
statusUpdateClock->start(statusUpdateTime);
|
statusUpdateClock->start(statusUpdateTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
const int numberPools = settingsCache->value("server/number_pools", 1).toInt();
|
const int numberPools = settingsCache->value("server/number_pools", 1).toInt();
|
||||||
gameServer = new Servatrice_GameServer(this, numberPools, servatriceDatabaseInterface->getDatabase(), this);
|
gameServer = new Servatrice_GameServer(this, numberPools, servatriceDatabaseInterface->getDatabase(), this);
|
||||||
gameServer->setMaxPendingConnections(1000);
|
gameServer->setMaxPendingConnections(1000);
|
||||||
const int gamePort = settingsCache->value("server/port", 4747).toInt();
|
const int gamePort = settingsCache->value("server/port", 4747).toInt();
|
||||||
qDebug() << "Starting server on port" << gamePort;
|
qDebug() << "Starting server on port" << gamePort;
|
||||||
if (gameServer->listen(QHostAddress::Any, gamePort))
|
if (gameServer->listen(QHostAddress::Any, gamePort))
|
||||||
qDebug() << "Server listening.";
|
qDebug() << "Server listening.";
|
||||||
else {
|
else {
|
||||||
qDebug() << "gameServer->listen(): Error:" << gameServer->errorString();
|
qDebug() << "gameServer->listen(): Error:" << gameServer->errorString();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Servatrice::addDatabaseInterface(QThread *thread, Servatrice_DatabaseInterface *databaseInterface)
|
void Servatrice::addDatabaseInterface(QThread *thread, Servatrice_DatabaseInterface *databaseInterface)
|
||||||
|
@ -376,20 +376,20 @@ void Servatrice::addDatabaseInterface(QThread *thread, Servatrice_DatabaseInterf
|
||||||
|
|
||||||
void Servatrice::updateServerList()
|
void Servatrice::updateServerList()
|
||||||
{
|
{
|
||||||
qDebug() << "Updating server list...";
|
qDebug() << "Updating server list...";
|
||||||
|
|
||||||
serverListMutex.lock();
|
serverListMutex.lock();
|
||||||
serverList.clear();
|
serverList.clear();
|
||||||
|
|
||||||
QSqlQuery *query = servatriceDatabaseInterface->prepareQuery("select id, ssl_cert, hostname, address, game_port, control_port from {prefix}_servers order by id asc");
|
QSqlQuery *query = servatriceDatabaseInterface->prepareQuery("select id, ssl_cert, hostname, address, game_port, control_port from {prefix}_servers order by id asc");
|
||||||
servatriceDatabaseInterface->execSqlQuery(query);
|
servatriceDatabaseInterface->execSqlQuery(query);
|
||||||
while (query->next()) {
|
while (query->next()) {
|
||||||
ServerProperties prop(query->value(0).toInt(), QSslCertificate(query->value(1).toString().toUtf8()), query->value(2).toString(), QHostAddress(query->value(3).toString()), query->value(4).toInt(), query->value(5).toInt());
|
ServerProperties prop(query->value(0).toInt(), QSslCertificate(query->value(1).toString().toUtf8()), query->value(2).toString(), QHostAddress(query->value(3).toString()), query->value(4).toInt(), query->value(5).toInt());
|
||||||
serverList.append(prop);
|
serverList.append(prop);
|
||||||
qDebug() << QString("#%1 CERT=%2 NAME=%3 IP=%4:%5 CPORT=%6").arg(prop.id).arg(QString(prop.cert.digest().toHex())).arg(prop.hostname).arg(prop.address.toString()).arg(prop.gamePort).arg(prop.controlPort);
|
qDebug() << QString("#%1 CERT=%2 NAME=%3 IP=%4:%5 CPORT=%6").arg(prop.id).arg(QString(prop.cert.digest().toHex())).arg(prop.hostname).arg(prop.address.toString()).arg(prop.gamePort).arg(prop.controlPort);
|
||||||
}
|
}
|
||||||
|
|
||||||
serverListMutex.unlock();
|
serverListMutex.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<ServerProperties> Servatrice::getServerList() const
|
QList<ServerProperties> Servatrice::getServerList() const
|
||||||
|
|
|
@ -115,7 +115,7 @@ private:
|
||||||
QMutex txBytesMutex, rxBytesMutex;
|
QMutex txBytesMutex, rxBytesMutex;
|
||||||
quint64 txBytes, rxBytes;
|
quint64 txBytes, rxBytes;
|
||||||
int maxGameInactivityTime, maxPlayerInactivityTime;
|
int maxGameInactivityTime, maxPlayerInactivityTime;
|
||||||
int maxUsersPerAddress, messageCountingInterval, maxMessageCountPerInterval, maxMessageSizePerInterval, maxGamesPerUser, commandCountingInterval, maxCommandCountPerInterval;
|
int maxUsersPerAddress, messageCountingInterval, maxMessageCountPerInterval, maxMessageSizePerInterval, maxGamesPerUser, commandCountingInterval, maxCommandCountPerInterval, pingClockInterval;
|
||||||
|
|
||||||
QString shutdownReason;
|
QString shutdownReason;
|
||||||
int shutdownMinutes;
|
int shutdownMinutes;
|
||||||
|
@ -137,6 +137,7 @@ public:
|
||||||
QString getServerName() const { return serverName; }
|
QString getServerName() const { return serverName; }
|
||||||
QString getLoginMessage() const { QMutexLocker locker(&loginMessageMutex); return loginMessage; }
|
QString getLoginMessage() const { QMutexLocker locker(&loginMessageMutex); return loginMessage; }
|
||||||
bool getGameShouldPing() const { return true; }
|
bool getGameShouldPing() const { return true; }
|
||||||
|
int getPingClockInterval() const { return pingClockInterval; }
|
||||||
int getMaxGameInactivityTime() const { return maxGameInactivityTime; }
|
int getMaxGameInactivityTime() const { return maxGameInactivityTime; }
|
||||||
int getMaxPlayerInactivityTime() const { return maxPlayerInactivityTime; }
|
int getMaxPlayerInactivityTime() const { return maxPlayerInactivityTime; }
|
||||||
int getMaxUsersPerAddress() const { return maxUsersPerAddress; }
|
int getMaxUsersPerAddress() const { return maxUsersPerAddress; }
|
||||||
|
|
Loading…
Reference in a new issue