# HG changeset patch # User unc0rr # Date 1514130982 -3600 # Node ID a03f245243b0ed12fad5bec2c03764a6281d848b # Parent 0c6fb706f747ef88f42f5cc6afa19ce5437d54c6 And more refactoring... diff -r 0c6fb706f747 -r a03f245243b0 hedgewars/hwLibrary.pas --- a/hedgewars/hwLibrary.pas Sun Dec 24 00:44:16 2017 +0100 +++ b/hedgewars/hwLibrary.pas Sun Dec 24 16:56:22 2017 +0100 @@ -60,7 +60,10 @@ registerUIMessagesCallback, flibInit, flibFree, - queueExecution + ipcToEngineRaw, + ipcSetEngineBarrier, + ipcRemoveBarrierFromEngineQueue, + RunEngine ; begin diff -r 0c6fb706f747 -r a03f245243b0 hedgewars/uFLIPC.pas --- a/hedgewars/uFLIPC.pas Sun Dec 24 00:44:16 2017 +0100 +++ b/hedgewars/uFLIPC.pas Sun Dec 24 16:56:22 2017 +0100 @@ -6,9 +6,9 @@ procedure freeIPC; procedure ipcToEngine(s: shortstring); -procedure ipcToEngineRaw(p: pointer; len: Longword); -procedure ipcSetEngineBarrier(); -procedure ipcRemoveBarrierFromEngineQueue(); +procedure ipcToEngineRaw(p: pointer; len: Longword); cdecl; +procedure ipcSetEngineBarrier(); cdecl; +procedure ipcRemoveBarrierFromEngineQueue(); cdecl; //function ipcReadFromEngine: shortstring; //function ipcCheckFromEngine: boolean; @@ -105,7 +105,7 @@ ipcSend(msg, queueFrontend) end; -procedure ipcSetEngineBarrier(); +procedure ipcSetEngineBarrier(); cdecl; begin SDL_LockMutex(queueEngine^.mut); @@ -114,7 +114,7 @@ SDL_UnlockMutex(queueEngine^.mut); end; -procedure ipcRemoveBarrierFromEngineQueue(); +procedure ipcRemoveBarrierFromEngineQueue(); cdecl; var pmsg, t: PIPCMessage; q: PIPCQueue; begin @@ -167,7 +167,7 @@ SDL_UnlockMutex(q^.mut); end; -procedure ipcToEngineRaw(p: pointer; len: Longword); +procedure ipcToEngineRaw(p: pointer; len: Longword); cdecl; var msg: TIPCMessage; begin msg.str[0]:= #0; diff -r 0c6fb706f747 -r a03f245243b0 qmlfrontend/flib.h --- a/qmlfrontend/flib.h Sun Dec 24 00:44:16 2017 +0100 +++ b/qmlfrontend/flib.h Sun Dec 24 16:56:22 2017 +0100 @@ -24,6 +24,10 @@ } string255; typedef void RunEngine_t(int argc, const char** argv); +typedef void ipcToEngineRaw_t(const char* msg, uint32_t len); +typedef void ipcSetEngineBarrier_t(); +typedef void ipcRemoveBarrierFromEngineQueue_t(); + typedef void registerUIMessagesCallback_t(void* context, void (*)(void* context, MessageType mt, const char* msg, uint32_t len)); typedef void flibInit_t(const char* localPrefix, const char* userPrefix); typedef void flibFree_t(); diff -r 0c6fb706f747 -r a03f245243b0 qmlfrontend/gameconfig.cpp --- a/qmlfrontend/gameconfig.cpp Sun Dec 24 00:44:16 2017 +0100 +++ b/qmlfrontend/gameconfig.cpp Sun Dec 24 16:56:22 2017 +0100 @@ -1,6 +1,46 @@ #include "gameconfig.h" -GameConfig::GameConfig(QObject *parent) : QObject(parent) +GameConfig::GameConfig() +{ + m_arguments + << "" + << "--internal" + << "--landpreview"; +} + +const char** GameConfig::argv() const +{ + m_argv.resize(m_arguments.size()); + + for (int i = 0; i < m_arguments.size(); ++i) + m_argv[i] = m_arguments[i].data(); + + return m_argv.data(); +} + +int GameConfig::argc() const { + return m_arguments.size(); +} +void GameConfig::clear() +{ + m_arguments.clear(); + m_cfg.clear(); } + +void GameConfig::cmdSeed(const QByteArray& seed) +{ + cfgAppend("eseed " + seed); +} + +void GameConfig::cmdMapgen(int mapgen) +{ + cfgAppend("e$mapgen " + QByteArray::number(mapgen)); +} + +void GameConfig::cfgAppend(const QByteArray& cmd) +{ + quint8 len = cmd.size(); + m_cfg.append(QByteArray::fromRawData(reinterpret_cast(&len), 1) + cmd); +} diff -r 0c6fb706f747 -r a03f245243b0 qmlfrontend/gameconfig.h --- a/qmlfrontend/gameconfig.h Sun Dec 24 00:44:16 2017 +0100 +++ b/qmlfrontend/gameconfig.h Sun Dec 24 16:56:22 2017 +0100 @@ -1,17 +1,27 @@ #ifndef GAMECONFIG_H #define GAMECONFIG_H -#include +#include +#include -class GameConfig : public QObject -{ - Q_OBJECT +class GameConfig { public: - explicit GameConfig(QObject *parent = nullptr); + explicit GameConfig(); + + const char** argv() const; + int argc() const; + const QList config(); -signals: + void clear(); + void cmdSeed(const QByteArray& seed); + void cmdMapgen(int mapgen); -public slots: +private: + mutable QVector m_argv; + QList m_arguments; + QList m_cfg; + + void cfgAppend(const QByteArray& cmd); }; -#endif // GAMECONFIG_H \ No newline at end of file +#endif // GAMECONFIG_H diff -r 0c6fb706f747 -r a03f245243b0 qmlfrontend/hwengine.cpp --- a/qmlfrontend/hwengine.cpp Sun Dec 24 00:44:16 2017 +0100 +++ b/qmlfrontend/hwengine.cpp Sun Dec 24 16:56:22 2017 +0100 @@ -5,6 +5,9 @@ extern "C" { RunEngine_t* flibRunEngine; +ipcToEngineRaw_t* flibIpcToEngineRaw; +ipcSetEngineBarrier_t* flibIpcSetEngineBarrier; +ipcRemoveBarrierFromEngineQueue_t* flibIpcRemoveBarrierFromEngineQueue; registerUIMessagesCallback_t* flibRegisterUIMessagesCallback; flibInit_t* flibInit; flibFree_t* flibFree; @@ -27,6 +30,9 @@ qWarning() << "Engine library not found" << hwlib.errorString(); flibRunEngine = (RunEngine_t*)hwlib.resolve("RunEngine"); + flibIpcToEngineRaw = (ipcToEngineRaw_t*)hwlib.resolve("ipcToEngineRaw"); + flibIpcSetEngineBarrier = (ipcSetEngineBarrier_t*)hwlib.resolve("ipcSetEngineBarrier"); + flibIpcRemoveBarrierFromEngineQueue = (ipcRemoveBarrierFromEngineQueue_t*)hwlib.resolve("ipcRemoveBarrierFromEngineQueue"); flibRegisterUIMessagesCallback = (registerUIMessagesCallback_t*)hwlib.resolve("registerUIMessagesCallback"); flibInit = (flibInit_t*)hwlib.resolve("flibInit"); flibFree = (flibFree_t*)hwlib.resolve("flibFree"); @@ -70,9 +76,8 @@ void HWEngine::getPreview() { - int argc; - const char** argv; - flibRunEngine(argc, argv); + m_runQueue.append(GameConfig()); + flibRunEngine(m_runQueue[0].argc(), m_runQueue[0].argv()); } void HWEngine::runQuickGame()