3 #include <QDebug> |
3 #include <QDebug> |
4 |
4 |
5 #include "hwengine.h" |
5 #include "hwengine.h" |
6 |
6 |
7 extern "C" { |
7 extern "C" { |
8 void (*RunEngine)(int argc, char ** argv); |
8 RunEngine_t *RunEngine; |
|
9 registerIPCCallback_t *registerIPCCallback; |
|
10 ipcToEngine_t *ipcToEngine; |
|
11 flibInit_t *flibInit; |
9 } |
12 } |
10 |
|
11 HWEngine::HWEngine(QObject *parent) : |
13 HWEngine::HWEngine(QObject *parent) : |
12 QObject(parent) |
14 QObject(parent) |
13 { |
15 { |
14 QLibrary hwlib("./libhwengine.so"); |
16 QLibrary hwlib("./libhwengine.so"); |
15 |
17 |
16 if(!hwlib.load()) |
18 if(!hwlib.load()) |
17 qWarning() << "Engine library not found" << hwlib.errorString(); |
19 qWarning() << "Engine library not found" << hwlib.errorString(); |
18 |
20 |
19 RunEngine = (void (*)(int, char **))hwlib.resolve("RunEngine"); |
21 RunEngine = (RunEngine_t*) hwlib.resolve("RunEngine"); |
|
22 registerIPCCallback = (registerIPCCallback_t*) hwlib.resolve("registerIPCCallback"); |
|
23 ipcToEngine = (ipcToEngine_t*) hwlib.resolve("ipcToEngine"); |
|
24 flibInit = (flibInit_t*) hwlib.resolve("flibInit"); |
|
25 |
|
26 flibInit(); |
|
27 registerIPCCallback(this, &engineMessageCallback); |
20 } |
28 } |
21 |
29 |
22 HWEngine::~HWEngine() |
30 HWEngine::~HWEngine() |
23 { |
31 { |
24 |
32 |
25 } |
33 } |
26 |
34 |
27 void HWEngine::run() |
35 void HWEngine::run() |
28 { |
36 { |
29 char* args[2] = {"", "--help"}; |
37 m_argsList.clear(); |
30 RunEngine(2, args); |
38 m_argsList << ""; |
|
39 m_argsList << "--internal"; |
|
40 //m_argsList << "--user-prefix"; |
|
41 //m_argsList << cfgdir->absolutePath(); |
|
42 //m_argsList << "--prefix"; |
|
43 //m_argsList << datadir->absolutePath(); |
|
44 m_argsList << "--landpreview"; |
|
45 |
|
46 m_args.resize(m_argsList.size()); |
|
47 for(int i = m_argsList.size() - 1; i >=0; --i) |
|
48 m_args[i] = m_argsList[i].data(); |
|
49 |
|
50 RunEngine(m_args.size(), m_args.data()); |
|
51 sendIPC("!"); |
31 } |
52 } |
32 |
53 |
33 static QObject *hwengine_singletontype_provider(QQmlEngine *engine, QJSEngine *scriptEngine) |
54 static QObject *hwengine_singletontype_provider(QQmlEngine *engine, QJSEngine *scriptEngine) |
34 { |
55 { |
35 Q_UNUSED(engine) |
56 Q_UNUSED(engine) |
42 void HWEngine::exposeToQML() |
63 void HWEngine::exposeToQML() |
43 { |
64 { |
44 qDebug("HWEngine::exposeToQML"); |
65 qDebug("HWEngine::exposeToQML"); |
45 qmlRegisterSingletonType<HWEngine>("Hedgewars.Engine", 1, 0, "HWEngine", hwengine_singletontype_provider); |
66 qmlRegisterSingletonType<HWEngine>("Hedgewars.Engine", 1, 0, "HWEngine", hwengine_singletontype_provider); |
46 } |
67 } |
|
68 |
|
69 void HWEngine::sendIPC(const QByteArray & b) |
|
70 { |
|
71 string255 str; |
|
72 str.len = b.size() > 255 ? 255 : b.size(); |
|
73 qDebug() << "semdIPC: len = " << str.len; |
|
74 qCopy(b.data(), &(b.data()[str.len - 1]), &(str.str[0])); |
|
75 |
|
76 ipcToEngine(str); |
|
77 } |
|
78 |
|
79 void HWEngine::engineMessageCallback(void *context, string255 str) |
|
80 { |
|
81 QByteArray b = QByteArray::fromRawData((const char *)&str.s, str.len + 1); |
|
82 |
|
83 qDebug() << "FLIPC in" << b; |
|
84 } |