diff -r 95d903b976d0 -r 90f927b4b9e1 qmlfrontend/hwengine.cpp --- /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 +#include + +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"); + +#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(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; + } + } +}