- attempt to fix issue where masterserver does not have data item selected by admin client

This commit is contained in:
Mark Vejvoda 2011-10-12 06:54:36 +00:00
parent 3b382c67e9
commit 4f233d3628
2 changed files with 63 additions and 0 deletions

View File

@ -24,6 +24,8 @@
#include "game_util.h"
#include "miniftpserver.h"
#include "window.h"
#include <set>
#include "leak_dumper.h"
using namespace std;
@ -78,6 +80,37 @@ ServerInterface::ServerInterface(bool publishEnabled) :GameNetworkInterface() {
serverSocket.setBindPort(Config::getInstance().getInt("ServerPort", intToStr(GameConstants::serverPort).c_str()));
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
Config &config = Config::getInstance();
vector<string> results;
set<string> allMaps;
findAll(config.getPathListForType(ptMaps), "*.gbm", results, true, false);
copy(results.begin(), results.end(), std::inserter(allMaps, allMaps.begin()));
results.clear();
findAll(config.getPathListForType(ptMaps), "*.mgm", results, true, false);
copy(results.begin(), results.end(), std::inserter(allMaps, allMaps.begin()));
results.clear();
if (allMaps.empty()) {
throw runtime_error("No maps were found!");
}
copy(allMaps.begin(), allMaps.end(), std::back_inserter(results));
mapFiles = results;
//tileset listBox
results.clear();
findDirs(config.getPathListForType(ptTilesets), results);
if (results.empty()) {
throw runtime_error("No tile-sets were found!");
}
tilesetFiles= results;
//tech Tree listBox
results.clear();
findDirs(config.getPathListForType(ptTechs), results);
if(results.empty()) {
throw runtime_error("No tech-trees were found!");
}
techTreeFiles= results;
if(Config::getInstance().getBool("EnableFTPServer","true") == true) {
std::pair<string,string> mapsPath;
vector<string> pathList = Config::getInstance().getPathListForType(ptMaps);
@ -1651,6 +1684,32 @@ int ServerInterface::getGameSettingsUpdateCount() {
void ServerInterface::setGameSettings(GameSettings *serverGameSettings, bool waitForClientAck) {
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s] START gameSettingsUpdateCount = %d, waitForClientAck = %d\n",__FILE__,__FUNCTION__,gameSettingsUpdateCount,waitForClientAck);
MutexSafeWrapper safeMutex(&serverSynchAccessor,string(__FILE__) + "_" + intToStr(__LINE__));
string mapFile = serverGameSettings->getMap();
if(find(mapFiles.begin(),mapFiles.end(),mapFile) == mapFiles.end()) {
printf("Reverting map from [%s] to [%s]\n",serverGameSettings->getMap().c_str(),gameSettings.getMap().c_str());
serverGameSettings->setMapFilterIndex(gameSettings.getMapFilterIndex());
serverGameSettings->setMap(gameSettings.getMap());
serverGameSettings->setMapCRC(gameSettings.getMapCRC());
}
string tilesetFile = serverGameSettings->getTileset();
if(find(tilesetFiles.begin(),tilesetFiles.end(),tilesetFile) == tilesetFiles.end()) {
printf("Reverting tileset from [%s] to [%s]\n",serverGameSettings->getTileset().c_str(),gameSettings.getTileset().c_str());
serverGameSettings->setTileset(gameSettings.getTileset());
serverGameSettings->setTilesetCRC(gameSettings.getTilesetCRC());
}
string techtreeFile = serverGameSettings->getTech();
if(find(techTreeFiles.begin(),techTreeFiles.end(),techtreeFile) == techTreeFiles.end()) {
printf("Reverting tech from [%s] to [%s]\n",serverGameSettings->getTech().c_str(),gameSettings.getTech().c_str());
serverGameSettings->setTech(gameSettings.getTech());
serverGameSettings->setTechCRC(gameSettings.getTechCRC());
}
gameSettings = *serverGameSettings;
if(getAllowGameDataSynchCheck() == true) {
if(waitForClientAck == true && gameSettingsUpdateCount > 0) {

View File

@ -81,6 +81,10 @@ private:
bool masterserverAdminRequestLaunch;
vector<string> mapFiles;
vector<string> techTreeFiles;
vector<string> tilesetFiles;
public:
ServerInterface(bool publishEnabled);
virtual ~ServerInterface();