diff --git a/source/glest_game/main/main.cpp b/source/glest_game/main/main.cpp index bae1b3768..f2f96a46d 100644 --- a/source/glest_game/main/main.cpp +++ b/source/glest_game/main/main.cpp @@ -30,6 +30,7 @@ #include #include "font.h" #include +#include "menu_state_masterserver.h" #include "leak_dumper.h" @@ -327,6 +328,7 @@ int glestMain(int argc, char** argv){ SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled); NetworkInterface::setDisplayMessageFunction(ExceptionHandler::DisplayMessage); + MenuStateMasterserver::setDisplayMessageFunction(ExceptionHandler::DisplayMessage); SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__); diff --git a/source/glest_game/menu/menu_state_masterserver.cpp b/source/glest_game/menu/menu_state_masterserver.cpp index ef33044d7..640e85c64 100644 --- a/source/glest_game/menu/menu_state_masterserver.cpp +++ b/source/glest_game/menu/menu_state_masterserver.cpp @@ -30,6 +30,8 @@ namespace Glest{ namespace Game{ +DisplayMessageFunction MenuStateMasterserver::pCB_DisplayMessage = NULL; + // ===================================================== // class ServerLine // ===================================================== @@ -267,10 +269,23 @@ void MenuStateMasterserver::render(){ } void MenuStateMasterserver::update(){ - if(autoRefreshTime!=0 && difftime(time(NULL),lastRefreshTimer) >= autoRefreshTime ){ + if(autoRefreshTime!=0 && difftime(time(NULL),lastRefreshTimer) >= autoRefreshTime ) { needUpdateFromServer = true; lastRefreshTimer= time(NULL); + } + + if(threadedErrorMsg != "") { + std::string sError = threadedErrorMsg; + threadedErrorMsg = ""; + + if(pCB_DisplayMessage != NULL) { + pCB_DisplayMessage(sError.c_str(),false); } + else { + throw runtime_error(sError.c_str()); + } + } + } void MenuStateMasterserver::simpleTask() { @@ -285,6 +300,7 @@ void MenuStateMasterserver::updateServerInfo() { //MasterServerInfos masterServerInfos; clearServerLines(); + //throw runtime_error("test"); if(Config::getInstance().getString("Masterserver","") != "") { std::string serverInfo = SystemFlags::getHTTP(Config::getInstance().getString("Masterserver")+"showServersForGlest.php"); @@ -325,7 +341,7 @@ void MenuStateMasterserver::updateServerInfo() { catch(const exception &e){ SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s] Line: %d, error [%s]\n",__FILE__,__FUNCTION__,__LINE__,e.what()); - throw runtime_error(e.what()); + threadedErrorMsg = e.what(); } } diff --git a/source/glest_game/menu/menu_state_masterserver.h b/source/glest_game/menu/menu_state_masterserver.h index bc8108469..e8a1d80ce 100644 --- a/source/glest_game/menu/menu_state_masterserver.h +++ b/source/glest_game/menu/menu_state_masterserver.h @@ -15,6 +15,7 @@ #include "main_menu.h" #include "masterserver_info.h" #include "simple_threads.h" +#include "network_interface.h" namespace Glest{ namespace Game{ @@ -82,6 +83,9 @@ private: time_t lastRefreshTimer; SimpleTaskThread *updateFromMasterserverThread; + static DisplayMessageFunction pCB_DisplayMessage; + std::string threadedErrorMsg; + public: MenuStateMasterserver(Program *program, MainMenu *mainMenu); virtual ~MenuStateMasterserver(); @@ -93,6 +97,8 @@ public: virtual void simpleTask(); + static void setDisplayMessageFunction(DisplayMessageFunction pDisplayMessage) { pCB_DisplayMessage = pDisplayMessage; } + private: void showMessageBox(const string &text, const string &header, bool toggle); void connectToServer(string ipString); diff --git a/source/shared_lib/sources/util/util.cpp b/source/shared_lib/sources/util/util.cpp index 0fbce66c2..6eb69ea24 100644 --- a/source/shared_lib/sources/util/util.cpp +++ b/source/shared_lib/sources/util/util.cpp @@ -99,7 +99,7 @@ std::string SystemFlags::getHTTP(std::string URL) { /* get contents from the URL */ curl_easy_perform(SystemFlags::curl_handle); - std::string serverResponse = chunk.memory; + std::string serverResponse = (chunk.memory != NULL ? chunk.memory : ""); if(chunk.memory) { free(chunk.memory); }