diff --git a/src/devtools/stdin_cmd_reader.cpp b/src/devtools/stdin_cmd_reader.cpp new file mode 100644 index 000000000..fccbb7f57 --- /dev/null +++ b/src/devtools/stdin_cmd_reader.cpp @@ -0,0 +1,40 @@ +#include "stdin_cmd_reader.hpp" + +#include "engine/Engine.hpp" +#include "logic/CommandsInterpreter.hpp" +#include "coders/json.hpp" +#include "debug/Logger.hpp" + +#include +#include + +static debug::Logger logger("stdin-reader"); + +static std::thread reader_thread; + +void cmd::start_stdin_cmd_reader(Engine& engine) { + reader_thread = std::thread([&engine]() { + auto& interpreter = engine.getCmd(); + logger.info() << "reader thread started"; + + std::string line; + while (std::getline(std::cin, line)) { + if (line.empty()) { + continue; + } + engine.postRunnable([line, &interpreter] () { + try { + auto result = interpreter.execute(line); + if (result.isString()) { + logger.info() << result.asString(); + } else { + logger.info() << json::stringify(result, true); + } + } catch (const std::exception& err) { + logger.error() << err.what(); + } + }); + } + }); + reader_thread.detach(); +} diff --git a/src/devtools/stdin_cmd_reader.hpp b/src/devtools/stdin_cmd_reader.hpp new file mode 100644 index 000000000..992054250 --- /dev/null +++ b/src/devtools/stdin_cmd_reader.hpp @@ -0,0 +1,7 @@ +#pragma once + +class Engine; + +namespace cmd { + void start_stdin_cmd_reader(Engine& engine); +} diff --git a/src/devtools/stdin_reader.cpp b/src/devtools/stdin_reader.cpp deleted file mode 100644 index dba26b75d..000000000 --- a/src/devtools/stdin_reader.cpp +++ /dev/null @@ -1,36 +0,0 @@ -#include "stdin_reader.hpp" - -#include "logic/CommandsInterpreter.hpp" -#include "coders/json.hpp" -#include "debug/Logger.hpp" - -#include -#include - -static debug::Logger logger("stdin-reader"); - -static std::thread reader_thread; - -void start_stdin_reader(cmd::CommandsInterpreter& interpreter) { - reader_thread = std::thread([&interpreter]() { - logger.info() << "reader thread started"; - - std::string line; - while (std::getline(std::cin, line)) { - if (line.empty()) { - continue; - } - try { - auto result = interpreter.execute(line); - if (result.isString()) { - logger.info() << result.asString(); - } else { - logger.info() << json::stringify(result, true); - } - } catch (const std::exception& err) { - logger.error() << err.what(); - } - } - }); - reader_thread.detach(); -} diff --git a/src/devtools/stdin_reader.hpp b/src/devtools/stdin_reader.hpp deleted file mode 100644 index d141db998..000000000 --- a/src/devtools/stdin_reader.hpp +++ /dev/null @@ -1,7 +0,0 @@ -#pragma once - -namespace cmd { - class CommandsInterpreter; -} - -void start_stdin_reader(cmd::CommandsInterpreter& interpreter); diff --git a/src/engine/Engine.cpp b/src/engine/Engine.cpp index 50a6f921b..0f34cb031 100644 --- a/src/engine/Engine.cpp +++ b/src/engine/Engine.cpp @@ -15,7 +15,7 @@ #include "devtools/DebuggingServer.hpp" #include "devtools/Editor.hpp" #include "devtools/Project.hpp" -#include "devtools/stdin_reader.hpp" +#include "devtools/stdin_cmd_reader.hpp" #include "EnginePaths.hpp" #include "frontend/locale.hpp" #include "frontend/menu.hpp" @@ -193,7 +193,7 @@ void Engine::initialize(CoreParameters coreParameters) { project->loadProjectClientScript(); } if (params.stdinCommands) { - start_stdin_reader(*cmd); + cmd::start_stdin_cmd_reader(*this); } }