This repository has been archived on 2024-07-22. You can view files and clone it, but cannot push or open issues or pull requests.
Doric/doric-Qt/example/doric/DoricNativeDriver.cpp
2021-07-21 19:03:29 +08:00

76 lines
2.3 KiB
C++

#include <functional>
#include "DoricNativeDriver.h"
#include "async/DoricAsyncCall.h"
#include "utils/DoricConstant.h"
std::shared_ptr<DoricAsyncResult>
DoricNativeDriver::invokeContextEntityMethod(QString contextId, QString method,
QVariantList args) {
args.insert(0, QVariant(contextId));
args.insert(1, QVariant(method));
return invokeDoricMethod(DoricConstant::DORIC_CONTEXT_INVOKE, args);
}
std::shared_ptr<DoricAsyncResult>
DoricNativeDriver::invokeDoricMethod(QString method, QVariantList args) {
std::shared_ptr<DoricAsyncResult> asyncResult =
std::make_shared<DoricAsyncResult>();
DoricAsyncCall::ensureRunInThreadPool(
&jsEngine.mJSThreadPool, [this, method, args, asyncResult] {
QString result = this->jsEngine.invokeDoricMethod(method, args);
asyncResult->setResult(result);
});
return asyncResult;
}
std::shared_ptr<DoricAsyncResult>
DoricNativeDriver::asyncCall(std::function<void()> lambda,
DoricThreadMode mode) {
switch (mode) {
case UI:
return DoricAsyncCall::ensureRunInMain(lambda);
break;
case JS:
return DoricAsyncCall::ensureRunInThreadPool(&jsEngine.mJSThreadPool,
lambda);
break;
}
return NULL;
}
std::shared_ptr<DoricAsyncResult>
DoricNativeDriver::createContext(QString contextId, QString script,
QString source) {
std::shared_ptr<DoricAsyncResult> asyncResult =
std::make_shared<DoricAsyncResult>();
DoricAsyncCall::ensureRunInThreadPool(
&jsEngine.mJSThreadPool, [this, contextId, script, source, asyncResult] {
QString result =
this->jsEngine.prepareContext(contextId, script, source);
asyncResult->setResult(result);
});
return asyncResult;
}
std::shared_ptr<DoricAsyncResult>
DoricNativeDriver::destroyContext(QString contextId) {
std::shared_ptr<DoricAsyncResult> asyncResult =
std::make_shared<DoricAsyncResult>();
DoricAsyncCall::ensureRunInThreadPool(
&jsEngine.mJSThreadPool, [this, contextId, asyncResult] {
QString result = this->jsEngine.destroyContext(contextId);
asyncResult->setResult(result);
});
return asyncResult;
}
DoricRegistry *DoricNativeDriver::getRegistry() {
return this->jsEngine.getRegistry();
}