From d4ba5cbf0067562dbc86ad2ac0b59beb165b82ce Mon Sep 17 00:00:00 2001 From: mathusummut Date: Sun, 11 Nov 2018 18:28:29 +0100 Subject: [PATCH] Now tolerates different versions --- source/glest_game/facilities/game_util.cpp | 34 +-- source/glest_game/facilities/game_util.h | 5 +- source/glest_game/game/game.cpp | 12 +- source/glest_game/main/main.cpp | 10 - .../menu/menu_state_custom_game.cpp | 4 +- .../glest_game/menu/menu_state_load_game.cpp | 4 +- source/glest_game/menu/server_line.cpp | 4 +- .../glest_game/network/client_interface.cpp | 12 +- source/glest_game/network/connection_slot.cpp | 12 +- .../glest_game/network/server_interface.cpp | 2 +- source/shared_lib/include/util/util.h | 2 +- source/shared_lib/sources/util/util.cpp | 230 ++---------------- 12 files changed, 50 insertions(+), 281 deletions(-) diff --git a/source/glest_game/facilities/game_util.cpp b/source/glest_game/facilities/game_util.cpp index 8ffb761ba..2069e5748 100644 --- a/source/glest_game/facilities/game_util.cpp +++ b/source/glest_game/facilities/game_util.cpp @@ -167,33 +167,6 @@ namespace Game { return version; } - string getNetworkVersionString() { - static string version = ""; - if (version == "") { - version = - GameVersionString + "-" + getCompilerNameString() + "-" + - getCompileDateTime(); - } - return version; - } - - string getNetworkVersionGITString() { - static string version = ""; - if (version == "") { - version = - GameVersionString + getCompilerNameString(); - } - return version; - } - - string getCompileDateTime() { - static string result = ""; - // if(result == "") { - // result = string(__DATE__) + " " + string(__TIME__); - // } - return result; - } - string getAboutString1(int i) { //case 1: return "Built: " + string(__DATE__) + " " + GIT_Rev; switch (i) { @@ -376,13 +349,14 @@ namespace Game { return path; } + bool checkVersionCompatibility(string clientVersionString, string serverVersionString) { + return true; + } + void initSpecialStrings() { getCrashDumpFileName(); getPlatformNameString(); getCompilerNameString(); - getNetworkVersionString(); - getNetworkVersionGITString(); - getCompileDateTime(); } bool upgradeFilesInTemp() { diff --git a/source/glest_game/facilities/game_util.h b/source/glest_game/facilities/game_util.h index e93a1a95b..ed119bf7c 100644 --- a/source/glest_game/facilities/game_util.h +++ b/source/glest_game/facilities/game_util.h @@ -41,14 +41,11 @@ namespace Game { string getPlatformArchTypeNameString(); string getPlatformNameString(); string getCompilerNameString(); - string getNetworkVersionString(); - string getNetworkVersionGITString(); string getAboutString1(int i); string getAboutString2(int i); string getTeammateName(int i); string getTeammateRole(int i); - string getCompileDateTime(); - + bool checkVersionCompatibility(string clientVersionString, string serverVersionString); string formatString(string str); string getGameReadWritePath(const string & lookupKey = ""); diff --git a/source/glest_game/game/game.cpp b/source/glest_game/game/game.cpp index 8688b0939..7fbcf5b26 100644 --- a/source/glest_game/game/game.cpp +++ b/source/glest_game/game/game.cpp @@ -9010,9 +9010,7 @@ namespace Game { Lang & lang = Lang::getInstance(); string gameVer = versionNode->getAttribute("version")->getValue(); - if (gameVer != GameVersionString - && checkVersionCompatibility(gameVer, - GameVersionString) == false) { + if (checkVersionCompatibility(gameVer, GameVersionString) == false) { char szBuf[8096] = ""; snprintf(szBuf, 8096, lang.getString("SavedGameBadVersion").c_str(), @@ -9098,7 +9096,7 @@ namespace Game { Lang & lang = Lang::getInstance(); string gameVer = versionNode->getAttribute("version")->getValue(); // this is the version check for loading normal save games from menu_state_load_game - if (gameVer != GameVersionString + /*if (gameVer != GameVersionString && (compareMajorMinorVersion (gameVer, LastCompatibleVersionString) < 0 @@ -9113,7 +9111,7 @@ namespace Game { if (SystemFlags::VERBOSE_MODE_ENABLED) printf ("Found saved game version that matches your application version: [%s] --> [%s]\n", - gameVer.c_str(), GameVersionString.c_str()); + gameVer.c_str(), GameVersionString.c_str());*/ XmlNode *gameNode = rootNode->getChild("Game"); GameSettings newGameSettings; @@ -9126,9 +9124,7 @@ namespace Game { XmlNode *statsNode = worldNode->getChild("Stats"); XmlNode *minimapNode = worldNode->getChild("Minimap"); - if (gameVer != GameVersionString - && checkVersionCompatibility(gameVer, - GameVersionString) == false) { + if (checkVersionCompatibility(gameVer, GameVersionString) == false) { char szBuf[8096] = ""; snprintf(szBuf, 8096, lang.getString("SavedGameBadVersion").c_str(), diff --git a/source/glest_game/main/main.cpp b/source/glest_game/main/main.cpp index a4bf74956..998033358 100644 --- a/source/glest_game/main/main.cpp +++ b/source/glest_game/main/main.cpp @@ -6842,16 +6842,6 @@ namespace Game { MenuStateMasterserver::setDisplayMessageFunction(ExceptionHandler:: DisplayMessage); -#ifdef USE_STREFLOP - SystemFlags::OutputDebug(SystemFlags::debugSystem, - "%s, STREFLOP enabled.\n", - getNetworkVersionString().c_str()); -#else - SystemFlags::OutputDebug(SystemFlags::debugSystem, - "%s, STREFLOP NOT enabled.\n", - getNetworkVersionString().c_str()); -#endif - SystemFlags::OutputDebug(SystemFlags::debugSystem, "In [%s::%s Line: %d]\n", __FILE__, __FUNCTION__, __LINE__); diff --git a/source/glest_game/menu/menu_state_custom_game.cpp b/source/glest_game/menu/menu_state_custom_game.cpp index bcbaa0ca9..e5bce1dfa 100644 --- a/source/glest_game/menu/menu_state_custom_game.cpp +++ b/source/glest_game/menu/menu_state_custom_game.cpp @@ -409,7 +409,6 @@ namespace Game { serverPort + " / " + externalPort + " )"); ServerSocket::setExternalPort(strToInt(externalPort)); - //labelLocalGameVersion.setText(glestVersionString + " [" + getCompileDateTime() + ", " + getGITRevisionString() + "]"); labelLocalGameVersion.setText(GameVersionString); xoffset = 65; @@ -1059,7 +1058,6 @@ namespace Game { mainMessageBox.init(lang.getString("Ok"), 500, 300); - //labelLocalGameVersion.setText(glestVersionString + " [" + getCompileDateTime() + ", " + getGITRevisionString() + "]"); labelLocalGameVersion.setText(GameVersionString); //vector teamItems, controlItems, results , rMultiplier; @@ -3602,7 +3600,7 @@ namespace Game { publishToServerInfo["glestVersion"] = GameVersionString; publishToServerInfo["platform"] = getPlatformNameString(); - publishToServerInfo["binaryCompileDate"] = getCompileDateTime(); + publishToServerInfo["binaryCompileDate"] = string(); //game info: publishToServerInfo["serverTitle"] = gameSettings.getGameName(); diff --git a/source/glest_game/menu/menu_state_load_game.cpp b/source/glest_game/menu/menu_state_load_game.cpp index 8e2ccb999..09a1dce1e 100644 --- a/source/glest_game/menu/menu_state_load_game.cpp +++ b/source/glest_game/menu/menu_state_load_game.cpp @@ -396,9 +396,7 @@ namespace Game { const XmlNode *versionNode = rootNode; string gameVer = versionNode->getAttribute("version")->getValue(); - if (gameVer != GameVersionString - && checkVersionCompatibility(gameVer, - GameVersionString) == + if (checkVersionCompatibility(gameVer, GameVersionString) == false) { char szBuf[8096] = ""; snprintf(szBuf, 8096, diff --git a/source/glest_game/menu/server_line.cpp b/source/glest_game/menu/server_line.cpp index 6000cf8c8..449158bb2 100644 --- a/source/glest_game/menu/server_line.cpp +++ b/source/glest_game/menu/server_line.cpp @@ -191,9 +191,7 @@ namespace Game { selectButton.setAlwaysLighted(true); //printf("glestVersionString [%s] masterServerInfo->getGlestVersion() [%s]\n",glestVersionString.c_str(),masterServerInfo->getGlestVersion().c_str()); - compatible = - checkVersionCompatibility(GameVersionString, - masterServerInfo.getGlestVersion()); + compatible = checkVersionCompatibility(GameVersionString, masterServerInfo.getGlestVersion()); selectButton.setEnabled(compatible); selectButton.setEditable(compatible); diff --git a/source/glest_game/network/client_interface.cpp b/source/glest_game/network/client_interface.cpp index 694223b34..2d977e1f2 100644 --- a/source/glest_game/network/client_interface.cpp +++ b/source/glest_game/network/client_interface.cpp @@ -568,7 +568,7 @@ namespace Game { if (SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork, "In [%s::%s Line: %d] got NetworkMessageIntro, networkMessageIntro.getGameState() = %d, versionString [%s], sessionKey = %d, playerIndex = %d, serverFTPPort = %d\n", extractFileFromDirectoryPath(__FILE__).c_str(), __FUNCTION__, __LINE__, networkMessageIntro.getGameState(), versionString.c_str(), sessionKey, playerIndex, serverFTPPort); //check consistency - bool compatible = checkVersionCompatibility(networkMessageIntro.getVersionString(), getNetworkVersionGITString()); + bool compatible = checkVersionCompatibility(GameVersionString, networkMessageIntro.getVersionString()); if (SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork, "In [%s::%s Line: %d] got NetworkMessageIntro, networkMessageIntro.getGameState() = %d, versionString [%s], sessionKey = %d, playerIndex = %d, serverFTPPort = %d\n", extractFileFromDirectoryPath(__FILE__).c_str(), __FUNCTION__, __LINE__, networkMessageIntro.getGameState(), versionString.c_str(), sessionKey, playerIndex, serverFTPPort); @@ -581,18 +581,18 @@ namespace Game { if (strncmp(GameVersionString.c_str(), networkMessageIntro.getVersionString().c_str(), GameVersionString.length()) != 0) { string playerNameStr = getHumanPlayerName(); sErr = "Server and client binary mismatch!\nYou have to use the exactly same binaries!\n\nServer: " + networkMessageIntro.getVersionString() + - "\nClient: " + getNetworkVersionGITString() + " player [" + playerNameStr + "]"; + "\nClient: " + GameVersionString + " player [" + playerNameStr + "]"; printf("%s\n", sErr.c_str()); - sendTextMessage("Server and client binary mismatch!!", -1, true, ""); + sendTextMessage("Server and client binary mismatch", -1, true, ""); sendTextMessage(" Server:" + networkMessageIntro.getVersionString(), -1, true, ""); - sendTextMessage(" Client: " + getNetworkVersionGITString(), -1, true, ""); + sendTextMessage(" Client: " + GameVersionString, -1, true, ""); sendTextMessage(" Client player [" + playerNameStr + "]", -1, true, ""); } else { versionMatched = true; string playerNameStr = getHumanPlayerName(); sErr = "Warning, Server and client are using the same version but different platforms.\n\nServer: " + networkMessageIntro.getVersionString() + - "\nClient: " + getNetworkVersionGITString() + " player [" + playerNameStr + "]"; + "\nClient: " + GameVersionString + " player [" + playerNameStr + "]"; //printf("%s\n",sErr.c_str()); } @@ -620,7 +620,7 @@ namespace Game { //send intro message Lang &lang = Lang::getInstance(); NetworkMessageIntro sendNetworkMessageIntro( - sessionKey, getNetworkVersionGITString(), + sessionKey, GameVersionString, getHumanPlayerName(), -1, nmgstOk, diff --git a/source/glest_game/network/connection_slot.cpp b/source/glest_game/network/connection_slot.cpp index 37d6c2420..6323247a6 100644 --- a/source/glest_game/network/connection_slot.cpp +++ b/source/glest_game/network/connection_slot.cpp @@ -619,7 +619,7 @@ namespace Game { NetworkMessageIntro networkMessageIntro( sessionKey, - getNetworkVersionGITString(), + GameVersionString, getHostName(), playerIndex, nmgstOk, @@ -872,7 +872,7 @@ namespace Game { //check consistency if (SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork, "In [%s::%s Line: %d]\n", __FILE__, __FUNCTION__, __LINE__); - bool compatible = checkVersionCompatibility(getNetworkVersionGITString(), networkMessageIntro.getVersionString()); + bool compatible = checkVersionCompatibility(networkMessageIntro.getVersionString(), GameVersionString); if (SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork, "In [%s::%s Line: %d]\n", __FILE__, __FUNCTION__, __LINE__); @@ -884,19 +884,19 @@ namespace Game { if (strncmp(GameVersionString.c_str(), networkMessageIntro.getVersionString().c_str(), GameVersionString.length()) != 0) { string playerNameStr = name; - sErr = "Server and client version mismatch!\nYou have to use the exactly same versions!\n\nServer: " + getNetworkVersionGITString() + + sErr = "Server and client version mismatch!\nYou have to use the exactly same versions!\n\nServer: " + GameVersionString + "\nClient: " + networkMessageIntro.getVersionString() + " player [" + playerNameStr + "]"; printf("%s\n", sErr.c_str()); - serverInterface->sendTextMessage("Server and client version mismatch!", -1, true, "", lockedSlotIndex); - serverInterface->sendTextMessage(" Server:" + getNetworkVersionGITString(), -1, true, "", lockedSlotIndex); + serverInterface->sendTextMessage("Server and client version mismatch", -1, true, "", lockedSlotIndex); + serverInterface->sendTextMessage(" Server:" + GameVersionString, -1, true, "", lockedSlotIndex); serverInterface->sendTextMessage(" Client: " + networkMessageIntro.getVersionString(), -1, true, "", lockedSlotIndex); serverInterface->sendTextMessage(" Client player [" + playerNameStr + "]", -1, true, "", lockedSlotIndex); } else { versionMatched = true; string playerNameStr = name; - sErr = "Warning, Server and client are using the same version but different platforms.\n\nServer: " + getNetworkVersionGITString() + + sErr = "Warning, Server and client are using the same version but different platforms.\n\nServer: " + GameVersionString + "\nClient: " + networkMessageIntro.getVersionString() + " player [" + playerNameStr + "]"; //printf("%s\n",sErr.c_str()); if (SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork, "In [%s::%s Line: %d] %s\n", __FILE__, __FUNCTION__, __LINE__, sErr.c_str()); diff --git a/source/glest_game/network/server_interface.cpp b/source/glest_game/network/server_interface.cpp index bf730750e..df71ae523 100644 --- a/source/glest_game/network/server_interface.cpp +++ b/source/glest_game/network/server_interface.cpp @@ -2826,7 +2826,7 @@ namespace Game { publishToServerInfo["uuid"] = Config::getInstance().getString("PlayerId", ""); publishToServerInfo["glestVersion"] = GameVersionString; publishToServerInfo["platform"] = getPlatformNameString(); - publishToServerInfo["binaryCompileDate"] = getCompileDateTime(); + publishToServerInfo["binaryCompileDate"] = string(); publishToServerInfo["serverTitle"] = this->getGameSettings()->getGameName(); publishToServerInfo["tech"] = this->getGameSettings()->getTech(); publishToServerInfo["map"] = this->getGameSettings()->getMap(); diff --git a/source/shared_lib/include/util/util.h b/source/shared_lib/include/util/util.h index 9d1526364..d5d923df1 100644 --- a/source/shared_lib/include/util/util.h +++ b/source/shared_lib/include/util/util.h @@ -244,6 +244,7 @@ namespace Shared { vector split(string s, string d); string toLower(const string &s); bool compareNonCaseSensitive(const string &a, const string &b); + string trimAllExceptNumbersAndPeriods(string str); //void copyStringToBuffer(char *buffer, int bufferSize, const string& s); //numeric fcs @@ -257,7 +258,6 @@ namespace Shared { int compareMajorMinorVersion(const string &versionA, const string &versionB); int getMajor(string version); int getMinor(string version); - bool checkVersionCompatibility(string clientVersionString, string serverVersionString); template void enforceMinimumValue(T minValue, T &value) { diff --git a/source/shared_lib/sources/util/util.cpp b/source/shared_lib/sources/util/util.cpp index 4096a6c57..34ab88d2c 100644 --- a/source/shared_lib/sources/util/util.cpp +++ b/source/shared_lib/sources/util/util.cpp @@ -792,12 +792,32 @@ namespace Shared { // return (int) f; //} + string trimAllExceptNumbersAndPeriods(string str) { + char current; + int startIndex, endIndex; + for (startIndex = 0; startIndex < str.length(); startIndex++) { + current = str[startIndex]; + if ((current >= '0' && current <= '9') || current == '.') + break; + } + for (endIndex = str.length() - 1; endIndex > startIndex; endIndex--) { + current = str[endIndex]; + if ((current >= '0' && current <= '9') || current == '.') + break; + } + return str.substr(startIndex, (endIndex - startIndex) + 1); + } + // ==================== misc ==================== int compareMajorMinorVersion(const string &versionA, const string &versionB) { - int majorA = getMajor(versionA); - int minorA = getMinor(versionA); - int majorB = getMajor(versionB); - int minorB = getMinor(versionB); + if (versionA == versionB) + return 0; + string verA = trimAllExceptNumbersAndPeriods(versionA); + string verB = trimAllExceptNumbersAndPeriods(versionB); + int majorA = getMajor(verA); + int minorA = getMinor(verA); + int majorB = getMajor(verB); + int minorB = getMinor(verB); //printf("majorA:%d minorA:%d majorB:%d minorB:%d\n",majorA,minorA,majorB,minorB); if (majorA < majorB) { @@ -854,207 +874,5 @@ namespace Shared { return 0; } } - - bool checkVersionCompatibility(string clientVersionString, string serverVersionString) { - //SystemFlags::VERBOSE_MODE_ENABLED = true; - - bool compatible = (clientVersionString == serverVersionString); - if (compatible == false) { - if (SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem, "In [%s::%s Line: %d] clientVersionString [%s], serverVersionString [%s]\n", extractFileFromDirectoryPath(__FILE__).c_str(), __FUNCTION__, __LINE__, clientVersionString.c_str(), serverVersionString.c_str()); - if (SystemFlags::VERBOSE_MODE_ENABLED) printf("In [%s::%s Line: %d] clientVersionString [%s], serverVersionString [%s]\n", extractFileFromDirectoryPath(__FILE__).c_str(), __FUNCTION__, __LINE__, clientVersionString.c_str(), serverVersionString.c_str()); - - vector tokens; - vector tokensServer; - Tokenize(clientVersionString, tokens, "."); - Tokenize(serverVersionString, tokensServer, "."); - - // Search for -dev, -gamma, -alpha, -beta and strip characters after - for (unsigned int i = 0; i < tokensServer.size(); ++i) { - vector tokensSpecialVersionTags; - Tokenize(tokensServer[i], tokensSpecialVersionTags, "-"); - if (tokensSpecialVersionTags.size() > 1) { - if (StartsWith(tokensSpecialVersionTags[1], "dev") == true || - StartsWith(tokensSpecialVersionTags[1], "gamma") == true || - StartsWith(tokensSpecialVersionTags[1], "alpha") == true || - StartsWith(tokensSpecialVersionTags[1], "beta") == true) { - - if (SystemFlags::VERBOSE_MODE_ENABLED) printf("Line Ref: %d FOUND SPECIAL SERVER VERSION TAG [%s] [%s] tokensSpecialVersionTags.size() = " MG_SIZE_T_SPECIFIER "\n", __LINE__, tokensSpecialVersionTags[0].c_str(), tokensSpecialVersionTags[1].c_str(), tokensSpecialVersionTags.size()); - - // Chop off platform specific version info - if (tokensSpecialVersionTags.size() > 2) { - string trimRightDelim = "-" + tokensSpecialVersionTags[2]; - string newVersionText = trim_at_delim(serverVersionString, trimRightDelim); - - if (SystemFlags::VERBOSE_MODE_ENABLED) printf("Line Ref: %d NEW SERVER VERSION TAG [%s] OLD TAG [%s] delim [%s]\n", __LINE__, newVersionText.c_str(), serverVersionString.c_str(), trimRightDelim.c_str()); - serverVersionString = newVersionText; - - tokensServer.clear(); - Tokenize(serverVersionString, tokensServer, "."); - } - - break; - } - } - } - for (unsigned int i = 0; i < tokens.size(); ++i) { - vector tokensSpecialVersionTags; - Tokenize(tokens[i], tokensSpecialVersionTags, "-"); - if (tokensSpecialVersionTags.size() > 1) { - if (StartsWith(tokensSpecialVersionTags[1], "dev") == true || - StartsWith(tokensSpecialVersionTags[1], "gamma") == true || - StartsWith(tokensSpecialVersionTags[1], "alpha") == true || - StartsWith(tokensSpecialVersionTags[1], "beta") == true) { - - if (SystemFlags::VERBOSE_MODE_ENABLED) printf("Line Ref: %d FOUND SPECIAL CLIENT VERSION TAG [%s] [%s] tokensSpecialVersionTags.size() = " MG_SIZE_T_SPECIFIER "\n", __LINE__, tokensSpecialVersionTags[0].c_str(), tokensSpecialVersionTags[1].c_str(), tokensSpecialVersionTags.size()); - - // Chop off platform specific version info - if (tokensSpecialVersionTags.size() > 2) { - string trimRightDelim = "-" + tokensSpecialVersionTags[2]; - string newVersionText = trim_at_delim(clientVersionString, trimRightDelim); - - if (SystemFlags::VERBOSE_MODE_ENABLED) printf("Line Ref: %d NEW CLIENT VERSION TAG [%s] OLD TAG [%s] delim [%s]\n", __LINE__, newVersionText.c_str(), clientVersionString.c_str(), trimRightDelim.c_str()); - clientVersionString = newVersionText; - - tokens.clear(); - Tokenize(clientVersionString, tokens, "."); - } - - break; - } - } - } - - // strip the v off the first version, ie v3.7.0 - replaceAll(tokensServer[0], "v", ""); - replaceAll(tokens[0], "v", ""); - replaceAll(tokensServer[0], "ZetaGlest", ""); - replaceAll(tokens[0], "ZetaGlest", ""); - replaceAll(tokensServer[0], " ", ""); - replaceAll(tokens[0], " ", ""); - - if (SystemFlags::VERBOSE_MODE_ENABLED) { - // debug version strings - for (unsigned int i = 0; i < tokensServer.size(); ++i) { - printf("Line Ref: %d Server version index = %u str [%s] IsNumeric = %d\n", __LINE__, i, tokensServer[i].c_str(), IsNumeric(tokensServer[i].c_str(), false)); - } - for (unsigned int i = 0; i < tokens.size(); ++i) { - printf("Line Ref: %d Client version index = %u str [%s] IsNumeric = %d\n", __LINE__, i, tokens[i].c_str(), IsNumeric(tokens[i].c_str(), false)); - } - } - // **NOTE: - // after of 3.7.0 we go to 2 digi version compatibility, check if both - // client and server are at least 3.7 - bool compatiblePre3_7_0_1_Check = true; - - if (tokens.size() >= 2 && tokensServer.size() >= 2) { - if (SystemFlags::VERBOSE_MODE_ENABLED) printf("In [%s::%s Line: %d]\n", extractFileFromDirectoryPath(__FILE__).c_str(), __FUNCTION__, __LINE__); - - // Both Client and Server are >= to 3.7.0 - if (tokensServer[0] != "" && IsNumeric(tokensServer[0].c_str(), false) && strToInt(tokensServer[0]) >= 3 && - tokensServer[1] != "" && IsNumeric(tokensServer[1].c_str(), false) && strToInt(tokensServer[1]) >= 7 && - tokens[0] != "" && IsNumeric(tokens[0].c_str(), false) && strToInt(tokens[0]) >= 3 && - tokens[1] != "" && IsNumeric(tokens[1].c_str(), false) && strToInt(tokens[1]) >= 7) { - - if (SystemFlags::VERBOSE_MODE_ENABLED) printf("In [%s::%s Line: %d]\n", extractFileFromDirectoryPath(__FILE__).c_str(), __FUNCTION__, __LINE__); - - bool compatiblePost3_7_0_Check = false; - // Both are at least 3.7.0, now check if both are > 3.7.0 - if (tokens.size() >= 3 && tokensServer.size() >= 3) { - if (SystemFlags::VERBOSE_MODE_ENABLED) printf("In [%s::%s Line: %d]\n", extractFileFromDirectoryPath(__FILE__).c_str(), __FUNCTION__, __LINE__); - - if ((tokensServer[0] != "" && IsNumeric(tokensServer[0].c_str(), false) && strToInt(tokensServer[0]) >= 3 && - tokensServer[1] != "" && IsNumeric(tokensServer[1].c_str(), false) && strToInt(tokensServer[1]) >= 7 && - tokensServer[2] != "" && IsNumeric(tokensServer[2].c_str(), false) && strToInt(tokensServer[2]) > 0) && - (tokens[0] != "" && IsNumeric(tokens[0].c_str(), false) && strToInt(tokens[0]) >= 3 && - tokens[1] != "" && IsNumeric(tokens[1].c_str(), false) && strToInt(tokens[1]) >= 7 && - tokens[2] != "" && IsNumeric(tokens[2].c_str(), false) && strToInt(tokens[2]) > 0)) { - - if (SystemFlags::VERBOSE_MODE_ENABLED) printf("In [%s::%s Line: %d]\n", extractFileFromDirectoryPath(__FILE__).c_str(), __FUNCTION__, __LINE__); - - compatiblePost3_7_0_Check = true; - } - if (strToInt(tokensServer[0]) == strToInt(tokens[0]) && - strToInt(tokensServer[1]) == strToInt(tokens[1])) { - - if (SystemFlags::VERBOSE_MODE_ENABLED) printf("In [%s::%s Line: %d]\n", extractFileFromDirectoryPath(__FILE__).c_str(), __FUNCTION__, __LINE__); - - if ((tokensServer[0] != "" && IsNumeric(tokensServer[0].c_str(), false) && strToInt(tokensServer[0]) == 3 && - tokensServer[1] != "" && IsNumeric(tokensServer[1].c_str(), false) && strToInt(tokensServer[1]) == 7 && - tokensServer[2] != "" && IsNumeric(tokensServer[2].c_str(), false) && strToInt(tokensServer[2]) == 0) || - (tokens[0] != "" && IsNumeric(tokens[0].c_str(), false) && strToInt(tokens[0]) == 3 && - tokens[1] != "" && IsNumeric(tokens[1].c_str(), false) && strToInt(tokens[1]) == 7 && - tokens[2] != "" && IsNumeric(tokens[2].c_str(), false) && strToInt(tokens[2]) == 0)) { - - if (SystemFlags::VERBOSE_MODE_ENABLED) printf("In [%s::%s Line: %d]\n", extractFileFromDirectoryPath(__FILE__).c_str(), __FUNCTION__, __LINE__); - compatiblePost3_7_0_Check = false; - } else { - if (SystemFlags::VERBOSE_MODE_ENABLED) printf("In [%s::%s Line: %d]\n", extractFileFromDirectoryPath(__FILE__).c_str(), __FUNCTION__, __LINE__); - compatiblePost3_7_0_Check = true; - } - } - - } else { - // If both are > 3.7 use new version checking of 2 digits since both are higher than 3.7.0 - if ((tokensServer[0] != "" && IsNumeric(tokensServer[0].c_str(), false) && strToInt(tokensServer[0]) >= 3 && - tokensServer[1] != "" && IsNumeric(tokensServer[1].c_str(), false) && strToInt(tokensServer[1]) > 7) && - (tokens[0] != "" && IsNumeric(tokens[0].c_str(), false) && strToInt(tokens[0]) >= 3 && - tokens[1] != "" && IsNumeric(tokens[1].c_str(), false) && strToInt(tokens[1]) > 7)) { - - if (SystemFlags::VERBOSE_MODE_ENABLED) printf("In [%s::%s Line: %d]\n", extractFileFromDirectoryPath(__FILE__).c_str(), __FUNCTION__, __LINE__); - - compatiblePost3_7_0_Check = true; - } else { - if (SystemFlags::VERBOSE_MODE_ENABLED) printf("In [%s::%s Line: %d]\n", extractFileFromDirectoryPath(__FILE__).c_str(), __FUNCTION__, __LINE__); - compatiblePost3_7_0_Check = true; - } - } - - if (compatiblePost3_7_0_Check == true) { - if (SystemFlags::VERBOSE_MODE_ENABLED) printf("In [%s::%s Line: %d]\n", extractFileFromDirectoryPath(__FILE__).c_str(), __FUNCTION__, __LINE__); - compatiblePre3_7_0_1_Check = false; - // only check the first 2 sections with . to compare major versions #'s - compatible = (tokens.size() >= 2 && tokensServer.size() >= 2); - - if (SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem, "In [%s::%s Line: %d] clientVersionString [%s], serverVersionString [%s] compatible [%d]\n", extractFileFromDirectoryPath(__FILE__).c_str(), __FUNCTION__, __LINE__, clientVersionString.c_str(), serverVersionString.c_str(), compatible); - - for (int i = 0; compatible == true && i < 2; ++i) { - if (SystemFlags::VERBOSE_MODE_ENABLED) printf("In [%s::%s Line: %d]\n", extractFileFromDirectoryPath(__FILE__).c_str(), __FUNCTION__, __LINE__); - - if (tokens[i] != tokensServer[i]) { - if (SystemFlags::VERBOSE_MODE_ENABLED) printf("In [%s::%s Line: %d] tokens[i] = [%s] tokensServer[i] = [%s]\n", extractFileFromDirectoryPath(__FILE__).c_str(), __FUNCTION__, __LINE__, tokens[i].c_str(), tokensServer[i].c_str()); - - compatible = false; - - if (SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem, "In [%s::%s Line: %d] tokens[i] = [%s], tokensServer[i] = [%s] compatible [%d]\n", extractFileFromDirectoryPath(__FILE__).c_str(), __FUNCTION__, __LINE__, tokens[i].c_str(), tokensServer[i].c_str(), compatible); - } - } - - } - } - } - - if (compatiblePre3_7_0_1_Check == true) { - if (SystemFlags::VERBOSE_MODE_ENABLED) printf("In [%s::%s Line: %d]\n", extractFileFromDirectoryPath(__FILE__).c_str(), __FUNCTION__, __LINE__); - // only check the first 3 sections with . to compare makor versions #'s - compatible = (tokens.size() >= 3 && tokensServer.size() >= 3); - - if (SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem, "In [%s::%s Line: %d] clientVersionString [%s], serverVersionString [%s] compatible [%d]\n", extractFileFromDirectoryPath(__FILE__).c_str(), __FUNCTION__, __LINE__, clientVersionString.c_str(), serverVersionString.c_str(), compatible); - - for (int i = 0; compatible == true && i < 3; ++i) { - if (tokens[i] != tokensServer[i]) { - compatible = false; - - if (SystemFlags::VERBOSE_MODE_ENABLED) printf("In [%s::%s Line: %d] tokens[i] = [%s], tokensServer[i] = [%s] compatible [%d]\n", extractFileFromDirectoryPath(__FILE__).c_str(), __FUNCTION__, __LINE__, tokens[i].c_str(), tokensServer[i].c_str(), compatible); - } - } - } - } - - if (SystemFlags::VERBOSE_MODE_ENABLED) printf("\n\n------> In [%s::%s Line: %d] compatible returning as: %d\n", extractFileFromDirectoryPath(__FILE__).c_str(), __FUNCTION__, __LINE__, compatible); - - //SystemFlags::VERBOSE_MODE_ENABLED = false; - return compatible; - } - } } //end namespace