handle js value convert & function invocation
This commit is contained in:
@@ -8,7 +8,9 @@ class Driver {
|
||||
public:
|
||||
virtual void createContext(int contextId, QString* script) = 0;
|
||||
virtual void destroyContext(int contextId) = 0;
|
||||
virtual void invokeContextEntityMethod(int contextId, QString* method, QVector<QObject>* arguments) = 0;
|
||||
|
||||
virtual void invokeContextEntityMethod(int contextId, QString* method, ...) = 0;
|
||||
virtual void invokeDoricMethod(QString* method, ...) = 0;
|
||||
|
||||
virtual ~Driver() = default;
|
||||
};
|
||||
|
@@ -1,4 +1,7 @@
|
||||
#include "stdarg.h"
|
||||
|
||||
#include "native_driver.h"
|
||||
#include "utility/utility.h"
|
||||
|
||||
NativeDriver::~NativeDriver() {
|
||||
qDebug() << "NativeDriver destructor";
|
||||
@@ -12,6 +15,34 @@ void NativeDriver::destroyContext(int contextId) {
|
||||
jsEngine->destroyContext(contextId);
|
||||
}
|
||||
|
||||
void NativeDriver::invokeContextEntityMethod(int contextId, QString* method, QVector<QObject>* arguments) {
|
||||
void NativeDriver::invokeContextEntityMethod(int contextId, QString* method, ...) {
|
||||
QJSValueList* arguments = new QJSValueList();
|
||||
arguments->append(QJSValue(QString::number(contextId)));
|
||||
arguments->append(QJSValue(*method));
|
||||
|
||||
va_list vaList;
|
||||
va_start(vaList, method);
|
||||
auto argument = va_arg(vaList, QVariant*);
|
||||
while (argument != nullptr) {
|
||||
if (QString(typeid(QJsonObject).name()).contains(QString(argument->typeName()))) {
|
||||
QJsonObject* jsonObject = static_cast<QJsonObject*>(argument->data());
|
||||
QJsonValue* jsonValue = new QJsonValue(*jsonObject);
|
||||
QJSValue jsValue = Utility::convert(jsEngine->engine, *jsonValue);
|
||||
delete jsonValue;
|
||||
arguments->append(jsValue);
|
||||
}
|
||||
argument = va_arg(vaList, QVariant*);
|
||||
}
|
||||
va_end(vaList);
|
||||
|
||||
QJSValue result = jsEngine->engine->globalObject()
|
||||
.property(Constant::GLOBAL_DORIC)
|
||||
.property(Constant::DORIC_CONTEXT_INVOKE)
|
||||
.call(*arguments);
|
||||
qDebug() << result.toString();
|
||||
delete arguments;
|
||||
}
|
||||
|
||||
void NativeDriver::invokeDoricMethod(QString *method, ...) {
|
||||
|
||||
}
|
||||
|
@@ -26,10 +26,10 @@ public:
|
||||
}
|
||||
|
||||
void createContext(int contextId, QString *script) override;
|
||||
|
||||
void destroyContext(int contextId) override;
|
||||
|
||||
void invokeContextEntityMethod(int contextId, QString* method, QVector<QObject>* arguments) override;
|
||||
void invokeContextEntityMethod(int contextId, QString* method, ...) override;
|
||||
void invokeDoricMethod(QString* method, ...) override;
|
||||
};
|
||||
|
||||
#endif // NATIVE_DRIVER_H
|
||||
|
Reference in New Issue
Block a user