qmlFrontend/hwengine.cpp
branchqmlfrontend
changeset 10416 1c301054694d
parent 10404 1baaab44a0b2
child 10418 091d2c0216c3
equal deleted inserted replaced
10414:50bcefec5bf6 10416:1c301054694d
     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 }