Now tolerates different versions

This commit is contained in:
mathusummut
2018-11-11 18:28:29 +01:00
parent c524d35835
commit d4ba5cbf00
12 changed files with 50 additions and 281 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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,

View File

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

View File

@@ -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,

View File

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

View File

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

View File

@@ -244,6 +244,7 @@ namespace Shared {
vector<string> 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<typename T>
void enforceMinimumValue(T minValue, T &value) {

View File

@@ -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<string> tokens;
vector<string> 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<string> 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<string> 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