From f5c7eff49c1ee8c83941c9835c6e917a224f50b2 Mon Sep 17 00:00:00 2001 From: Mark Vejvoda Date: Mon, 26 Sep 2011 04:50:13 +0000 Subject: [PATCH] - more bugfixes for headless server mode, attempt to fix crash when switching info fast and avoid render on battle end on server. --- source/glest_game/main/battle_end.cpp | 3 +++ source/glest_game/menu/menu_state_custom_game.cpp | 13 ++++++++----- source/glest_game/network/server_interface.cpp | 9 +++++++++ source/glest_game/network/server_interface.h | 2 +- 4 files changed, 21 insertions(+), 6 deletions(-) diff --git a/source/glest_game/main/battle_end.cpp b/source/glest_game/main/battle_end.cpp index 82a2afff..01675b2c 100644 --- a/source/glest_game/main/battle_end.cpp +++ b/source/glest_game/main/battle_end.cpp @@ -86,6 +86,9 @@ void BattleEnd::update() { } void BattleEnd::render() { + if(this->stats.getIsMasterserverMode() == true) { + return; + } Renderer &renderer= Renderer::getInstance(); //CoreData &coreData= CoreData::getInstance(); diff --git a/source/glest_game/menu/menu_state_custom_game.cpp b/source/glest_game/menu/menu_state_custom_game.cpp index 796a8ec9..e4e219b8 100644 --- a/source/glest_game/menu/menu_state_custom_game.cpp +++ b/source/glest_game/menu/menu_state_custom_game.cpp @@ -2343,12 +2343,15 @@ void MenuStateCustomGame::simpleTask(BaseThread *callingThread) { } ServerInterface *serverInterface= NetworkManager::getInstance().getServerInterface(false); if(serverInterface != NULL) { - serverInterface->setGameSettings(&gameSettings,false); - } - if(hasClientConnection == true && serverInterface != NULL) { - if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d]\n",__FILE__,__FUNCTION__,__LINE__); - serverInterface->broadcastGameSetup(&gameSettings); + if(this->masterserverMode == false || (serverInterface->getGameSettingsUpdateCount() <= lastMasterServerSettingsUpdateCount)) { + serverInterface->setGameSettings(&gameSettings,false); + + if(hasClientConnection == true) { + if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d]\n",__FILE__,__FUNCTION__,__LINE__); + serverInterface->broadcastGameSetup(&gameSettings); + } + } } } diff --git a/source/glest_game/network/server_interface.cpp b/source/glest_game/network/server_interface.cpp index 7491b486..558751f8 100644 --- a/source/glest_game/network/server_interface.cpp +++ b/source/glest_game/network/server_interface.cpp @@ -1639,6 +1639,15 @@ int ServerInterface::getOpenSlotCount() { return openSlotCount; } +int ServerInterface::getGameSettingsUpdateCount() { + if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s] START gameSettingsUpdateCount = %d\n",__FILE__,__FUNCTION__,gameSettingsUpdateCount); + MutexSafeWrapper safeMutex(&serverSynchAccessor,string(__FILE__) + "_" + intToStr(__LINE__)); + + int result = gameSettingsUpdateCount; + safeMutex.ReleaseLock(); + return result; +} + void ServerInterface::setGameSettings(GameSettings *serverGameSettings, bool waitForClientAck) { if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s] START gameSettingsUpdateCount = %d, waitForClientAck = %d\n",__FILE__,__FUNCTION__,gameSettingsUpdateCount,waitForClientAck); MutexSafeWrapper safeMutex(&serverSynchAccessor,string(__FILE__) + "_" + intToStr(__LINE__)); diff --git a/source/glest_game/network/server_interface.h b/source/glest_game/network/server_interface.h index 41bba945..421fbe6a 100644 --- a/source/glest_game/network/server_interface.h +++ b/source/glest_game/network/server_interface.h @@ -121,7 +121,7 @@ public: void setGameSettings(GameSettings *serverGameSettings, bool waitForClientAck); void broadcastGameSetup(const GameSettings *gameSettings); - int getGameSettingsUpdateCount() const { return gameSettingsUpdateCount; } + int getGameSettingsUpdateCount(); bool getMasterserverAdminRequestLaunch() const { return masterserverAdminRequestLaunch; } void setMasterserverAdminRequestLaunch(bool value) { masterserverAdminRequestLaunch = value; }