diff --git a/mk/linux/configure.ac b/mk/linux/configure.ac index fab975993..058ba23c1 100644 --- a/mk/linux/configure.ac +++ b/mk/linux/configure.ac @@ -93,6 +93,10 @@ else fi ]) +#AC_CHECK_LIB(SDL_image, IMG_Load, +# LIBS="$LIBS -lSDL_image", +# AC_MSG_ERROR([*** SDL_image library not found!])) + AC_LANG_PUSH([C++]) NP_FINDLIB([XERCES], [xerces], [xerces], NP_LANG_PROGRAM([#include diff --git a/source/glest_game/menu/menu_state_custom_game.cpp b/source/glest_game/menu/menu_state_custom_game.cpp index a7e1542fa..3169d78ca 100644 --- a/source/glest_game/menu/menu_state_custom_game.cpp +++ b/source/glest_game/menu/menu_state_custom_game.cpp @@ -1098,7 +1098,7 @@ void MenuStateCustomGame::simpleTask() { // uncomment to enable router setup check of this server if(EndsWith(serverInfo, "OK") == false) { showMasterserverError=true; - masterServererErrorToShow=serverInfo; + masterServererErrorToShow = (serverInfo != "" ? serverInfo : "No Reply"); } } diff --git a/source/glest_game/menu/menu_state_masterserver.cpp b/source/glest_game/menu/menu_state_masterserver.cpp index 0076ce1ea..d781ef324 100644 --- a/source/glest_game/menu/menu_state_masterserver.cpp +++ b/source/glest_game/menu/menu_state_masterserver.cpp @@ -382,66 +382,102 @@ void MenuStateMasterserver::simpleTask() { return; } MutexSafeWrapper safeMutex(&masterServerThreadAccessor); - if(needUpdateFromServer == true) { + bool needUpdate = needUpdateFromServer; + safeMutex.ReleaseLock(); + + if(needUpdate == true) { updateServerInfo(); } } void MenuStateMasterserver::updateServerInfo() { try { - needUpdateFromServer = false; + if( updateFromMasterserverThread == NULL || + updateFromMasterserverThread->getQuitStatus() == true) { + return; + } + + MutexSafeWrapper safeMutex(&masterServerThreadAccessor); + needUpdateFromServer = false; int numberOfOldServerLines=serverLines.size(); clearServerLines(); - + safeMutex.ReleaseLock(true); 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"); - std::vector serverList; - Tokenize(serverInfo,serverList,"\n"); - for(int i=0; i < serverList.size(); i++) { - string &server = serverList[i]; - std::vector serverEntities; - Tokenize(server,serverEntities,"|"); + if(serverInfo != "") { + std::vector serverList; + Tokenize(serverInfo,serverList,"\n"); + for(int i=0; i < serverList.size(); i++) { + string &server = serverList[i]; + std::vector serverEntities; + Tokenize(server,serverEntities,"|"); - const int MIN_FIELDS_EXPECTED = 11; - if(serverEntities.size() >= MIN_FIELDS_EXPECTED) { - MasterServerInfo *masterServerInfo=new MasterServerInfo(); + const int MIN_FIELDS_EXPECTED = 11; + if(serverEntities.size() >= MIN_FIELDS_EXPECTED) { - //general info: - masterServerInfo->setGlestVersion(serverEntities[0]); - masterServerInfo->setPlatform(serverEntities[1]); - masterServerInfo->setBinaryCompileDate(serverEntities[2]); + Lang &lang= Lang::getInstance(); + labelTitle.setText(lang.get("AvailableServers")); - //game info: - masterServerInfo->setServerTitle(serverEntities[3]); - masterServerInfo->setIpAddress(serverEntities[4]); + if(Config::getInstance().getString("Masterserver","") == "") { + labelTitle.setText("*** " + lang.get("AvailableServers")); + } - //game setup info: - masterServerInfo->setTech(serverEntities[5]); - masterServerInfo->setMap(serverEntities[6]); - masterServerInfo->setTileset(serverEntities[7]); - masterServerInfo->setActiveSlots(strToInt(serverEntities[8])); - masterServerInfo->setNetworkSlots(strToInt(serverEntities[9])); - masterServerInfo->setConnectedClients(strToInt(serverEntities[10])); + MasterServerInfo *masterServerInfo=new MasterServerInfo(); - //printf("Getting Ping time for host %s\n",masterServerInfo->getIpAddress().c_str()); - float pingTime = Socket::getAveragePingMS(masterServerInfo->getIpAddress().c_str(),1); - //printf("Ping time = %f\n",pingTime); - char szBuf[1024]=""; - sprintf(szBuf,"%s, %.2fms",masterServerInfo->getServerTitle().c_str(),pingTime); - masterServerInfo->setServerTitle(szBuf); + //general info: + masterServerInfo->setGlestVersion(serverEntities[0]); + masterServerInfo->setPlatform(serverEntities[1]); + masterServerInfo->setBinaryCompileDate(serverEntities[2]); - serverLines.push_back(new ServerLine( masterServerInfo, i)); + //game info: + masterServerInfo->setServerTitle(serverEntities[3]); + masterServerInfo->setIpAddress(serverEntities[4]); + + //game setup info: + masterServerInfo->setTech(serverEntities[5]); + masterServerInfo->setMap(serverEntities[6]); + masterServerInfo->setTileset(serverEntities[7]); + masterServerInfo->setActiveSlots(strToInt(serverEntities[8])); + masterServerInfo->setNetworkSlots(strToInt(serverEntities[9])); + masterServerInfo->setConnectedClients(strToInt(serverEntities[10])); + + //printf("Getting Ping time for host %s\n",masterServerInfo->getIpAddress().c_str()); + float pingTime = Socket::getAveragePingMS(masterServerInfo->getIpAddress().c_str(),1); + //printf("Ping time = %f\n",pingTime); + char szBuf[1024]=""; + sprintf(szBuf,"%s, %.2fms",masterServerInfo->getServerTitle().c_str(),pingTime); + masterServerInfo->setServerTitle(szBuf); + + if( updateFromMasterserverThread == NULL || + updateFromMasterserverThread->getQuitStatus() == true) { + return; + } + + safeMutex.Lock(); + serverLines.push_back(new ServerLine( masterServerInfo, i)); + safeMutex.ReleaseLock(true); + } + else { + Lang &lang= Lang::getInstance(); + labelTitle.setText("*** " + lang.get("AvailableServers") + " [" + serverInfo + "]"); + } } } } + + if( updateFromMasterserverThread == NULL || + updateFromMasterserverThread->getQuitStatus() == true) { + return; + } - if(serverLines.size()>numberOfOldServerLines) - { + safeMutex.Lock(); + if(serverLines.size()>numberOfOldServerLines) { playServerFoundSound=true; } + safeMutex.ReleaseLock(true); } catch(const exception &e){ SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s] Line: %d, error [%s]\n",__FILE__,__FUNCTION__,__LINE__,e.what()); diff --git a/source/shared_lib/sources/platform/sdl/gl_wrap.cpp b/source/shared_lib/sources/platform/sdl/gl_wrap.cpp index c5a4c324f..453584ba4 100644 --- a/source/shared_lib/sources/platform/sdl/gl_wrap.cpp +++ b/source/shared_lib/sources/platform/sdl/gl_wrap.cpp @@ -23,6 +23,7 @@ #include "util.h" #include "window.h" #include +//#include #include "leak_dumper.h" using namespace Shared::Graphics::Gl; @@ -54,6 +55,31 @@ void PlatformContextGl::init(int colorBits, int depthBits, int stencilBits) { int resW = PlatformCommon::Private::ScreenWidth; int resH = PlatformCommon::Private::ScreenHeight; +#ifndef WIN32 + if(fileExists("megaglest.bmp")) { + SDL_Surface *icon = SDL_LoadBMP("megaglest.bmp"); + //SDL_Surface *icon = IMG_Load("megaglest.ico"); + + +//#if !defined(MACOSX) + // Set Icon (must be done before any sdl_setvideomode call) + // But don't set it on OS X, as we use a nicer external icon there. +//#if WORDS_BIGENDIAN +// SDL_Surface* icon= SDL_CreateRGBSurfaceFrom((void*)logo,32,32,8,128,0xff000000,0x00ff0000,0x0000ff00,0); +//#else +// SDL_Surface* icon= SDL_CreateRGBSurfaceFrom((void*)logo,32,32,32,128,0x000000ff,0x0000ff00,0x00ff0000,0xff000000); +//#endif + + printf("In [%s::%s Line: %d] icon = %p\n",__FILE__,__FUNCTION__,__LINE__,icon); + if(icon == NULL) { + printf("Error: %s\n", SDL_GetError()); + } + if(icon != NULL) { + SDL_WM_SetIcon(icon, NULL); + } + } +#endif + SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] about to set resolution: %d x %d, colorBits = %d.\n",__FILE__,__FUNCTION__,__LINE__,resW,resH,colorBits); SDL_Surface* screen = SDL_SetVideoMode(resW, resH, colorBits, flags); diff --git a/source/shared_lib/sources/util/util.cpp b/source/shared_lib/sources/util/util.cpp index 7dcbff78e..f0f67b024 100644 --- a/source/shared_lib/sources/util/util.cpp +++ b/source/shared_lib/sources/util/util.cpp @@ -108,19 +108,26 @@ std::string SystemFlags::getHTTP(std::string URL,CURL *handle) { SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d] handle = %p\n",__FILE__,__FUNCTION__,__LINE__,handle); - //curl_easy_setopt(handle, CURLOPT_VERBOSE, 1); + if(getSystemSettingType(SystemFlags::debugNetwork).enabled == true) { + curl_easy_setopt(handle, CURLOPT_VERBOSE, 1); + } SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d]\n",__FILE__,__FUNCTION__,__LINE__); + char errbuf[CURL_ERROR_SIZE]=""; + curl_easy_setopt(handle, CURLOPT_ERRORBUFFER, errbuf); + /* get contents from the URL */ - curl_easy_perform(handle); - - SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d]\n",__FILE__,__FUNCTION__,__LINE__); + CURLcode result = curl_easy_perform(handle); + SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d] return code [%d] [%s]\n",__FILE__,__FUNCTION__,__LINE__,result,errbuf); std::string serverResponse = (chunk.memory != NULL ? chunk.memory : ""); if(chunk.memory) { free(chunk.memory); } + if(result != CURLE_OK) { + serverResponse = errbuf; + } SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d] serverResponse [%s]\n",__FILE__,__FUNCTION__,__LINE__,serverResponse.c_str());