From 59c5fd2581558540260c7ee9bfe7f9da923c267b Mon Sep 17 00:00:00 2001 From: Mark Vejvoda Date: Fri, 15 Oct 2010 17:27:00 +0000 Subject: [PATCH] - moved version checking into one common method in the util file. Now all network related checks use this common method to determine version compatibility --- .../menu/menu_state_masterserver.cpp | 20 +++---------------- .../glest_game/network/client_interface.cpp | 4 +++- source/glest_game/network/connection_slot.cpp | 4 +++- source/shared_lib/include/util/util.h | 1 + source/shared_lib/sources/util/util.cpp | 20 +++++++++++++++++++ 5 files changed, 30 insertions(+), 19 deletions(-) diff --git a/source/glest_game/menu/menu_state_masterserver.cpp b/source/glest_game/menu/menu_state_masterserver.cpp index 23b56b83..87d49d9d 100644 --- a/source/glest_game/menu/menu_state_masterserver.cpp +++ b/source/glest_game/menu/menu_state_masterserver.cpp @@ -116,23 +116,9 @@ ServerLine::ServerLine( MasterServerInfo *mServerInfo, int lineIndex, const char selectButton.setText(">"); //printf("glestVersionString [%s] masterServerInfo->getGlestVersion() [%s]\n",glestVersionString.c_str(),masterServerInfo->getGlestVersion().c_str()); - if(glestVersionString != masterServerInfo->getGlestVersion()) { - vector tokens; - vector tokensServer; - Tokenize(glestVersionString,tokens,"."); - Tokenize(masterServerInfo->getGlestVersion(),tokensServer,"."); - // only check the first 3 sections with . to compare makor versions #'s - bool compatibleWithServer = (tokens.size() >= 3 && tokensServer.size() >= 3); - for(int i = 0; compatibleWithServer == true && i < 3; ++i) { - if(tokens[i] != tokensServer[i]) { - compatibleWithServer = false; - } - } - if(compatibleWithServer == false) { - selectButton.setEnabled(false); - selectButton.setEditable(false); - } - } + bool compatible = checkVersionComptability(glestVersionString, masterServerInfo->getGlestVersion()); + selectButton.setEnabled(compatible); + selectButton.setEditable(compatible); GraphicComponent::applyAllCustomProperties(containerName); } diff --git a/source/glest_game/network/client_interface.cpp b/source/glest_game/network/client_interface.cpp index ef07ef80..19d2c624 100755 --- a/source/glest_game/network/client_interface.cpp +++ b/source/glest_game/network/client_interface.cpp @@ -184,7 +184,9 @@ void ClientInterface::updateLobby() { SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] got NetworkMessageIntro, networkMessageIntro.getGameState() = %d, versionString [%s], sessionKey = %d, playerIndex = %d\n",__FILE__,__FUNCTION__,__LINE__,networkMessageIntro.getGameState(),versionString.c_str(),sessionKey,playerIndex); //check consistency - if(networkMessageIntro.getVersionString() != getNetworkVersionString()) { + bool compatible = checkVersionComptability(networkMessageIntro.getVersionString(), getNetworkVersionString()); + if(compatible == false) { + //if(networkMessageIntro.getVersionString() != getNetworkVersionString()) { SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__); bool versionMatched = false; diff --git a/source/glest_game/network/connection_slot.cpp b/source/glest_game/network/connection_slot.cpp index d7023443..eebe5ece 100644 --- a/source/glest_game/network/connection_slot.cpp +++ b/source/glest_game/network/connection_slot.cpp @@ -368,7 +368,9 @@ void ConnectionSlot::update(bool checkForNewClients) { } //check consistency - if(networkMessageIntro.getVersionString() != getNetworkVersionString()) { + bool compatible = checkVersionComptability(getNetworkVersionString(), networkMessageIntro.getVersionString()); + if(compatible == false) { + //if(networkMessageIntro.getVersionString() != getNetworkVersionString()) { SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__); bool versionMatched = false; diff --git a/source/shared_lib/include/util/util.h b/source/shared_lib/include/util/util.h index 4d173810..e81fc8ee 100644 --- a/source/shared_lib/include/util/util.h +++ b/source/shared_lib/include/util/util.h @@ -180,6 +180,7 @@ int round(float f); //misc bool fileExists(const string &path); +bool checkVersionComptability(string clientVersionString, string serverVersionString); template void deleteValues(T beginIt, T endIt){ diff --git a/source/shared_lib/sources/util/util.cpp b/source/shared_lib/sources/util/util.cpp index 6e52915b..48d65529 100644 --- a/source/shared_lib/sources/util/util.cpp +++ b/source/shared_lib/sources/util/util.cpp @@ -542,4 +542,24 @@ bool fileExists(const string &path){ return false; } +bool checkVersionComptability(string clientVersionString, string serverVersionString) { + bool compatible = (clientVersionString == serverVersionString); + if(compatible == false) { + vector tokens; + vector tokensServer; + Tokenize(clientVersionString,tokens,"."); + Tokenize(serverVersionString,tokensServer,"."); + + // only check the first 3 sections with . to compare makor versions #'s + compatible = (tokens.size() >= 3 && tokensServer.size() >= 3); + for(int i = 0; compatible == true && i < 3; ++i) { + if(tokens[i] != tokensServer[i]) { + compatible = false; + } + } + } + + return compatible; +} + }}//end namespace