mirror of
https://github.com/glest/glest-source.git
synced 2025-08-29 02:40:17 +02:00
- attempt to protect a little against spurious network activity
This commit is contained in:
@@ -166,6 +166,7 @@ ConnectionSlot::ConnectionSlot(ServerInterface* serverInterface, int playerIndex
|
|||||||
|
|
||||||
this->ready = false;
|
this->ready = false;
|
||||||
this->gotIntro = false;
|
this->gotIntro = false;
|
||||||
|
this->connectedTime = 0;
|
||||||
|
|
||||||
networkGameDataSynchCheckOkMap = false;
|
networkGameDataSynchCheckOkMap = false;
|
||||||
networkGameDataSynchCheckOkTile = false;
|
networkGameDataSynchCheckOkTile = false;
|
||||||
@@ -222,9 +223,20 @@ void ConnectionSlot::update(bool checkForNewClients) {
|
|||||||
//send intro message when connected
|
//send intro message when connected
|
||||||
if(socket != NULL) {
|
if(socket != NULL) {
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s] accepted new client connection, serverInterface->getOpenSlotCount() = %d\n",__FILE__,__FUNCTION__,serverInterface->getOpenSlotCount());
|
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s] accepted new client connection, serverInterface->getOpenSlotCount() = %d\n",__FILE__,__FUNCTION__,serverInterface->getOpenSlotCount());
|
||||||
connectedTime = time(NULL);
|
this->connectedTime = time(NULL);
|
||||||
|
|
||||||
this->clearChatInfo();
|
this->clearChatInfo();
|
||||||
|
this->name = "";
|
||||||
|
this->ready = false;
|
||||||
|
this->vctFileList.clear();
|
||||||
|
this->receivedNetworkGameStatus = false;
|
||||||
|
this->gotIntro = false;
|
||||||
|
this->vctPendingNetworkCommandList.clear();
|
||||||
|
this->currentFrameCount = 0;
|
||||||
|
this->currentLagCount = 0;
|
||||||
|
this->lastReceiveCommandListTime = 0;
|
||||||
|
this->gotLagCountWarning = false;
|
||||||
|
this->versionString = "";
|
||||||
|
|
||||||
|
|
||||||
if(hasOpenSlots == false) {
|
if(hasOpenSlots == false) {
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s] no open slots, disconnecting client\n",__FILE__,__FUNCTION__);
|
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s] no open slots, disconnecting client\n",__FILE__,__FUNCTION__);
|
||||||
@@ -269,11 +281,15 @@ void ConnectionSlot::update(bool checkForNewClients) {
|
|||||||
{
|
{
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s] got nmtPing\n",__FILE__,__FUNCTION__);
|
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s] got nmtPing\n",__FILE__,__FUNCTION__);
|
||||||
|
|
||||||
NetworkMessagePing networkMessagePing;
|
// client REQUIRES a ping before completing intro
|
||||||
if(receiveMessage(&networkMessagePing)) {
|
// authentication
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
//if(gotIntro == true) {
|
||||||
lastPingInfo = networkMessagePing;
|
NetworkMessagePing networkMessagePing;
|
||||||
}
|
if(receiveMessage(&networkMessagePing)) {
|
||||||
|
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
lastPingInfo = networkMessagePing;
|
||||||
|
}
|
||||||
|
//}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -281,13 +297,15 @@ void ConnectionSlot::update(bool checkForNewClients) {
|
|||||||
{
|
{
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s] got nmtText\n",__FILE__,__FUNCTION__);
|
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s] got nmtText\n",__FILE__,__FUNCTION__);
|
||||||
|
|
||||||
NetworkMessageText networkMessageText;
|
if(gotIntro == true) {
|
||||||
if(receiveMessage(&networkMessageText)) {
|
NetworkMessageText networkMessageText;
|
||||||
ChatMsgInfo msg(networkMessageText.getText().c_str(),networkMessageText.getSender().c_str(),networkMessageText.getTeamIndex());
|
if(receiveMessage(&networkMessageText)) {
|
||||||
this->addChatInfo(msg);
|
ChatMsgInfo msg(networkMessageText.getText().c_str(),networkMessageText.getSender().c_str(),networkMessageText.getTeamIndex());
|
||||||
gotTextMsg = true;
|
this->addChatInfo(msg);
|
||||||
|
gotTextMsg = true;
|
||||||
|
|
||||||
//SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] chatText [%s] chatSender [%s] chatTeamIndex = %d\n",__FILE__,__FUNCTION__,__LINE__,chatText.c_str(),chatSender.c_str(),chatTeamIndex);
|
//SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] chatText [%s] chatSender [%s] chatTeamIndex = %d\n",__FILE__,__FUNCTION__,__LINE__,chatText.c_str(),chatSender.c_str(),chatTeamIndex);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -299,15 +317,17 @@ void ConnectionSlot::update(bool checkForNewClients) {
|
|||||||
|
|
||||||
//throw runtime_error("test");
|
//throw runtime_error("test");
|
||||||
|
|
||||||
NetworkMessageCommandList networkMessageCommandList;
|
if(gotIntro == true) {
|
||||||
if(receiveMessage(&networkMessageCommandList)) {
|
NetworkMessageCommandList networkMessageCommandList;
|
||||||
currentFrameCount = networkMessageCommandList.getFrameCount();
|
if(receiveMessage(&networkMessageCommandList)) {
|
||||||
lastReceiveCommandListTime = time(NULL);
|
currentFrameCount = networkMessageCommandList.getFrameCount();
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] currentFrameCount = %d\n",__FILE__,__FUNCTION__,__LINE__,currentFrameCount);
|
lastReceiveCommandListTime = time(NULL);
|
||||||
|
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] currentFrameCount = %d\n",__FILE__,__FUNCTION__,__LINE__,currentFrameCount);
|
||||||
|
|
||||||
for(int i= 0; i<networkMessageCommandList.getCommandCount(); ++i) {
|
for(int i= 0; i<networkMessageCommandList.getCommandCount(); ++i) {
|
||||||
//serverInterface->requestCommand(networkMessageCommandList.getCommand(i));
|
//serverInterface->requestCommand(networkMessageCommandList.getCommand(i));
|
||||||
vctPendingNetworkCommandList.push_back(*networkMessageCommandList.getCommand(i));
|
vctPendingNetworkCommandList.push_back(*networkMessageCommandList.getCommand(i));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -343,93 +363,95 @@ void ConnectionSlot::update(bool checkForNewClients) {
|
|||||||
{
|
{
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s] got nmtSynchNetworkGameDataStatus\n",__FILE__,__FUNCTION__);
|
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s] got nmtSynchNetworkGameDataStatus\n",__FILE__,__FUNCTION__);
|
||||||
|
|
||||||
NetworkMessageSynchNetworkGameDataStatus networkMessageSynchNetworkGameDataStatus;
|
if(gotIntro == true) {
|
||||||
if(receiveMessage(&networkMessageSynchNetworkGameDataStatus))
|
NetworkMessageSynchNetworkGameDataStatus networkMessageSynchNetworkGameDataStatus;
|
||||||
{
|
if(receiveMessage(&networkMessageSynchNetworkGameDataStatus))
|
||||||
receivedNetworkGameStatus = true;
|
{
|
||||||
|
receivedNetworkGameStatus = true;
|
||||||
|
|
||||||
Config &config = Config::getInstance();
|
Config &config = Config::getInstance();
|
||||||
string scenarioDir = "";
|
string scenarioDir = "";
|
||||||
if(serverInterface->getGameSettings()->getScenarioDir() != "") {
|
if(serverInterface->getGameSettings()->getScenarioDir() != "") {
|
||||||
scenarioDir = serverInterface->getGameSettings()->getScenarioDir();
|
scenarioDir = serverInterface->getGameSettings()->getScenarioDir();
|
||||||
if(EndsWith(scenarioDir, ".xml") == true) {
|
if(EndsWith(scenarioDir, ".xml") == true) {
|
||||||
scenarioDir = scenarioDir.erase(scenarioDir.size() - 4, 4);
|
scenarioDir = scenarioDir.erase(scenarioDir.size() - 4, 4);
|
||||||
scenarioDir = scenarioDir.erase(scenarioDir.size() - serverInterface->getGameSettings()->getScenario().size(), serverInterface->getGameSettings()->getScenario().size() + 1);
|
scenarioDir = scenarioDir.erase(scenarioDir.size() - serverInterface->getGameSettings()->getScenario().size(), serverInterface->getGameSettings()->getScenario().size() + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] gameSettings.getScenarioDir() = [%s] gameSettings.getScenario() = [%s] scenarioDir = [%s]\n",__FILE__,__FUNCTION__,__LINE__,serverInterface->getGameSettings()->getScenarioDir().c_str(),serverInterface->getGameSettings()->getScenario().c_str(),scenarioDir.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] gameSettings.getScenarioDir() = [%s] gameSettings.getScenario() = [%s] scenarioDir = [%s]\n",__FILE__,__FUNCTION__,__LINE__,serverInterface->getGameSettings()->getScenarioDir().c_str(),serverInterface->getGameSettings()->getScenario().c_str(),scenarioDir.c_str());
|
//tileset
|
||||||
}
|
int32 tilesetCRC = getFolderTreeContentsCheckSumRecursively(config.getPathListForType(ptTilesets,scenarioDir), string("/") + serverInterface->getGameSettings()->getTileset() + string("/*"), ".xml", NULL);
|
||||||
|
int32 techCRC = getFolderTreeContentsCheckSumRecursively(config.getPathListForType(ptTechs,scenarioDir), "/" + serverInterface->getGameSettings()->getTech() + "/*", ".xml", NULL);
|
||||||
|
Checksum checksum;
|
||||||
|
string file = Map::getMapPath(serverInterface->getGameSettings()->getMap(),scenarioDir);
|
||||||
|
checksum.addFile(file);
|
||||||
|
int32 mapCRC = checksum.getSum();
|
||||||
|
|
||||||
//tileset
|
networkGameDataSynchCheckOkMap = (networkMessageSynchNetworkGameDataStatus.getMapCRC() == mapCRC);
|
||||||
int32 tilesetCRC = getFolderTreeContentsCheckSumRecursively(config.getPathListForType(ptTilesets,scenarioDir), string("/") + serverInterface->getGameSettings()->getTileset() + string("/*"), ".xml", NULL);
|
networkGameDataSynchCheckOkTile = (networkMessageSynchNetworkGameDataStatus.getTilesetCRC() == tilesetCRC);
|
||||||
int32 techCRC = getFolderTreeContentsCheckSumRecursively(config.getPathListForType(ptTechs,scenarioDir), "/" + serverInterface->getGameSettings()->getTech() + "/*", ".xml", NULL);
|
networkGameDataSynchCheckOkTech = (networkMessageSynchNetworkGameDataStatus.getTechCRC() == techCRC);
|
||||||
Checksum checksum;
|
|
||||||
string file = Map::getMapPath(serverInterface->getGameSettings()->getMap(),scenarioDir);
|
|
||||||
checksum.addFile(file);
|
|
||||||
int32 mapCRC = checksum.getSum();
|
|
||||||
|
|
||||||
networkGameDataSynchCheckOkMap = (networkMessageSynchNetworkGameDataStatus.getMapCRC() == mapCRC);
|
// For testing
|
||||||
networkGameDataSynchCheckOkTile = (networkMessageSynchNetworkGameDataStatus.getTilesetCRC() == tilesetCRC);
|
//techCRC++;
|
||||||
networkGameDataSynchCheckOkTech = (networkMessageSynchNetworkGameDataStatus.getTechCRC() == techCRC);
|
|
||||||
|
|
||||||
// For testing
|
if( networkGameDataSynchCheckOkMap == true &&
|
||||||
//techCRC++;
|
networkGameDataSynchCheckOkTile == true &&
|
||||||
|
networkGameDataSynchCheckOkTech == true) {
|
||||||
|
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s] client data synch ok\n",__FILE__,__FUNCTION__);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s] mapCRC = %d, remote = %d\n",__FILE__,__FUNCTION__,mapCRC,networkMessageSynchNetworkGameDataStatus.getMapCRC());
|
||||||
|
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s] tilesetCRC = %d, remote = %d\n",__FILE__,__FUNCTION__,tilesetCRC,networkMessageSynchNetworkGameDataStatus.getTilesetCRC());
|
||||||
|
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s] techCRC = %d, remote = %d\n",__FILE__,__FUNCTION__,techCRC,networkMessageSynchNetworkGameDataStatus.getTechCRC());
|
||||||
|
|
||||||
if( networkGameDataSynchCheckOkMap == true &&
|
if(allowDownloadDataSynch == true) {
|
||||||
networkGameDataSynchCheckOkTile == true &&
|
// Now get all filenames with their CRC values and send to the client
|
||||||
networkGameDataSynchCheckOkTech == true) {
|
vctFileList.clear();
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s] client data synch ok\n",__FILE__,__FUNCTION__);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s] mapCRC = %d, remote = %d\n",__FILE__,__FUNCTION__,mapCRC,networkMessageSynchNetworkGameDataStatus.getMapCRC());
|
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s] tilesetCRC = %d, remote = %d\n",__FILE__,__FUNCTION__,tilesetCRC,networkMessageSynchNetworkGameDataStatus.getTilesetCRC());
|
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s] techCRC = %d, remote = %d\n",__FILE__,__FUNCTION__,techCRC,networkMessageSynchNetworkGameDataStatus.getTechCRC());
|
|
||||||
|
|
||||||
if(allowDownloadDataSynch == true) {
|
Config &config = Config::getInstance();
|
||||||
// Now get all filenames with their CRC values and send to the client
|
string scenarioDir = "";
|
||||||
vctFileList.clear();
|
if(serverInterface->getGameSettings()->getScenarioDir() != "") {
|
||||||
|
scenarioDir = serverInterface->getGameSettings()->getScenarioDir();
|
||||||
|
if(EndsWith(scenarioDir, ".xml") == true) {
|
||||||
|
scenarioDir = scenarioDir.erase(scenarioDir.size() - 4, 4);
|
||||||
|
scenarioDir = scenarioDir.erase(scenarioDir.size() - serverInterface->getGameSettings()->getScenario().size(), serverInterface->getGameSettings()->getScenario().size() + 1);
|
||||||
|
}
|
||||||
|
|
||||||
Config &config = Config::getInstance();
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] gameSettings.getScenarioDir() = [%s] gameSettings.getScenario() = [%s] scenarioDir = [%s]\n",__FILE__,__FUNCTION__,__LINE__,serverInterface->getGameSettings()->getScenarioDir().c_str(),serverInterface->getGameSettings()->getScenario().c_str(),scenarioDir.c_str());
|
||||||
string scenarioDir = "";
|
|
||||||
if(serverInterface->getGameSettings()->getScenarioDir() != "") {
|
|
||||||
scenarioDir = serverInterface->getGameSettings()->getScenarioDir();
|
|
||||||
if(EndsWith(scenarioDir, ".xml") == true) {
|
|
||||||
scenarioDir = scenarioDir.erase(scenarioDir.size() - 4, 4);
|
|
||||||
scenarioDir = scenarioDir.erase(scenarioDir.size() - serverInterface->getGameSettings()->getScenario().size(), serverInterface->getGameSettings()->getScenario().size() + 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] gameSettings.getScenarioDir() = [%s] gameSettings.getScenario() = [%s] scenarioDir = [%s]\n",__FILE__,__FUNCTION__,__LINE__,serverInterface->getGameSettings()->getScenarioDir().c_str(),serverInterface->getGameSettings()->getScenario().c_str(),scenarioDir.c_str());
|
if(networkGameDataSynchCheckOkTile == false) {
|
||||||
|
if(tilesetCRC == 0) {
|
||||||
|
//vctFileList = getFolderTreeContentsCheckSumListRecursively(string(GameConstants::folder_path_tilesets) + "/" + serverInterface->getGameSettings()->getTileset() + "/*", "", &vctFileList);
|
||||||
|
vctFileList = getFolderTreeContentsCheckSumListRecursively(config.getPathListForType(ptTilesets,scenarioDir), string("/") + serverInterface->getGameSettings()->getTileset() + string("/*"), "", &vctFileList);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
//vctFileList = getFolderTreeContentsCheckSumListRecursively(string(GameConstants::folder_path_tilesets) + "/" + serverInterface->getGameSettings()->getTileset() + "/*", ".xml", &vctFileList);
|
||||||
|
vctFileList = getFolderTreeContentsCheckSumListRecursively(config.getPathListForType(ptTilesets,scenarioDir), "/" + serverInterface->getGameSettings()->getTileset() + "/*", ".xml", &vctFileList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(networkGameDataSynchCheckOkTech == false) {
|
||||||
|
if(techCRC == 0) {
|
||||||
|
//vctFileList = getFolderTreeContentsCheckSumListRecursively(string(GameConstants::folder_path_techs) + "/" + serverInterface->getGameSettings()->getTech() + "/*", "", &vctFileList);
|
||||||
|
vctFileList = getFolderTreeContentsCheckSumListRecursively(config.getPathListForType(ptTechs,scenarioDir),"/" + serverInterface->getGameSettings()->getTech() + "/*", "", &vctFileList);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
//vctFileList = getFolderTreeContentsCheckSumListRecursively(string(GameConstants::folder_path_techs) + "/" + serverInterface->getGameSettings()->getTech() + "/*", ".xml", &vctFileList);
|
||||||
|
vctFileList = getFolderTreeContentsCheckSumListRecursively(config.getPathListForType(ptTechs,scenarioDir),"/" + serverInterface->getGameSettings()->getTech() + "/*", ".xml", &vctFileList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(networkGameDataSynchCheckOkMap == false) {
|
||||||
|
vctFileList.push_back(std::pair<string,int32>(Map::getMapPath(serverInterface->getGameSettings()->getMap(),scenarioDir),mapCRC));
|
||||||
|
}
|
||||||
|
|
||||||
|
//for(int i = 0; i < vctFileList.size(); i++)
|
||||||
|
//{
|
||||||
|
NetworkMessageSynchNetworkGameDataFileCRCCheck networkMessageSynchNetworkGameDataFileCRCCheck(vctFileList.size(), 1, vctFileList[0].second, vctFileList[0].first);
|
||||||
|
sendMessage(&networkMessageSynchNetworkGameDataFileCRCCheck);
|
||||||
|
//}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(networkGameDataSynchCheckOkTile == false) {
|
|
||||||
if(tilesetCRC == 0) {
|
|
||||||
//vctFileList = getFolderTreeContentsCheckSumListRecursively(string(GameConstants::folder_path_tilesets) + "/" + serverInterface->getGameSettings()->getTileset() + "/*", "", &vctFileList);
|
|
||||||
vctFileList = getFolderTreeContentsCheckSumListRecursively(config.getPathListForType(ptTilesets,scenarioDir), string("/") + serverInterface->getGameSettings()->getTileset() + string("/*"), "", &vctFileList);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
//vctFileList = getFolderTreeContentsCheckSumListRecursively(string(GameConstants::folder_path_tilesets) + "/" + serverInterface->getGameSettings()->getTileset() + "/*", ".xml", &vctFileList);
|
|
||||||
vctFileList = getFolderTreeContentsCheckSumListRecursively(config.getPathListForType(ptTilesets,scenarioDir), "/" + serverInterface->getGameSettings()->getTileset() + "/*", ".xml", &vctFileList);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(networkGameDataSynchCheckOkTech == false) {
|
|
||||||
if(techCRC == 0) {
|
|
||||||
//vctFileList = getFolderTreeContentsCheckSumListRecursively(string(GameConstants::folder_path_techs) + "/" + serverInterface->getGameSettings()->getTech() + "/*", "", &vctFileList);
|
|
||||||
vctFileList = getFolderTreeContentsCheckSumListRecursively(config.getPathListForType(ptTechs,scenarioDir),"/" + serverInterface->getGameSettings()->getTech() + "/*", "", &vctFileList);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
//vctFileList = getFolderTreeContentsCheckSumListRecursively(string(GameConstants::folder_path_techs) + "/" + serverInterface->getGameSettings()->getTech() + "/*", ".xml", &vctFileList);
|
|
||||||
vctFileList = getFolderTreeContentsCheckSumListRecursively(config.getPathListForType(ptTechs,scenarioDir),"/" + serverInterface->getGameSettings()->getTech() + "/*", ".xml", &vctFileList);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(networkGameDataSynchCheckOkMap == false) {
|
|
||||||
vctFileList.push_back(std::pair<string,int32>(Map::getMapPath(serverInterface->getGameSettings()->getMap(),scenarioDir),mapCRC));
|
|
||||||
}
|
|
||||||
|
|
||||||
//for(int i = 0; i < vctFileList.size(); i++)
|
|
||||||
//{
|
|
||||||
NetworkMessageSynchNetworkGameDataFileCRCCheck networkMessageSynchNetworkGameDataFileCRCCheck(vctFileList.size(), 1, vctFileList[0].second, vctFileList[0].first);
|
|
||||||
sendMessage(&networkMessageSynchNetworkGameDataFileCRCCheck);
|
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -441,12 +463,14 @@ void ConnectionSlot::update(bool checkForNewClients) {
|
|||||||
|
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s] got nmtSynchNetworkGameDataFileCRCCheck\n",__FILE__,__FUNCTION__);
|
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s] got nmtSynchNetworkGameDataFileCRCCheck\n",__FILE__,__FUNCTION__);
|
||||||
|
|
||||||
NetworkMessageSynchNetworkGameDataFileCRCCheck networkMessageSynchNetworkGameDataFileCRCCheck;
|
if(gotIntro == true) {
|
||||||
if(receiveMessage(&networkMessageSynchNetworkGameDataFileCRCCheck))
|
NetworkMessageSynchNetworkGameDataFileCRCCheck networkMessageSynchNetworkGameDataFileCRCCheck;
|
||||||
{
|
if(receiveMessage(&networkMessageSynchNetworkGameDataFileCRCCheck))
|
||||||
int fileIndex = networkMessageSynchNetworkGameDataFileCRCCheck.getFileIndex();
|
{
|
||||||
NetworkMessageSynchNetworkGameDataFileCRCCheck networkMessageSynchNetworkGameDataFileCRCCheck(vctFileList.size(), fileIndex, vctFileList[fileIndex-1].second, vctFileList[fileIndex-1].first);
|
int fileIndex = networkMessageSynchNetworkGameDataFileCRCCheck.getFileIndex();
|
||||||
sendMessage(&networkMessageSynchNetworkGameDataFileCRCCheck);
|
NetworkMessageSynchNetworkGameDataFileCRCCheck networkMessageSynchNetworkGameDataFileCRCCheck(vctFileList.size(), fileIndex, vctFileList[fileIndex-1].second, vctFileList[fileIndex-1].first);
|
||||||
|
sendMessage(&networkMessageSynchNetworkGameDataFileCRCCheck);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -456,33 +480,37 @@ void ConnectionSlot::update(bool checkForNewClients) {
|
|||||||
|
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s] got nmtSynchNetworkGameDataFileGet\n",__FILE__,__FUNCTION__);
|
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s] got nmtSynchNetworkGameDataFileGet\n",__FILE__,__FUNCTION__);
|
||||||
|
|
||||||
NetworkMessageSynchNetworkGameDataFileGet networkMessageSynchNetworkGameDataFileGet;
|
if(gotIntro == true) {
|
||||||
if(receiveMessage(&networkMessageSynchNetworkGameDataFileGet)) {
|
NetworkMessageSynchNetworkGameDataFileGet networkMessageSynchNetworkGameDataFileGet;
|
||||||
FileTransferInfo fileInfo;
|
if(receiveMessage(&networkMessageSynchNetworkGameDataFileGet)) {
|
||||||
fileInfo.hostType = eServer;
|
FileTransferInfo fileInfo;
|
||||||
//fileInfo.serverIP = this->ip.getString();
|
fileInfo.hostType = eServer;
|
||||||
fileInfo.serverPort = Config::getInstance().getInt("ServerPort",intToStr(GameConstants::serverPort).c_str());
|
//fileInfo.serverIP = this->ip.getString();
|
||||||
fileInfo.fileName = networkMessageSynchNetworkGameDataFileGet.getFileName();
|
fileInfo.serverPort = Config::getInstance().getInt("ServerPort",intToStr(GameConstants::serverPort).c_str());
|
||||||
|
fileInfo.fileName = networkMessageSynchNetworkGameDataFileGet.getFileName();
|
||||||
|
|
||||||
FileTransferSocketThread *fileXferThread = new FileTransferSocketThread(fileInfo);
|
FileTransferSocketThread *fileXferThread = new FileTransferSocketThread(fileInfo);
|
||||||
fileXferThread->start();
|
fileXferThread->start();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case nmtSwitchSetupRequest:
|
case nmtSwitchSetupRequest:
|
||||||
{
|
{
|
||||||
SwitchSetupRequest switchSetupRequest;
|
if(gotIntro == true) {
|
||||||
if(receiveMessage(&switchSetupRequest)) {
|
SwitchSetupRequest switchSetupRequest;
|
||||||
Mutex *mutex = getServerSynchAccessor();
|
if(receiveMessage(&switchSetupRequest)) {
|
||||||
if(mutex != NULL) mutex->p();
|
Mutex *mutex = getServerSynchAccessor();
|
||||||
|
if(mutex != NULL) mutex->p();
|
||||||
|
|
||||||
if(serverInterface->getSwitchSetupRequests()[switchSetupRequest.getCurrentFactionIndex()]==NULL) {
|
if(serverInterface->getSwitchSetupRequests()[switchSetupRequest.getCurrentFactionIndex()]==NULL) {
|
||||||
serverInterface->getSwitchSetupRequests()[switchSetupRequest.getCurrentFactionIndex()]= new SwitchSetupRequest();
|
serverInterface->getSwitchSetupRequests()[switchSetupRequest.getCurrentFactionIndex()]= new SwitchSetupRequest();
|
||||||
|
}
|
||||||
|
*(serverInterface->getSwitchSetupRequests()[switchSetupRequest.getCurrentFactionIndex()])=switchSetupRequest;
|
||||||
|
|
||||||
|
if(mutex != NULL) mutex->v();
|
||||||
}
|
}
|
||||||
*(serverInterface->getSwitchSetupRequests()[switchSetupRequest.getCurrentFactionIndex()])=switchSetupRequest;
|
|
||||||
|
|
||||||
if(mutex != NULL) mutex->v();
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -511,10 +539,7 @@ void ConnectionSlot::update(bool checkForNewClients) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(gotIntro == false && difftime(time(NULL),connectedTime) > GameConstants::maxClientConnectHandshakeSecs) {
|
validateConnection();
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] difftime(time(NULL),connectedTime) = %f\n",__FILE__,__FUNCTION__,__LINE__,difftime(time(NULL),connectedTime));
|
|
||||||
close();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] calling close...\n",__FILE__,__FUNCTION__,__LINE__);
|
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] calling close...\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
@@ -532,6 +557,14 @@ void ConnectionSlot::update(bool checkForNewClients) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ConnectionSlot::validateConnection() {
|
||||||
|
if(gotIntro == false && connectedTime > 0 &&
|
||||||
|
difftime(time(NULL),connectedTime) > GameConstants::maxClientConnectHandshakeSecs) {
|
||||||
|
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] difftime(time(NULL),connectedTime) = %f\n",__FILE__,__FUNCTION__,__LINE__,difftime(time(NULL),connectedTime));
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ConnectionSlot::close() {
|
void ConnectionSlot::close() {
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s LINE: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s LINE: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
|
||||||
|
@@ -157,6 +157,8 @@ public:
|
|||||||
|
|
||||||
const string &getVersionString() const {return versionString;}
|
const string &getVersionString() const {return versionString;}
|
||||||
|
|
||||||
|
void validateConnection();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
Mutex * getServerSynchAccessor();
|
Mutex * getServerSynchAccessor();
|
||||||
|
@@ -415,11 +415,27 @@ void ServerInterface::updateSocketTriggeredList(std::map<PLATFORM_SOCKET,bool> &
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ServerInterface::validateConnectedClients() {
|
||||||
|
for(int i= 0; i<GameConstants::maxPlayers; ++i) {
|
||||||
|
ConnectionSlot* connectionSlot = slots[i];
|
||||||
|
|
||||||
|
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] Slot # %d\n",__FILE__,__FUNCTION__,__LINE__,i);
|
||||||
|
|
||||||
|
if(connectionSlot != NULL) {
|
||||||
|
connectionSlot->validateConnection();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ServerInterface::update() {
|
void ServerInterface::update() {
|
||||||
//SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s] Line: %d\n",__FILE__,__FUNCTION__,__LINE__);
|
//SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s] Line: %d\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
|
||||||
std::vector<string> errorMsgList;
|
std::vector<string> errorMsgList;
|
||||||
try {
|
try {
|
||||||
|
// The first thing we will do is check all clients to ensure they have
|
||||||
|
// properly identified themselves within the alloted time period
|
||||||
|
validateConnectedClients();
|
||||||
|
|
||||||
std::map<PLATFORM_SOCKET,bool> socketTriggeredList;
|
std::map<PLATFORM_SOCKET,bool> socketTriggeredList;
|
||||||
//update all slots
|
//update all slots
|
||||||
updateSocketTriggeredList(socketTriggeredList);
|
updateSocketTriggeredList(socketTriggeredList);
|
||||||
|
@@ -105,6 +105,7 @@ private:
|
|||||||
void broadcastMessageToConnectedClients(const NetworkMessage* networkMessage, int excludeSlot = -1);
|
void broadcastMessageToConnectedClients(const NetworkMessage* networkMessage, int excludeSlot = -1);
|
||||||
bool shouldDiscardNetworkMessage(NetworkMessageType networkMessageType,ConnectionSlot* connectionSlot);
|
bool shouldDiscardNetworkMessage(NetworkMessageType networkMessageType,ConnectionSlot* connectionSlot);
|
||||||
void updateSlot(ConnectionSlotEvent *event);
|
void updateSlot(ConnectionSlotEvent *event);
|
||||||
|
void validateConnectedClients();
|
||||||
};
|
};
|
||||||
|
|
||||||
}}//end namespace
|
}}//end namespace
|
||||||
|
Reference in New Issue
Block a user