44 lines
2.1 KiB
C++
44 lines
2.1 KiB
C++
#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 ¶ms,
|
||
QString *outResult,
|
||
QObject *signalSink = nullptr);
|
||
};
|
||
|
||
} // namespace Scripting
|