- fixed masterserver invalid connection issue and blank error message in custom game menu

- added optional bmp icon load for linux
This commit is contained in:
Mark Vejvoda
2010-06-26 08:04:11 +00:00
parent 0d5cfdda03
commit 7b3ba31fe7
5 changed files with 114 additions and 41 deletions

View File

@@ -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 <xercesc/util/PlatformUtils.hpp>

View File

@@ -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");
}
}

View File

@@ -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<std::string> serverList;
Tokenize(serverInfo,serverList,"\n");
for(int i=0; i < serverList.size(); i++) {
string &server = serverList[i];
std::vector<std::string> serverEntities;
Tokenize(server,serverEntities,"|");
if(serverInfo != "") {
std::vector<std::string> serverList;
Tokenize(serverInfo,serverList,"\n");
for(int i=0; i < serverList.size(); i++) {
string &server = serverList[i];
std::vector<std::string> 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());

View File

@@ -23,6 +23,7 @@
#include "util.h"
#include "window.h"
#include <vector>
//#include <SDL_image.h>
#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);

View File

@@ -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());