diff --git a/source/glest_game/network/connection_slot.cpp b/source/glest_game/network/connection_slot.cpp index 8eef0b23a..23e9661ac 100644 --- a/source/glest_game/network/connection_slot.cpp +++ b/source/glest_game/network/connection_slot.cpp @@ -464,17 +464,18 @@ void ConnectionSlot::update(bool checkForNewClients,int lockedSlotIndex) { //if(chrono.getMillis() > 1) printf("In [%s::%s Line: %d] action running for msecs: %lld\n",__FILE__,__FUNCTION__,__LINE__,(long long int)chrono.getMillis()); - this->clearChatInfo(); + //this->clearChatInfo(); - bool gotTextMsg = true; - for(;this->hasDataToRead() == true && gotTextMsg == true;) { + //bool gotTextMsg = true; + //for(;this->hasDataToRead() == true && gotTextMsg == true;) { + for(;this->hasDataToRead() == true;) { if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] polling for networkMessageType...\n",__FILE__,__FUNCTION__,__LINE__); - NetworkMessageType networkMessageType= getNextMessageType(); + NetworkMessageType networkMessageType= getNextMessageType(false); if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] networkMessageType = %d\n",__FILE__,__FUNCTION__,__LINE__,networkMessageType); - gotTextMsg = false; + //gotTextMsg = false; //process incoming commands switch(networkMessageType) { @@ -513,7 +514,7 @@ void ConnectionSlot::update(bool checkForNewClients,int lockedSlotIndex) { if(receiveMessage(&networkMessageText)) { ChatMsgInfo msg(networkMessageText.getText().c_str(),networkMessageText.getTeamIndex(),networkMessageText.getPlayerIndex(),networkMessageText.getTargetLanguage()); this->addChatInfo(msg); - gotTextMsg = true; + //gotTextMsg = true; } else { if(SystemFlags::getSystemSettingType(SystemFlags::debugError).enabled) SystemFlags::OutputDebug(SystemFlags::debugError,"In [%s::%s Line: %d]\nInvalid message type before intro handshake [%d]\nDisconnecting socket for slot: %d [%s].\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__,networkMessageType,this->playerIndex,this->getIpAddress().c_str()); diff --git a/source/glest_game/network/network_interface.cpp b/source/glest_game/network/network_interface.cpp index 8a2491256..b61fe166d 100644 --- a/source/glest_game/network/network_interface.cpp +++ b/source/glest_game/network/network_interface.cpp @@ -44,25 +44,33 @@ void NetworkInterface::sendMessage(const NetworkMessage* networkMessage){ networkMessage->send(socket); } -NetworkMessageType NetworkInterface::getNextMessageType() +NetworkMessageType NetworkInterface::getNextMessageType(bool checkHasData) { Socket* socket= getSocket(false); int8 messageType= nmtInvalid; - if(socket != NULL && - socket->hasDataToRead() == true) { + if(socket != NULL && (checkHasData == false || socket->hasDataToRead() == true)) { //peek message type - int dataSize = socket->getDataToRead(); - if(dataSize >= sizeof(messageType)) { - if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] socket->getDataToRead() dataSize = %d\n",__FILE__,__FUNCTION__,__LINE__,dataSize); + bool peekForMessageType = !checkHasData; + if(checkHasData == true) { + int dataSize = socket->getDataToRead(); + if(dataSize >= sizeof(messageType)) { + if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] socket->getDataToRead() dataSize = %d\n",__FILE__,__FUNCTION__,__LINE__,dataSize); + peekForMessageType = true; + //int iPeek = socket->peek(&messageType, sizeof(messageType)); - int iPeek = socket->peek(&messageType, sizeof(messageType)); + //if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] socket->getDataToRead() iPeek = %d, messageType = %d [size = %d]\n",__FILE__,__FUNCTION__,__LINE__,iPeek,messageType,sizeof(messageType)); + } + else { + if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] PEEK WARNING, socket->getDataToRead() messageType = %d [size = %d], dataSize = %d\n",__FILE__,__FUNCTION__,__LINE__,messageType,sizeof(messageType),dataSize); + } + } - if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] socket->getDataToRead() iPeek = %d, messageType = %d [size = %d]\n",__FILE__,__FUNCTION__,__LINE__,iPeek,messageType,sizeof(messageType)); - } - else { - if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] PEEK WARNING, socket->getDataToRead() messageType = %d [size = %d], dataSize = %d\n",__FILE__,__FUNCTION__,__LINE__,messageType,sizeof(messageType),dataSize); - } + if(peekForMessageType == true) { + int iPeek = socket->peek(&messageType, sizeof(messageType)); + + if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] socket->getDataToRead() iPeek = %d, messageType = %d [size = %d]\n",__FILE__,__FUNCTION__,__LINE__,iPeek,messageType,sizeof(messageType)); + } //sanity check new message type if(messageType < 0 || messageType >= nmtCount) { diff --git a/source/glest_game/network/network_interface.h b/source/glest_game/network/network_interface.h index 6928582ef..2b7937be3 100644 --- a/source/glest_game/network/network_interface.h +++ b/source/glest_game/network/network_interface.h @@ -120,7 +120,7 @@ public: string getHostName() const {return Socket::getHostName();} virtual void sendMessage(const NetworkMessage* networkMessage); - NetworkMessageType getNextMessageType(); + NetworkMessageType getNextMessageType(bool checkHasData=true); bool receiveMessage(NetworkMessage* networkMessage); virtual bool isConnected(); diff --git a/source/shared_lib/sources/graphics/particle.cpp b/source/shared_lib/sources/graphics/particle.cpp index 80def5d84..5e00f56b7 100644 --- a/source/shared_lib/sources/graphics/particle.cpp +++ b/source/shared_lib/sources/graphics/particle.cpp @@ -1214,7 +1214,7 @@ void ParticleManager::update(int renderFps){ vector cleanupParticleSystemsList; for(unsigned int i= 0; i < particleSystems.size(); i++){ ParticleSystem *ps= particleSystems[i]; - if(ps != NULL){ + if(ps != NULL && validateParticleSystemStillExists(ps) == true) { currentParticleCount+= ps->getAliveParticleCount(); bool showParticle= true;