1
0
forked from BRT/arc
arc/services/scripting/ScriptRuntime.h

44 lines
2.1 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#include <QString>
#include <QVariantMap>
class QObject;
namespace Scripting {
class ScriptRuntime {
public:
enum class Result {
// Скрипт выполнился до конца. outResult — пустая строка или бизнес-ошибка
// (то, что вернёт `run()` из JS как строку). EventHandler трактует строку
// как ошибку задачи; пусто — как success.
Completed,
// Не удалось загрузить/распарсить/выполнить скрипт (JS-ошибка, не business).
// В outResult — диагностика. Caller обязан сделать fallback на C++.
EngineError,
// Скрипт не разрешён к запуску (флаг выключен / нет файла / нет SHA).
// outResult — причина. Caller делает fallback.
Disabled
};
// Синхронно запускает скрипт <bank>/<scriptName> в свежем QJSEngine.
// Должен вызываться из того же потока, где будет использоваться (worker-поток
// EventHandler'а — там разрешён блокирующий sleep и DAO).
//
// params видны JS как host.params.<key>.
//
// signalSink — опциональный QObject, на котором JS может эмитить сигналы
// через host.script.emit<SignalName>(jsonStr). Используется для скриптов
// вроде GetLastTransactionsScript, которые транслируют распарсенные
// транзакции в EventHandler через Qt-сигнал. Передавать `this` из C++
// оригинального скрипта.
static Result run(const QString &bank,
const QString &scriptName,
const QVariantMap &params,
QString *outResult,
QObject *signalSink = nullptr);
};
} // namespace Scripting