mirror of
https://github.com/glest/glest-source.git
synced 2025-08-21 07:31:21 +02:00
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:
@@ -30,6 +30,7 @@
|
|||||||
#include <memory>
|
#include <memory>
|
||||||
#include "font.h"
|
#include "font.h"
|
||||||
#include <curl/curl.h>
|
#include <curl/curl.h>
|
||||||
|
#include "menu_state_masterserver.h"
|
||||||
|
|
||||||
#include "leak_dumper.h"
|
#include "leak_dumper.h"
|
||||||
|
|
||||||
@@ -327,6 +328,7 @@ int glestMain(int argc, char** argv){
|
|||||||
SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled);
|
SystemFlags::getSystemSettingType(SystemFlags::debugWorldSynch).enabled);
|
||||||
|
|
||||||
NetworkInterface::setDisplayMessageFunction(ExceptionHandler::DisplayMessage);
|
NetworkInterface::setDisplayMessageFunction(ExceptionHandler::DisplayMessage);
|
||||||
|
MenuStateMasterserver::setDisplayMessageFunction(ExceptionHandler::DisplayMessage);
|
||||||
|
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
|
||||||
|
@@ -30,6 +30,8 @@
|
|||||||
|
|
||||||
namespace Glest{ namespace Game{
|
namespace Glest{ namespace Game{
|
||||||
|
|
||||||
|
DisplayMessageFunction MenuStateMasterserver::pCB_DisplayMessage = NULL;
|
||||||
|
|
||||||
// =====================================================
|
// =====================================================
|
||||||
// class ServerLine
|
// class ServerLine
|
||||||
// =====================================================
|
// =====================================================
|
||||||
@@ -267,10 +269,23 @@ void MenuStateMasterserver::render(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
void MenuStateMasterserver::update(){
|
void MenuStateMasterserver::update(){
|
||||||
if(autoRefreshTime!=0 && difftime(time(NULL),lastRefreshTimer) >= autoRefreshTime ){
|
if(autoRefreshTime!=0 && difftime(time(NULL),lastRefreshTimer) >= autoRefreshTime ) {
|
||||||
needUpdateFromServer = true;
|
needUpdateFromServer = true;
|
||||||
lastRefreshTimer= time(NULL);
|
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() {
|
void MenuStateMasterserver::simpleTask() {
|
||||||
@@ -285,6 +300,7 @@ void MenuStateMasterserver::updateServerInfo() {
|
|||||||
//MasterServerInfos masterServerInfos;
|
//MasterServerInfos masterServerInfos;
|
||||||
clearServerLines();
|
clearServerLines();
|
||||||
|
|
||||||
|
//throw runtime_error("test");
|
||||||
if(Config::getInstance().getString("Masterserver","") != "") {
|
if(Config::getInstance().getString("Masterserver","") != "") {
|
||||||
std::string serverInfo = SystemFlags::getHTTP(Config::getInstance().getString("Masterserver")+"showServersForGlest.php");
|
std::string serverInfo = SystemFlags::getHTTP(Config::getInstance().getString("Masterserver")+"showServersForGlest.php");
|
||||||
|
|
||||||
@@ -325,7 +341,7 @@ void MenuStateMasterserver::updateServerInfo() {
|
|||||||
catch(const exception &e){
|
catch(const exception &e){
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s] Line: %d, error [%s]\n",__FILE__,__FUNCTION__,__LINE__,e.what());
|
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 "main_menu.h"
|
||||||
#include "masterserver_info.h"
|
#include "masterserver_info.h"
|
||||||
#include "simple_threads.h"
|
#include "simple_threads.h"
|
||||||
|
#include "network_interface.h"
|
||||||
|
|
||||||
namespace Glest{ namespace Game{
|
namespace Glest{ namespace Game{
|
||||||
|
|
||||||
@@ -82,6 +83,9 @@ private:
|
|||||||
time_t lastRefreshTimer;
|
time_t lastRefreshTimer;
|
||||||
SimpleTaskThread *updateFromMasterserverThread;
|
SimpleTaskThread *updateFromMasterserverThread;
|
||||||
|
|
||||||
|
static DisplayMessageFunction pCB_DisplayMessage;
|
||||||
|
std::string threadedErrorMsg;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
MenuStateMasterserver(Program *program, MainMenu *mainMenu);
|
MenuStateMasterserver(Program *program, MainMenu *mainMenu);
|
||||||
virtual ~MenuStateMasterserver();
|
virtual ~MenuStateMasterserver();
|
||||||
@@ -93,6 +97,8 @@ public:
|
|||||||
|
|
||||||
virtual void simpleTask();
|
virtual void simpleTask();
|
||||||
|
|
||||||
|
static void setDisplayMessageFunction(DisplayMessageFunction pDisplayMessage) { pCB_DisplayMessage = pDisplayMessage; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void showMessageBox(const string &text, const string &header, bool toggle);
|
void showMessageBox(const string &text, const string &header, bool toggle);
|
||||||
void connectToServer(string ipString);
|
void connectToServer(string ipString);
|
||||||
|
@@ -99,7 +99,7 @@ std::string SystemFlags::getHTTP(std::string URL) {
|
|||||||
|
|
||||||
/* get contents from the URL */
|
/* get contents from the URL */
|
||||||
curl_easy_perform(SystemFlags::curl_handle);
|
curl_easy_perform(SystemFlags::curl_handle);
|
||||||
std::string serverResponse = chunk.memory;
|
std::string serverResponse = (chunk.memory != NULL ? chunk.memory : "");
|
||||||
if(chunk.memory) {
|
if(chunk.memory) {
|
||||||
free(chunk.memory);
|
free(chunk.memory);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user