From 43fad78bf91917c05803a64d1e9bff332234ac67 Mon Sep 17 00:00:00 2001 From: JustinAJ Date: Tue, 31 Mar 2015 04:06:14 -0400 Subject: [PATCH] Added Server::fetchClientList() function; Server::updateClientList() now only requests a partial client list; updateClientList() is now called on a configurable interval (default: 2500 milliseconds) --- Release/Plugins/RenX.Core.lib | Bin 110218 -> 110530 bytes RenX.Core/RenX_Server.cpp | 32 +++++++++++++++++++++++++++++--- RenX.Core/RenX_Server.h | 14 +++++++++++++- 3 files changed, 42 insertions(+), 4 deletions(-) diff --git a/Release/Plugins/RenX.Core.lib b/Release/Plugins/RenX.Core.lib index 99795b00749a08c003ee302a0b2e4d023092e754..ae1ae24e07b4635f3ca19a59e5f11377f6a6c559 100644 GIT binary patch delta 11766 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 delta 11685 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 3 && std::chrono::steady_clock::now() > RenX::Server::lastClientListUpdate + RenX::Server::clientUpdateRate) + RenX::Server::updateClientList(); } return 0; } @@ -342,11 +345,32 @@ bool RenX::Server::removePlayer(RenX::PlayerInfo *player) return RenX::Server::removePlayer(player->id); } -bool RenX::Server::updateClientList() +bool RenX::Server::fetchClientList() { + RenX::Server::lastClientListUpdate = std::chrono::steady_clock::now(); return RenX::Server::sock.send(STRING_LITERAL_AS_REFERENCE("cclientvarlist KILLS\xA0""DEATHS\xA0""SCORE\xA0""CREDITS\xA0""CHARACTER\xA0""VEHICLE\xA0""PING\xA0""ADMIN\xA0""STEAM\xA0""IP\xA0""PLAYERLOG\n")) > 0 && RenX::Server::sock.send(STRING_LITERAL_AS_REFERENCE("cbotvarlist KILLS\xA0""DEATHS\xA0""SCORE\xA0""CREDITS\xA0""CHARACTER\xA0""VEHICLE\xA0""PLAYERLOG\n")) > 0; - //return RenX::Server::sock.send(STRING_LITERAL_AS_REFERENCE("cclientlist\n")) > 0; +} + +bool RenX::Server::updateClientList() +{ + RenX::Server::lastClientListUpdate = std::chrono::steady_clock::now(); + if (RenX::Server::players.size() == 0) + return true; + + size_t botCount = 0; + for (size_t i = 0; i != RenX::Server::players.size(); i++) + if (RenX::Server::players.get(i)->isBot) + botCount++; + + bool r; + if (RenX::Server::players.size() != botCount) + r = RenX::Server::sock.send(STRING_LITERAL_AS_REFERENCE("cclientvarlist ID\xA0""SCORE\xA0""CREDITS\xA0""PING\n")) > 0; + + if (botCount != 0) + r |= RenX::Server::sock.send(STRING_LITERAL_AS_REFERENCE("cbotvarlist ID\xA0""SCORE\xA0""CREDITS\n")) > 0; + + return r; } bool RenX::Server::gameover() @@ -2081,7 +2105,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) if (this->rconVersion >= 3) { - RenX::Server::updateClientList(); + RenX::Server::fetchClientList(); this->firstGame = true; this->seamless = true; @@ -2151,6 +2175,7 @@ bool RenX::Server::reconnect() void RenX::Server::wipeData() { + RenX::Server::rconVersion = 0; RenX::Server::rconUser.truncate(RenX::Server::rconUser.size()); while (RenX::Server::players.size() != 0) delete RenX::Server::players.remove(0U); @@ -2200,6 +2225,7 @@ void RenX::Server::init() RenX::Server::localBan = RenX::Server::localIPBan || RenX::Server::localSteamBan || RenX::Server::localNameBan; RenX::Server::steamFormat = Jupiter::IRC::Client::Config->getInt(RenX::Server::configSection, STRING_LITERAL_AS_REFERENCE("SteamFormat"), 16); RenX::Server::neverSay = Jupiter::IRC::Client::Config->getBool(RenX::Server::configSection, STRING_LITERAL_AS_REFERENCE("NeverSay"), false); + RenX::Server::clientUpdateRate = std::chrono::milliseconds(Jupiter::IRC::Client::Config->getInt(RenX::Server::configSection, STRING_LITERAL_AS_REFERENCE("ClientUpdateRate"), 2500)); Jupiter::INIFile &commandsFile = RenX::getCore()->getCommandsFile(); RenX::Server::commandAccessLevels = commandsFile.getSection(RenX::Server::configSection); diff --git a/RenX.Core/RenX_Server.h b/RenX.Core/RenX_Server.h index a1500a1..e239ac1 100644 --- a/RenX.Core/RenX_Server.h +++ b/RenX.Core/RenX_Server.h @@ -24,6 +24,7 @@ */ #include +#include #include "Jupiter/TCPSocket.h" #include "Jupiter/DLList.h" #include "Jupiter/ArrayList.h" @@ -284,7 +285,16 @@ namespace RenX bool removePlayer(RenX::PlayerInfo *player); /** - * @brief Sends a client list request. + * @brief Sends a full client list request. + * Note: This is used to build the initial player list. + * + * @return True on success, false otherwise. + */ + bool fetchClientList(); + + /** + * @brief Sends a patrial client list request. + * Note: This only updates score, credits, and ping for known players. * * @return True on success, false otherwise. */ @@ -711,6 +721,7 @@ namespace RenX bool firstAction = false; unsigned int rconVersion = 0; time_t lastAttempt = 0; + std::chrono::steady_clock::time_point lastClientListUpdate = std::chrono::steady_clock::now(); Jupiter::String lastLine; Jupiter::StringS commandListFormat; Jupiter::StringS gameVersion; @@ -721,6 +732,7 @@ namespace RenX int logChanType; int adminLogChanType; time_t delay; + std::chrono::milliseconds clientUpdateRate; int steamFormat; /** 16 = hex, 10 = base 10, 8 = octal, -2 = SteamID 2, -3 = SteamID 3 */ unsigned int uuidMode; /** 0 = steam, 1 = nickname */ bool rconBan;