From 41ba0b8e656baa61c9e156723178d1d6ebb4148c Mon Sep 17 00:00:00 2001 From: MihailRis Date: Wed, 11 Feb 2026 15:26:53 +0300 Subject: [PATCH] feat: executing commands from stdin --- src/devtools/StdinReader.cpp | 34 ++++++++++++++++++++++++++++++++++ src/devtools/StdinReader.hpp | 7 +++++++ src/engine/Engine.cpp | 3 +++ 3 files changed, 44 insertions(+) create mode 100644 src/devtools/StdinReader.cpp create mode 100644 src/devtools/StdinReader.hpp diff --git a/src/devtools/StdinReader.cpp b/src/devtools/StdinReader.cpp new file mode 100644 index 000000000..16752ec31 --- /dev/null +++ b/src/devtools/StdinReader.cpp @@ -0,0 +1,34 @@ +#include "StdinReader.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]() { + 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/StdinReader.hpp b/src/devtools/StdinReader.hpp new file mode 100644 index 000000000..d141db998 --- /dev/null +++ b/src/devtools/StdinReader.hpp @@ -0,0 +1,7 @@ +#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 9afe0824a..1e9566fea 100644 --- a/src/engine/Engine.cpp +++ b/src/engine/Engine.cpp @@ -15,6 +15,7 @@ #include "devtools/DebuggingServer.hpp" #include "devtools/Editor.hpp" #include "devtools/Project.hpp" +#include "devtools/StdinReader.hpp" #include "EnginePaths.hpp" #include "frontend/locale.hpp" #include "frontend/menu.hpp" @@ -191,6 +192,8 @@ void Engine::initialize(CoreParameters coreParameters) { if (!params.headless) { project->loadProjectClientScript(); } + + start_stdin_reader(*cmd); } void Engine::loadSettings() {