diff --git a/include/Common.h b/include/Common.h index 4fc4b0b..df26435 100644 --- a/include/Common.h +++ b/include/Common.h @@ -43,6 +43,7 @@ public: struct TSettings { std::string ServerName { "BeamMP Server" }; std::string ServerDesc { "BeamMP Default Description" }; + std::string ServerTags { "Freeroam" }; std::string Resource { "Resources" }; std::string MapName { "/levels/gridmap_v2/info.json" }; std::string Key {}; @@ -136,6 +137,8 @@ private: static inline Version mVersion { 3, 2, 0 }; }; +void SplitString(std::string const& str, const char delim, std::vector& out); + std::string ThreadName(bool DebugModeOverride = false); void RegisterThread(const std::string& str); #define RegisterThreadAuto() RegisterThread(__func__) diff --git a/include/TConfig.h b/include/TConfig.h index 1a3b62b..84e534a 100644 --- a/include/TConfig.h +++ b/include/TConfig.h @@ -27,6 +27,7 @@ private: void TryReadValue(toml::value& Table, const std::string& Category, const std::string_view& Key, const std::string_view& Env, int& OutValue); void ParseOldFormat(); + std::string TagsAsPrettyArray() const; bool IsDefault(); bool mFailed { false }; std::string mConfigFileName; diff --git a/src/Common.cpp b/src/Common.cpp index af345ad..d68dcf1 100644 --- a/src/Common.cpp +++ b/src/Common.cpp @@ -348,3 +348,14 @@ std::string GetPlatformAgnosticErrorString() { return "(no human-readable errors on this platform)"; #endif } + +// TODO: add unit tests to SplitString +void SplitString(const std::string& str, const char delim, std::vector& out) { + size_t start; + size_t end = 0; + + while ((start = str.find_first_not_of(delim, end)) != std::string::npos) { + end = str.find(delim, start); + out.push_back(str.substr(start, end - start)); + } +} diff --git a/src/TConfig.cpp b/src/TConfig.cpp index c26cad7..9584c57 100644 --- a/src/TConfig.cpp +++ b/src/TConfig.cpp @@ -24,6 +24,8 @@ static constexpr std::string_view StrName = "Name"; static constexpr std::string_view EnvStrName = "BEAMMP_NAME"; static constexpr std::string_view StrDescription = "Description"; static constexpr std::string_view EnvStrDescription = "BEAMMP_DESCRIPTION"; +static constexpr std::string_view StrTags = "Tags"; +static constexpr std::string_view EnvStrTags = "BEAMMP_TAGS"; static constexpr std::string_view StrResourceFolder = "ResourceFolder"; static constexpr std::string_view EnvStrResourceFolder = "BEAMMP_RESOURCE_FOLDER"; static constexpr std::string_view StrAuthKey = "AuthKey"; @@ -105,6 +107,8 @@ void TConfig::FlushToFile() { data["General"][StrPrivate.data()] = Application::Settings.Private; data["General"][StrPort.data()] = Application::Settings.Port; data["General"][StrName.data()] = Application::Settings.ServerName; + SetComment(data["General"][StrTags.data()].comments(), " Add custom identifying tags to your server to make it easier to find. Format should be TagA,TagB,TagC. Note the comma seperation."); + data["General"][StrTags.data()] = Application::Settings.ServerTags; data["General"][StrMaxCars.data()] = Application::Settings.MaxCars; data["General"][StrMaxPlayers.data()] = Application::Settings.MaxPlayers; data["General"][StrMap.data()] = Application::Settings.MapName; @@ -122,7 +126,7 @@ void TConfig::FlushToFile() { std::stringstream Ss; Ss << "# This is the BeamMP-Server config file.\n" "# Help & Documentation: `https://wiki.beammp.com/en/home/server-maintenance`\n" - "# IMPORTANT: Fill in the AuthKey with the key you got from `https://beammp.com/k/dashboard` on the left under \"Keys\"\n" + "# IMPORTANT: Fill in the AuthKey with the key you got from `https://keymaster.beammp.com/` on the left under \"Keys\"\n" << data; auto File = std::fopen(mConfigFileName.c_str(), "w+"); if (!File) { @@ -201,6 +205,7 @@ void TConfig::ParseFromFile(std::string_view name) { TryReadValue(data, "General", StrMap, EnvStrMap, Application::Settings.MapName); TryReadValue(data, "General", StrName, EnvStrName, Application::Settings.ServerName); TryReadValue(data, "General", StrDescription, EnvStrDescription, Application::Settings.ServerDesc); + TryReadValue(data, "General", StrTags, EnvStrTags, Application::Settings.ServerTags); TryReadValue(data, "General", StrResourceFolder, EnvStrResourceFolder, Application::Settings.Resource); TryReadValue(data, "General", StrAuthKey, EnvStrAuthKey, Application::Settings.Key); TryReadValue(data, "General", StrLogChat, EnvStrLogChat, Application::Settings.LogChat); @@ -241,6 +246,7 @@ void TConfig::PrintDebug() { beammp_debug(std::string(StrMap) + ": \"" + Application::Settings.MapName + "\""); beammp_debug(std::string(StrName) + ": \"" + Application::Settings.ServerName + "\""); beammp_debug(std::string(StrDescription) + ": \"" + Application::Settings.ServerDesc + "\""); + beammp_debug(std::string(StrTags) + ": " + TagsAsPrettyArray()); beammp_debug(std::string(StrLogChat) + ": \"" + (Application::Settings.LogChat ? "true" : "false") + "\""); beammp_debug(std::string(StrResourceFolder) + ": \"" + Application::Settings.Resource + "\""); // special! @@ -300,3 +306,13 @@ void TConfig::ParseOldFormat() { Str >> std::ws; } } +std::string TConfig::TagsAsPrettyArray() const { + std::vector TagsArray = {}; + SplitString(Application::Settings.ServerTags, ',', TagsArray); + std::string Pretty = {}; + for (size_t i = 0; i < TagsArray.size() - 1; ++i) { + Pretty += '\"' + TagsArray[i] + "\", "; + } + Pretty += '\"' + TagsArray.at(TagsArray.size()-1) + "\""; + return Pretty; +} diff --git a/src/TConsole.cpp b/src/TConsole.cpp index cde978e..11e753e 100644 --- a/src/TConsole.cpp +++ b/src/TConsole.cpp @@ -52,17 +52,6 @@ TEST_CASE("TrimString") { CHECK(TrimString("") == ""); } -// TODO: add unit tests to SplitString -static inline void SplitString(std::string const& str, const char delim, std::vector& out) { - size_t start; - size_t end = 0; - - while ((start = str.find_first_not_of(delim, end)) != std::string::npos) { - end = str.find(delim, start); - out.push_back(str.substr(start, end - start)); - } -} - static std::string GetDate() { std::chrono::system_clock::time_point now = std::chrono::system_clock::now(); time_t tt = std::chrono::system_clock::to_time_t(now); diff --git a/src/THeartbeatThread.cpp b/src/THeartbeatThread.cpp index 1d860d8..f510087 100644 --- a/src/THeartbeatThread.cpp +++ b/src/THeartbeatThread.cpp @@ -129,6 +129,7 @@ std::string THeartbeatThread::GenerateCall() { << "&version=" << Application::ServerVersionString() << "&clientversion=" << std::to_string(Application::ClientMajorVersion()) + ".0" // FIXME: Wtf. << "&name=" << Application::Settings.ServerName + << "&tags=" << Application::Settings.ServerTags << "&modlist=" << mResourceManager.TrimmedList() << "&modstotalsize=" << mResourceManager.MaxModSize() << "&modstotal=" << mResourceManager.ModsLoaded()