diff --git a/external/gamekit b/external/gamekit index eca073ea4..1e8b6c860 160000 --- a/external/gamekit +++ b/external/gamekit @@ -1 +1 @@ -Subproject commit eca073ea4ae4758477e0f931c7e8d8bd8216fc2e +Subproject commit 1e8b6c860bff1da20880a93c852754a879eed56c diff --git a/source/client/core/ClientApplication.cpp b/source/client/core/ClientApplication.cpp index 9fecfe147..2a059686e 100644 --- a/source/client/core/ClientApplication.cpp +++ b/source/client/core/ClientApplication.cpp @@ -49,13 +49,14 @@ ClientApplication::ClientApplication(int argc, char **argv) : gk::CoreApplicatio } void ClientApplication::init() { - m_argumentParser.addArgument("host", {"-h", "--host", "Select the host to connect to.", "host"}); - m_argumentParser.addArgument("port", {"-p", "--port", "Select the port to use.", "port"}); + m_argumentParser.addArgument("host", {"-h", "--host", "Select the host to connect to.", "host"}); + m_argumentParser.addArgument("port", {"-p", "--port", "Select the port to use.", "port"}); m_argumentParser.addArgument("singleplayer", {"-s", "--singleplayer", "Start in singleplayer mode."}); - m_argumentParser.addArgument("multiplayer", {"-m", "--multiplayer", "Start in multiplayer mode."}); - m_argumentParser.addArgument("working-dir", {"-w", "--working-dir", "Change the working directory to .", "dir"}); + m_argumentParser.addArgument("multiplayer", {"-m", "--multiplayer", "Start in multiplayer mode."}); + m_argumentParser.addArgument("working-dir", {"-w", "--working-dir", "Change the working directory to .", "dir"}); m_argumentParser.addArgument("texture-pack", {"-t", "--texture-pack", "Use texture pack .", "name"}); - m_argumentParser.addArgument("username", {"-u", "--username", "Use when using -m or -s", "username"}); + m_argumentParser.addArgument("username", {"-u", "--username", "Use when using -m or -s", "username"}); + m_argumentParser.addArgument("log-level", {"-l", "--log-level", "Choose the log level (debug, info, warning, error)", "level"}); m_loggerHandler.setName("client"); @@ -71,6 +72,21 @@ void ClientApplication::init() { if (m_argumentParser.getArgument("help").isFound) return; + if (m_argumentParser.getArgument("log-level").isFound) { + std::unordered_map levels = { + {"debug", gk::LogLevel::Debug}, + {"info", gk::LogLevel::Info}, + {"warning", gk::LogLevel::Warning}, + {"error", gk::LogLevel::Error}, + }; + + auto it = levels.find(m_argumentParser.getArgument("log-level").parameter); + if (it != levels.end()) + m_loggerHandler.setMaxLevel(it->second); + else + gkWarning() << ("Failed to set log level to '" + m_argumentParser.getArgument("log-level").parameter + "': Invalid value").c_str(); + } + if (m_argumentParser.getArgument("working-dir").isFound) fs::current_path(m_argumentParser.getArgument("working-dir").parameter); diff --git a/source/client/states/TitleScreenState.cpp b/source/client/states/TitleScreenState.cpp index 257fd56fe..8de2877d0 100644 --- a/source/client/states/TitleScreenState.cpp +++ b/source/client/states/TitleScreenState.cpp @@ -122,12 +122,14 @@ void TitleScreenState::startSingleplayer(bool showLoadingState, const std::strin if (m_thread.joinable()) m_thread.join(); - m_thread = std::thread([this, worldName] () { + gk::LogLevel logLevel = gk::LoggerHandler::getInstance().maxLevel(); + m_thread = std::thread([this, worldName, logLevel] () { ServerApplication app{*m_eventHandler}; if (!worldName.empty()) app.setWorldName(worldName); + app.setLogLevel(logLevel); app.setSingleplayer(true); app.setPort(sf::Socket::AnyPort); app.run(); diff --git a/source/server/core/ServerApplication.cpp b/source/server/core/ServerApplication.cpp index fa5eb126b..f261ba707 100644 --- a/source/server/core/ServerApplication.cpp +++ b/source/server/core/ServerApplication.cpp @@ -63,14 +63,15 @@ ServerApplication::ServerApplication(gk::EventHandler &eventHandler) { bool ServerApplication::init() { std::srand(std::time(nullptr)); - m_loggerHandler.setName("server"); gk::LoggerHandler::setInstance(m_loggerHandler); + m_loggerHandler.setName("server"); BlockGeometry::initOrientation(); m_argumentParser.addArgument("port", {"-p", "--port", "Select the port to use.", "port"}); m_argumentParser.addArgument("world", {"-w", "--world", "Select a world to use.", "world"}); m_argumentParser.addArgument("working-dir", {"-d", "--working-dir", "Change the working directory to .", "dir"}); + m_argumentParser.addArgument("log-level", {"-l", "--log-level", "Choose the log level (debug, info, warning, error)", "level"}); m_argumentParser.parse(); @@ -93,6 +94,21 @@ bool ServerApplication::init() { if (m_argumentParser.getArgument("world").isFound) m_worldName = m_argumentParser.getArgument("world").parameter; + if (m_argumentParser.getArgument("log-level").isFound) { + std::unordered_map levels = { + {"debug", gk::LogLevel::Debug}, + {"info", gk::LogLevel::Info}, + {"warning", gk::LogLevel::Warning}, + {"error", gk::LogLevel::Error}, + }; + + auto it = levels.find(m_argumentParser.getArgument("log-level").parameter); + if (it != levels.end()) + m_loggerHandler.setMaxLevel(it->second); + else + gkWarning() << ("Failed to set log level to '" + m_argumentParser.getArgument("log-level").parameter + "': Invalid value").c_str(); + } + ServerConfig::loadConfigFromFile("config/server.lua"); m_server.init(m_port); diff --git a/source/server/core/ServerApplication.hpp b/source/server/core/ServerApplication.hpp index e844d81a5..1c160b24f 100644 --- a/source/server/core/ServerApplication.hpp +++ b/source/server/core/ServerApplication.hpp @@ -52,6 +52,7 @@ class ServerApplication { void setSingleplayer(bool isSingleplayer) { m_server.setSingleplayer(isSingleplayer); } void setPort(u16 port) { m_port = port; } void setWorldName(const std::string &worldName) { m_worldName = worldName; } + void setLogLevel(gk::LogLevel logLevel) { m_loggerHandler.setMaxLevel(logLevel); } private: void update();