qmlFrontend/hwengine.cpp
branchqmlfrontend
changeset 10428 7c25297720f1
parent 10426 727a154cf784
child 10430 899a30018ede
equal deleted inserted replaced
10426:727a154cf784 10428:7c25297720f1
     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;