Report correct client minimum version to the backend (#376)

This commit is contained in:
Lion 2024-10-09 18:06:03 +02:00 committed by GitHub
commit 89c906232d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 13 additions and 11 deletions

View File

@ -74,7 +74,7 @@ public:
static TConsole& Console() { return mConsole; } static TConsole& Console() { return mConsole; }
static std::string ServerVersionString(); static std::string ServerVersionString();
static const Version& ServerVersion() { return mVersion; } static const Version& ServerVersion() { return mVersion; }
static uint8_t ClientMajorVersion() { return 2; } static Version ClientMinimumVersion() { return Version { 2, 2, 0 }; }
static std::string PPS() { return mPPS; } static std::string PPS() { return mPPS; }
static void SetPPS(const std::string& NewPPS) { mPPS = NewPPS; } static void SetPPS(const std::string& NewPPS) { mPPS = NewPPS; }

View File

@ -20,6 +20,7 @@
#include "ChronoWrapper.h" #include "ChronoWrapper.h"
#include "Client.h" #include "Client.h"
#include "Common.h"
#include "Http.h" #include "Http.h"
// #include "SocketIO.h" // #include "SocketIO.h"
#include <rapidjson/document.h> #include <rapidjson/document.h>
@ -146,7 +147,7 @@ std::string THeartbeatThread::GenerateCall() {
<< "&map=" << Application::Settings.getAsString(Settings::Key::General_Map) << "&map=" << Application::Settings.getAsString(Settings::Key::General_Map)
<< "&private=" << (Application::Settings.getAsBool(Settings::Key::General_Private) ? "true" : "false") << "&private=" << (Application::Settings.getAsBool(Settings::Key::General_Private) ? "true" : "false")
<< "&version=" << Application::ServerVersionString() << "&version=" << Application::ServerVersionString()
<< "&clientversion=" << std::to_string(Application::ClientMajorVersion()) + ".0" // FIXME: Wtf. << "&clientversion=" << Application::ClientMinimumVersion().AsString()
<< "&name=" << Application::Settings.getAsString(Settings::Key::General_Name) << "&name=" << Application::Settings.getAsString(Settings::Key::General_Name)
<< "&tags=" << Application::Settings.getAsString(Settings::Key::General_Tags) << "&tags=" << Application::Settings.getAsString(Settings::Key::General_Tags)
<< "&guests=" << (Application::Settings.getAsBool(Settings::Key::General_AllowGuests) ? "true" : "false") << "&guests=" << (Application::Settings.getAsBool(Settings::Key::General_AllowGuests) ? "true" : "false")

View File

@ -293,10 +293,11 @@ std::shared_ptr<TClient> TNetwork::Authentication(TConnection&& RawConnection) {
if (Data.size() > 3 && std::equal(Data.begin(), Data.begin() + VC.size(), VC.begin(), VC.end())) { if (Data.size() > 3 && std::equal(Data.begin(), Data.begin() + VC.size(), VC.begin(), VC.end())) {
std::string ClientVersionStr(reinterpret_cast<const char*>(Data.data() + 2), Data.size() - 2); std::string ClientVersionStr(reinterpret_cast<const char*>(Data.data() + 2), Data.size() - 2);
Version ClientVersion = Application::VersionStrToInts(ClientVersionStr + ".0"); Version ClientVersion = Application::VersionStrToInts(ClientVersionStr + ".0");
if (ClientVersion.major != Application::ClientMajorVersion()) { Version MinClientVersion = Application::ClientMinimumVersion();
beammp_errorf("Client tried to connect with version '{}', but only versions '{}.x.x' is allowed", if (Application::IsOutdated(ClientVersion, MinClientVersion)) {
ClientVersion.AsString(), Application::ClientMajorVersion()); beammp_errorf("Client tried to connect with version '{}', but only versions >= {} are allowed",
ClientKick(*Client, "Outdated Version!"); ClientVersion.AsString(), MinClientVersion.AsString());
ClientKick(*Client, fmt::format("Outdated version, launcher version >={} required to join!", MinClientVersion.AsString()));
return nullptr; return nullptr;
} }
} else { } else {