Merge pull request #783 from MihailRis/stdin-commands

executing commands from stdin
This commit is contained in:
MihailRis 2026-02-11 17:27:22 +03:00 • committed by GitHub
commit 4478afa1ef
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 52 additions and 0 deletions

View file

@ -0,0 +1,36 @@
#include "stdin_reader.hpp"
#include "logic/CommandsInterpreter.hpp"
#include "coders/json.hpp"
#include "debug/Logger.hpp"
#include <thread>
#include <iostream>
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();
}

View file

@ -0,0 +1,7 @@
#pragma once
namespace cmd {
class CommandsInterpreter;
}
void start_stdin_reader(cmd::CommandsInterpreter& interpreter);

View file

@ -6,6 +6,7 @@
struct CoreParameters {
bool headless = false;
bool testMode = false;
bool stdinCommands = false;
std::filesystem::path resFolder = "res";
std::filesystem::path userFolder = ".";
std::filesystem::path scriptFile;

View file

@ -15,6 +15,7 @@
#include "devtools/DebuggingServer.hpp"
#include "devtools/Editor.hpp"
#include "devtools/Project.hpp"
#include "devtools/stdin_reader.hpp"
#include "EnginePaths.hpp"
#include "frontend/locale.hpp"
#include "frontend/menu.hpp"
@ -191,6 +192,9 @@ void Engine::initialize(CoreParameters coreParameters) {
if (!params.headless) {
project->loadProjectClientScript();
}
if (params.stdinCommands) {
start_stdin_reader(*cmd);
}
}
void Engine::loadSettings() {

View file

@ -62,6 +62,10 @@ static bool perform_keyword(
params.headless = true;
return true;
}, "", "run in headless mode."),
ArgC("--stdin-cmd", [&params]() -> bool {
params.stdinCommands = true;
return true;
}, "", "run commands from stdin."),
ArgC("--tps", [&params, &reader]() -> bool {
params.tps = reader.nextInt();
return true;