Added more safety guards for mastermenu if we get exceptions thrown within the thread, now it won't crash the game
This commit is contained in:
parent
74f39293a8
commit
3ba034b8bf
|
@ -30,6 +30,7 @@
|
|||
#include <memory>
|
||||
#include "font.h"
|
||||
#include <curl/curl.h>
|
||||
#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__);
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user