qmlfrontend/hwengine.cpp
branchqmlfrontend
changeset 12857 90f927b4b9e1
child 12858 0c6fb706f747
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qmlfrontend/hwengine.cpp	Fri Dec 22 23:59:03 2017 +0100
@@ -0,0 +1,69 @@
+#include "hwengine.h"
+
+#include <QDebug>
+#include <QLibrary>
+
+extern "C" {
+RunEngine_t* flibRunEngine;
+registerUIMessagesCallback_t* flibRegisterUIMessagesCallback;
+flibInit_t* flibInit;
+flibFree_t* flibFree;
+passFlibEvent_t* flibPassFlibEvent;
+}
+
+HWEngine::HWEngine(QQmlEngine* engine, QObject* parent)
+    : QObject(parent)
+    , m_engine(engine)
+{
+    qRegisterMetaType<MessageType>("MessageType");
+
+#ifdef Q_OS_WIN
+    QLibrary hwlib("./libhwengine.dll");
+#else
+    QLibrary hwlib("./libhwengine.so");
+#endif
+
+    if (!hwlib.load())
+        qWarning() << "Engine library not found" << hwlib.errorString();
+
+    flibRunEngine = (RunEngine_t*)hwlib.resolve("RunEngine");
+    flibRegisterUIMessagesCallback = (registerUIMessagesCallback_t*)hwlib.resolve("registerUIMessagesCallback");
+    flibInit = (flibInit_t*)hwlib.resolve("flibInit");
+    flibFree = (flibFree_t*)hwlib.resolve("flibFree");
+
+    flibInit("/usr/home/unC0Rr/Sources/Hedgewars/MainRepo/share/hedgewars/Data", "/usr/home/unC0Rr/.hedgewars");
+    flibRegisterUIMessagesCallback(this, &guiMessagesCallback);
+}
+
+HWEngine::~HWEngine()
+{
+    flibFree();
+}
+
+void HWEngine::guiMessagesCallback(void* context, MessageType mt, const char* msg, uint32_t len)
+{
+    HWEngine* obj = reinterpret_cast<HWEngine*>(context);
+    QByteArray b = QByteArray(msg, len);
+
+    qDebug() << "FLIPC in" << mt << " size = " << b.size();
+
+    QMetaObject::invokeMethod(obj, "engineMessageHandler", Qt::QueuedConnection, Q_ARG(MessageType, mt), Q_ARG(QByteArray, b));
+}
+
+void HWEngine::engineMessageHandler(MessageType mt, const QByteArray& msg)
+{
+    switch (mt) {
+    case MSG_RENDERINGPREVIEW: {
+        emit previewIsRendering();
+        break;
+    }
+    case MSG_PREVIEW: {
+        emit previewImageChanged();
+        break;
+    }
+    case MSG_PREVIEWHOGCOUNT: {
+        emit previewHogCountChanged((quint8)msg.data()[0]);
+        break;
+    }
+    }
+}