# HG changeset patch # User unc0rr # Date 1432156746 -10800 # Node ID 89a7f617e091447a19dde21e69b58ccc00e3085b # Parent 6a1f5f452460c02b4d385782ac7c8e2d6cffd8ff - Move protocol handling events to main thread through qt's main loop - Reorganize code a bit diff -r 6a1f5f452460 -r 89a7f617e091 hedgewars/CMakeLists.txt --- a/hedgewars/CMakeLists.txt Mon May 18 00:20:09 2015 +0300 +++ b/hedgewars/CMakeLists.txt Thu May 21 00:19:06 2015 +0300 @@ -109,10 +109,12 @@ uFLGameConfig.pas uFLIPC.pas uFLNet.pas + uFLNetProtocol.pas uFLScripts.pas uFLSchemes.pas uFLTeams.pas uFLTypes.pas + uFLUICallback.pas uFLUtils.pas #these interact with everything, so compile last diff -r 6a1f5f452460 -r 89a7f617e091 hedgewars/hwLibrary.pas --- a/hedgewars/hwLibrary.pas Mon May 18 00:20:09 2015 +0300 +++ b/hedgewars/hwLibrary.pas Thu May 21 00:19:06 2015 +0300 @@ -48,6 +48,8 @@ , uFLSchemes , uFLAmmo , uFLNet + , uFLNetProtocol + , uFLUICallback ; {$INCLUDE "config.inc"} @@ -154,7 +156,7 @@ runQuickGame, runLocalGame, getPreview, - registerGUIMessagesCallback, + registerUIMessagesCallback, flibInit, flibFree, //game config @@ -177,6 +179,7 @@ changeTeamColor, // network connectOfficialServer, + passNetData, // dunno what these are RunEngine, diff -r 6a1f5f452460 -r 89a7f617e091 hedgewars/uFLGameConfig.pas --- a/hedgewars/uFLGameConfig.pas Mon May 18 00:20:09 2015 +0300 +++ b/hedgewars/uFLGameConfig.pas Thu May 21 00:19:06 2015 +0300 @@ -7,8 +7,6 @@ procedure runLocalGame; cdecl; procedure getPreview; cdecl; -procedure registerGUIMessagesCallback(p: pointer; f: TGUICallback); cdecl; - procedure setSeed(seed: PChar); cdecl; function getSeed: PChar; cdecl; procedure setTheme(themeName: PChar); cdecl; @@ -21,10 +19,7 @@ procedure changeTeamColor(teamName: PChar; dir: LongInt); cdecl; implementation -uses uFLIPC, hwengine, uFLUtils, uFLTeams, uFLData, uFLSChemes, uFLAmmo; - -var guiCallbackPointer: pointer; - guiCallbackFunction: TGUICallback; +uses uFLIPC, hwengine, uFLUtils, uFLTeams, uFLData, uFLSChemes, uFLAmmo, uFLUICallback; const MAXCONFIGS = 5; @@ -200,21 +195,6 @@ end; end; - -procedure engineMessageCallback(p: pointer; msg: PChar; len: Longword); -begin - if len = 128 * 256 then guiCallbackFunction(guiCallbackPointer, mtPreview, msg, len) -end; - -procedure registerGUIMessagesCallback(p: pointer; f: TGUICallback); cdecl; -begin - guiCallbackPointer:= p; - guiCallbackFunction:= f; - - registerIPCCallback(nil, @engineMessageCallback) -end; - - procedure tryAddTeam(teamName: PChar); cdecl; var msg: ansistring; i, hn, hedgehogsNumber: Longword; @@ -249,13 +229,13 @@ teams[i].color:= c; msg:= '0' + #10 + teamName; - guiCallbackFunction(guiCallbackPointer, mtAddPlayingTeam, @msg[1], length(msg)); + sendUI(mtAddPlayingTeam, @msg[1], length(msg)); msg:= teamName + #10 + colorsSet[teams[i].color]; - guiCallbackFunction(guiCallbackPointer, mtTeamColor, @msg[1], length(msg)); + sendUI(mtTeamColor, @msg[1], length(msg)); msg:= teamName; - guiCallbackFunction(guiCallbackPointer, mtRemoveTeam, @msg[1], length(msg)) + sendUI(mtRemoveTeam, @msg[1], length(msg)) end end; @@ -286,8 +266,8 @@ msg:= teamName; - guiCallbackFunction(guiCallbackPointer, mtRemovePlayingTeam, @msg[1], length(msg)); - guiCallbackFunction(guiCallbackPointer, mtAddTeam, @msg[1], length(msg)) + sendUI(mtRemovePlayingTeam, @msg[1], length(msg)); + sendUI(mtAddTeam, @msg[1], length(msg)) end; @@ -309,7 +289,7 @@ teams[i].color:= (teams[i].color + dc) mod 9; msg:= tn + #10 + colorsSet[teams[i].color]; - guiCallbackFunction(guiCallbackPointer, mtTeamColor, @msg[1], length(msg)) + sendUI(mtTeamColor, @msg[1], length(msg)) end end; diff -r 6a1f5f452460 -r 89a7f617e091 hedgewars/uFLNet.pas --- a/hedgewars/uFLNet.pas Mon May 18 00:20:09 2015 +0300 +++ b/hedgewars/uFLNet.pas Thu May 21 00:19:06 2015 +0300 @@ -7,7 +7,7 @@ procedure freeModule; implementation -uses SDLh, uFLIPC; +uses SDLh, uFLIPC, uFLTypes, uFLUICallback; const endCmd: string = #10 + #10; @@ -57,6 +57,7 @@ procedure handler_CONNECTED; begin + sendUI(mtNetData, nil, 0); end; procedure handler_EM; diff -r 6a1f5f452460 -r 89a7f617e091 hedgewars/uFLNetProtocol.pas --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hedgewars/uFLNetProtocol.pas Thu May 21 00:19:06 2015 +0300 @@ -0,0 +1,13 @@ +unit uFLNetProtocol; +interface + +procedure passNetData(p: pointer); cdecl; + +implementation + +procedure passNetData(p: pointer); cdecl; +begin + writeln('meow') +end; + +end. diff -r 6a1f5f452460 -r 89a7f617e091 hedgewars/uFLTypes.pas --- a/hedgewars/uFLTypes.pas Mon May 18 00:20:09 2015 +0300 +++ b/hedgewars/uFLTypes.pas Thu May 21 00:19:06 2015 +0300 @@ -3,7 +3,7 @@ type TMessageType = (mtPreview, mtAddPlayingTeam, mtRemovePlayingTeam, mtAddTeam, mtRemoveTeam - , mtTeamColor); + , mtTeamColor, mtNetData); TIPCMessage = record str: shortstring; @@ -12,7 +12,7 @@ end; TIPCCallback = procedure (p: pointer; msg: PChar; len: Longword); - TGUICallback = procedure (p: pointer; msgType: TMessageType; msg: PChar; len: Longword); cdecl; + TUICallback = procedure (p: pointer; msgType: TMessageType; msg: PChar; len: Longword); cdecl; TGameType = (gtPreview, gtLocal); THedgehog = record diff -r 6a1f5f452460 -r 89a7f617e091 hedgewars/uFLUICallback.pas --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hedgewars/uFLUICallback.pas Thu May 21 00:19:06 2015 +0300 @@ -0,0 +1,32 @@ +unit uFLUICallback; +interface +uses uFLTypes; + +procedure registerUIMessagesCallback(p: pointer; f: TUICallback); cdecl; +procedure sendUI(msgType: TMessageType; msg: PChar; len: Longword); + +implementation +uses uFLIPC; + +var uiCallbackPointer: pointer; + uiCallbackFunction: TUICallback; + +procedure engineMessageCallback(p: pointer; msg: PChar; len: Longword); +begin + if len = 128 * 256 then uiCallbackFunction(uiCallbackPointer, mtPreview, msg, len) +end; + +procedure registerUIMessagesCallback(p: pointer; f: TUICallback); cdecl; +begin + uiCallbackPointer:= p; + uiCallbackFunction:= f; + + registerIPCCallback(nil, @engineMessageCallback) +end; + +procedure sendUI(msgType: TMessageType; msg: PChar; len: Longword); +begin + uiCallbackFunction(uiCallbackPointer, msgType, msg, len) +end; + +end. diff -r 6a1f5f452460 -r 89a7f617e091 qmlFrontend/flib.h --- a/qmlFrontend/flib.h Mon May 18 00:20:09 2015 +0300 +++ b/qmlFrontend/flib.h Thu May 21 00:19:06 2015 +0300 @@ -14,6 +14,7 @@ , MSG_ADDTEAM , MSG_REMOVETEAM , MSG_TEAMCOLOR + , MSG_NETDATA }; typedef union string255_ @@ -28,7 +29,7 @@ } string255; typedef void RunEngine_t(int argc, const char ** argv); -typedef void registerGUIMessagesCallback_t(void * context, void (*)(void * context, MessageType mt, const char * msg, uint32_t len)); +typedef void registerUIMessagesCallback_t(void * context, void (*)(void * context, MessageType mt, const char * msg, uint32_t len)); typedef void getPreview_t(); typedef void runQuickGame_t(); typedef void runLocalGame_t(); @@ -41,6 +42,7 @@ typedef void setAmmo_t(const char * ammoName); typedef void flibInit_t(const char * localPrefix, const char * userPrefix); typedef void flibFree_t(); +typedef void passNetData_t(const char * data); typedef char **getThemesList_t(); typedef void freeThemesList_t(char **list); diff -r 6a1f5f452460 -r 89a7f617e091 qmlFrontend/hwengine.cpp --- a/qmlFrontend/hwengine.cpp Mon May 18 00:20:09 2015 +0300 +++ b/qmlFrontend/hwengine.cpp Thu May 21 00:19:06 2015 +0300 @@ -10,7 +10,7 @@ extern "C" { RunEngine_t *flibRunEngine; - registerGUIMessagesCallback_t *flibRegisterGUIMessagesCallback; + registerUIMessagesCallback_t *flibRegisterUIMessagesCallback; setSeed_t *flibSetSeed; getSeed_t *flibGetSeed; setTheme_t *flibSetTheme; @@ -35,6 +35,7 @@ changeTeamColor_t * flibChangeTeamColor; connectOfficialServer_t * flibConnectOfficialServer; + passNetData_t * flibPassNetData; } Q_DECLARE_METATYPE(MessageType); @@ -51,7 +52,7 @@ qWarning() << "Engine library not found" << hwlib.errorString(); flibRunEngine = (RunEngine_t*) hwlib.resolve("RunEngine"); - flibRegisterGUIMessagesCallback = (registerGUIMessagesCallback_t*) hwlib.resolve("registerGUIMessagesCallback"); + flibRegisterUIMessagesCallback = (registerUIMessagesCallback_t*) hwlib.resolve("registerUIMessagesCallback"); flibGetSeed = (getSeed_t*) hwlib.resolve("getSeed"); flibGetPreview = (getPreview_t*) hwlib.resolve("getPreview"); flibRunQuickGame = (runQuickGame_t*) hwlib.resolve("runQuickGame"); @@ -80,9 +81,10 @@ flibChangeTeamColor = (changeTeamColor_t*) hwlib.resolve("changeTeamColor"); flibConnectOfficialServer = (connectOfficialServer_t*) hwlib.resolve("connectOfficialServer"); + flibPassNetData = (passNetData_t*) hwlib.resolve("passNetData"); flibInit("/usr/home/unC0Rr/Sources/Hedgewars/Hedgewars-GC/share/hedgewars/Data", "/usr/home/unC0Rr/.hedgewars"); - flibRegisterGUIMessagesCallback(this, &guiMessagesCallback); + flibRegisterUIMessagesCallback(this, &guiMessagesCallback); ThemeIconProvider * themeIcon = (ThemeIconProvider *)m_engine->imageProvider(QLatin1String("theme")); themeIcon->setFileContentsFunction(flibGetThemeIcon); @@ -170,6 +172,9 @@ emit teamColorChanged(l[0], QColor::fromRgba(l[1].toInt()).name()); break; } + case MSG_NETDATA: { + flibPassNetData(msg.constData()); + } } }