diff --git a/common/server.cpp b/common/server.cpp index 69c08e31..3a413540 100644 --- a/common/server.cpp +++ b/common/server.cpp @@ -38,7 +38,7 @@ #include Server::Server(QObject *parent) - : QObject(parent), nextLocalGameId(0) + : QObject(parent), nextLocalGameId(0), tcpUserCount(0), webSocketUserCount(0) { qRegisterMetaType("ServerInfo_Ban"); qRegisterMetaType("ServerInfo_Game"); @@ -202,12 +202,25 @@ Server_AbstractUserInterface *Server::findUser(const QString &userName) const void Server::addClient(Server_ProtocolHandler *client) { + if (client->getConnectionType() == "tcp") + tcpUserCount++; + + if (client->getConnectionType() == "websocket") + webSocketUserCount++; + QWriteLocker locker(&clientsLock); clients << client; } void Server::removeClient(Server_ProtocolHandler *client) { + + if (client->getConnectionType() == "tcp") + tcpUserCount--; + + if (client->getConnectionType() == "websocket") + webSocketUserCount--; + QWriteLocker locker(&clientsLock); clients.removeAt(clients.indexOf(client)); ServerInfo_User *data = client->getUserInfo(); diff --git a/common/server.h b/common/server.h index 3cb7cbf3..bdf172c9 100644 --- a/common/server.h +++ b/common/server.h @@ -97,10 +97,12 @@ public: QList getPersistentPlayerReferences(const QString &userName) const; int getUsersCount() const; int getGamesCount() const; + int getTCPUserCount() const { return tcpUserCount; } + int getWebSocketUserCount() const { return webSocketUserCount; } private: QMultiMap persistentPlayers; mutable QReadWriteLock persistentPlayersLock; - int nextLocalGameId; + int nextLocalGameId, tcpUserCount, webSocketUserCount; QMutex nextLocalGameIdMutex; protected slots: diff --git a/servatrice/src/serversocketinterface.cpp b/servatrice/src/serversocketinterface.cpp index a886f207..d749108a 100644 --- a/servatrice/src/serversocketinterface.cpp +++ b/servatrice/src/serversocketinterface.cpp @@ -1259,7 +1259,7 @@ bool TcpServerSocketInterface::initTcpSession() bool enforceUserLimit = settingsCache->value("security/enable_max_user_limit", false).toBool(); if (enforceUserLimit) { int userLimit = settingsCache->value("security/max_users_tcp", 500).toInt(); - int playerCount = (databaseInterface->getActiveUserCount(getConnectionType()) + 1); + int playerCount = (server->getTCPUserCount() + 1); if (playerCount > userLimit){ std::cerr << "Max Tcp Users Limit Reached, please increase the max_users_tcp setting." << std::endl; logger->logMessage(QString("Max Tcp Users Limit Reached, please increase the max_users_tcp setting."), this); @@ -1313,7 +1313,7 @@ bool WebsocketServerSocketInterface::initWebsocketSession() bool enforceUserLimit = settingsCache->value("security/enable_max_user_limit", false).toBool(); if (enforceUserLimit) { int userLimit = settingsCache->value("security/max_users_websocket", 500).toInt(); - int playerCount = (databaseInterface->getActiveUserCount(getConnectionType()) + 1); + int playerCount = (server->getWebSocketUserCount() + 1); if (playerCount > userLimit){ std::cerr << "Max Websocket Users Limit Reached, please increase the max_users_websocket setting." << std::endl; logger->logMessage(QString("Max Websocket Users Limit Reached, please increase the max_users_websocket setting."), this);