add --port=value argument

This commit is contained in:
Lion Kortlepel 2023-12-30 11:53:47 +01:00
parent 6f50cad76b
commit cf8f10b949
No known key found for this signature in database
GPG Key ID: 4322FF2B4C71259B
3 changed files with 25 additions and 3 deletions

View File

@ -35,11 +35,11 @@ public:
[[nodiscard]] bool Failed() const { return mFailed; } [[nodiscard]] bool Failed() const { return mFailed; }
void FlushToFile(); void FlushToFile();
void PrintDebug();
private: private:
void CreateConfigFile(); void CreateConfigFile();
void ParseFromFile(std::string_view name); void ParseFromFile(std::string_view name);
void PrintDebug();
void TryReadValue(toml::value& Table, const std::string& Category, const std::string_view& Key, const std::string_view& Env, std::string& OutValue); void TryReadValue(toml::value& Table, const std::string& Category, const std::string_view& Key, const std::string_view& Env, std::string& OutValue);
void TryReadValue(toml::value& Table, const std::string& Category, const std::string_view& Key, const std::string_view& Env, bool& OutValue); void TryReadValue(toml::value& Table, const std::string& Category, const std::string_view& Key, const std::string_view& Env, bool& OutValue);
void TryReadValue(toml::value& Table, const std::string& Category, const std::string_view& Key, const std::string_view& Env, int& OutValue); void TryReadValue(toml::value& Table, const std::string& Category, const std::string_view& Key, const std::string_view& Env, int& OutValue);

View File

@ -259,7 +259,6 @@ void TConfig::ParseFromFile(std::string_view name) {
Application::SetSubsystemStatus("Config", Application::Status::Bad); Application::SetSubsystemStatus("Config", Application::Status::Bad);
return; return;
} }
PrintDebug();
// Update in any case // Update in any case
if (!mDisableConfig) { if (!mDisableConfig) {

View File

@ -30,6 +30,7 @@
#include "TResourceManager.h" #include "TResourceManager.h"
#include "TServer.h" #include "TServer.h"
#include <cstdint>
#include <iostream> #include <iostream>
#include <thread> #include <thread>
@ -40,6 +41,9 @@ USAGE:
ARGUMENTS: ARGUMENTS:
--help --help
Displays this help and exits. Displays this help and exits.
--port=1234
Sets the server's listening TCP and
UDP port. Overrides ENV and ServerConfig.
--config=/path/to/ServerConfig.toml --config=/path/to/ServerConfig.toml
Absolute or relative path to the Absolute or relative path to the
Server Config file, including the Server Config file, including the
@ -91,6 +95,7 @@ int BeamMPServerMain(MainArguments Arguments) {
Parser.RegisterArgument({ "help" }, ArgsParser::NONE); Parser.RegisterArgument({ "help" }, ArgsParser::NONE);
Parser.RegisterArgument({ "version" }, ArgsParser::NONE); Parser.RegisterArgument({ "version" }, ArgsParser::NONE);
Parser.RegisterArgument({ "config" }, ArgsParser::HAS_VALUE); Parser.RegisterArgument({ "config" }, ArgsParser::HAS_VALUE);
Parser.RegisterArgument({ "port" }, ArgsParser::HAS_VALUE);
Parser.RegisterArgument({ "working-directory" }, ArgsParser::HAS_VALUE); Parser.RegisterArgument({ "working-directory" }, ArgsParser::HAS_VALUE);
Parser.Parse(Arguments.List); Parser.Parse(Arguments.List);
if (!Parser.Verify()) { if (!Parser.Verify()) {
@ -135,6 +140,24 @@ int BeamMPServerMain(MainArguments Arguments) {
} }
return 1; return 1;
} }
// override port if provided via arguments
if (Parser.FoundArgument({ "port" })) {
auto Port = Parser.GetValueOfArgument({ "port" });
if (Port.has_value()) {
auto P = int(std::strtoul(Port.value().c_str(), nullptr, 10));
if (P == 0 || P < 0 || P > UINT16_MAX) {
beammp_errorf("Custom port requested via --port is invalid: '{}'", Port.value());
return 1;
} else {
Application::Settings.Port = P;
beammp_info("Custom port requested via commandline arguments: " + Port.value());
}
}
}
Config.PrintDebug();
Application::InitializeConsole(); Application::InitializeConsole();
Application::Console().StartLoggingToFile(); Application::Console().StartLoggingToFile();