-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathbridgeplugin.h
61 lines (50 loc) · 1.92 KB
/
bridgeplugin.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#ifndef BRIDGEPLUGIN_H
#define BRIDGEPLUGIN_H
#include <QObject>
#include <QVariant>
#include <QThread>
#include <lua.hpp>
class BridgePlugin;
struct BridgeCallableObject
{
BridgePlugin *ownerPlugin;
void *data;
BridgeCallableObject():ownerPlugin(nullptr), data(nullptr){}
};
Q_DECLARE_METATYPE(BridgeCallableObject)
struct QuikCallableObject
{
int objid;
QuikCallableObject():objid(-1){}
};
Q_DECLARE_METATYPE(QuikCallableObject)
class BridgePlugin : public QObject
{
Q_OBJECT
public:
explicit BridgePlugin(const QVariantMap &cfg, QObject *parent = nullptr);
~BridgePlugin();
virtual void invokeQuik(QString method, const QVariantList &args, QVariantList &res);
virtual void invokeQuikObject(int objid, QString method, const QVariantList &args, QVariantList &res);
virtual void deleteQuikObject(int objid);
virtual void registerCallback(QString name);
virtual void getQuikVariable(QString varname, QVariant &res);
static int getPluginCount();
friend void invokePlugin(BridgePlugin *plug, QString name, const QVariantList &args, QVariant &vres);
friend void fastInvokePlugin(BridgePlugin *plug, BridgeCallableObject cobj, const QVariantList &args, QVariant &vres);
virtual void start() = 0;
lua_State *getRecentStackForThreadId(Qt::HANDLE ctid);
void setRecentStack(Qt::HANDLE ctid, lua_State *l);
void setEventLoopName(QString evlName){eventLoopName=evlName;}
QString getEventLoopName(){return eventLoopName;}
protected:
QString eventLoopName;
QMap<Qt::HANDLE, lua_State *> recentStackMap;
virtual void callbackRequest(QString name, const QVariantList &args, QVariant &vres) = 0;
virtual void fastCallbackRequest(BridgeCallableObject cobj, const QVariantList &args, QVariant &res) = 0;
void sendStdoutLine(QString line);
void sendStderrLine(QString line);
private:
static QList<BridgePlugin *> *pluginRegistry;
};
#endif // BRIDGEPLUGIN_H