6 |
6 |
7 #include "hwengine.h" |
7 #include "hwengine.h" |
8 #include "previewimageprovider.h" |
8 #include "previewimageprovider.h" |
9 |
9 |
10 extern "C" { |
10 extern "C" { |
11 RunEngine_t *RunEngine; |
11 RunEngine_t *flibRunEngine; |
12 registerPreviewCallback_t *registerPreviewCallback; |
12 registerGUIMessagesCallback_t *flibRegisterGUIMessagesCallback; |
13 ipcToEngine_t *ipcToEngine; |
13 getPreview_t *flibGetPreview; |
14 flibInit_t *flibInit; |
14 flibInit_t *flibInit; |
15 flibFree_t *flibFree; |
15 flibFree_t *flibFree; |
16 } |
16 } |
17 |
17 |
18 HWEngine::HWEngine(QQmlEngine *engine, QObject *parent) : |
18 HWEngine::HWEngine(QQmlEngine *engine, QObject *parent) : |
22 QLibrary hwlib("./libhwengine.so"); |
22 QLibrary hwlib("./libhwengine.so"); |
23 |
23 |
24 if(!hwlib.load()) |
24 if(!hwlib.load()) |
25 qWarning() << "Engine library not found" << hwlib.errorString(); |
25 qWarning() << "Engine library not found" << hwlib.errorString(); |
26 |
26 |
27 RunEngine = (RunEngine_t*) hwlib.resolve("RunEngine"); |
27 flibRunEngine = (RunEngine_t*) hwlib.resolve("RunEngine"); |
28 registerPreviewCallback = (registerPreviewCallback_t*) hwlib.resolve("registerIPCCallback"); |
28 flibRegisterGUIMessagesCallback = (registerGUIMessagesCallback_t*) hwlib.resolve("registerGUIMessagesCallback"); |
29 ipcToEngine = (ipcToEngine_t*) hwlib.resolve("ipcToEngine"); |
29 flibGetPreview = (getPreview_t*) hwlib.resolve("getPreview"); |
30 flibInit = (flibInit_t*) hwlib.resolve("flibInit"); |
30 flibInit = (flibInit_t*) hwlib.resolve("flibInit"); |
31 flibFree = (flibFree_t*) hwlib.resolve("flibFree"); |
31 flibFree = (flibFree_t*) hwlib.resolve("flibFree"); |
32 |
32 |
33 flibInit(".", "~/.hedgewars"); |
33 flibInit(".", "~/.hedgewars"); |
34 registerPreviewCallback(this, &enginePreviewCallback); |
34 flibRegisterGUIMessagesCallback(this, &guiMessagesCallback); |
35 } |
35 } |
36 |
36 |
37 HWEngine::~HWEngine() |
37 HWEngine::~HWEngine() |
38 { |
38 { |
39 flibFree(); |
39 flibFree(); |
40 } |
40 } |
41 |
41 |
42 void HWEngine::run() |
42 void HWEngine::getPreview() |
43 { |
43 { |
44 m_argsList.clear(); |
44 //m_seed = QUuid::createUuid().toString(); |
45 m_argsList << ""; |
45 flibGetPreview(); |
46 m_argsList << "--internal"; |
|
47 m_argsList << "--landpreview"; |
|
48 |
|
49 m_args.resize(m_argsList.size()); |
|
50 for(int i = m_argsList.size() - 1; i >=0; --i) |
|
51 m_args[i] = m_argsList[i].constData(); |
|
52 |
|
53 m_seed = QUuid::createUuid().toString(); |
|
54 |
|
55 RunEngine(m_args.size(), m_args.data()); |
|
56 sendIPC("eseed " + m_seed.toLatin1()); |
|
57 sendIPC("e$mapgen 0"); |
|
58 sendIPC("!"); |
|
59 } |
46 } |
60 |
47 |
61 static QObject *hwengine_singletontype_provider(QQmlEngine *engine, QJSEngine *scriptEngine) |
48 static QObject *hwengine_singletontype_provider(QQmlEngine *engine, QJSEngine *scriptEngine) |
62 { |
49 { |
63 Q_UNUSED(scriptEngine) |
50 Q_UNUSED(scriptEngine) |
70 { |
57 { |
71 qDebug("HWEngine::exposeToQML"); |
58 qDebug("HWEngine::exposeToQML"); |
72 qmlRegisterSingletonType<HWEngine>("Hedgewars.Engine", 1, 0, "HWEngine", hwengine_singletontype_provider); |
59 qmlRegisterSingletonType<HWEngine>("Hedgewars.Engine", 1, 0, "HWEngine", hwengine_singletontype_provider); |
73 } |
60 } |
74 |
61 |
75 void HWEngine::sendIPC(const QByteArray & b) |
|
76 { |
|
77 quint8 len = b.size() > 255 ? 255 : b.size(); |
|
78 qDebug() << "sendIPC: len = " << len; |
|
79 |
62 |
80 ipcToEngine(b.constData(), len); |
63 void HWEngine::guiMessagesCallback(void *context, MessageType mt, const char * msg, uint32_t len) |
81 } |
|
82 |
|
83 void HWEngine::enginePreviewCallback(void *context, const char * msg, quint32 len) |
|
84 { |
64 { |
85 HWEngine * obj = (HWEngine *)context; |
65 HWEngine * obj = (HWEngine *)context; |
86 QByteArray b = QByteArray::fromRawData(msg, len); |
66 QByteArray b = QByteArray::fromRawData(msg, len); |
87 |
67 |
88 qDebug() << "FLIPC in" << b.size() << b; |
68 qDebug() << "FLIPC in" << b.size() << b; |