[Orxonox-commit 3723] r8403 - code/trunk/src/libraries/network

scheusso at orxonox.net scheusso at orxonox.net
Thu May 5 16:02:40 CEST 2011


Author: scheusso
Date: 2011-05-05 16:02:40 +0200 (Thu, 05 May 2011)
New Revision: 8403

Modified:
   code/trunk/src/libraries/network/FunctionCallManager.cc
   code/trunk/src/libraries/network/Host.cc
   code/trunk/src/libraries/network/Host.h
Log:
fixing possible bug with packet ordering


Modified: code/trunk/src/libraries/network/FunctionCallManager.cc
===================================================================
--- code/trunk/src/libraries/network/FunctionCallManager.cc	2011-05-05 13:40:12 UTC (rev 8402)
+++ code/trunk/src/libraries/network/FunctionCallManager.cc	2011-05-05 14:02:40 UTC (rev 8403)
@@ -30,6 +30,8 @@
 #include "packet/FunctionCalls.h"
 #include "core/GameMode.h"
 #include "GamestateHandler.h"
+#include "Host.h"
+#include "util/OrxAssert.h"
 
 namespace orxonox {
 
@@ -174,7 +176,8 @@
   std::vector<std::pair<FunctionCall, std::pair<uint32_t, uint32_t> > >::iterator it = FunctionCallManager::sIncomingFunctionCallBuffer_.begin();
   while( it!=FunctionCallManager::sIncomingFunctionCallBuffer_.end() )
   {
-    if( it->first.execute() )
+    OrxAssert( Host::getActiveInstance(), "No Host class existing" );
+    if( it->second.first <= Host::getActiveInstance()->getLastReceivedGamestateID(it->second.second) && it->first.execute() )
       FunctionCallManager::sIncomingFunctionCallBuffer_.erase(it);
     else
     {

Modified: code/trunk/src/libraries/network/Host.cc
===================================================================
--- code/trunk/src/libraries/network/Host.cc	2011-05-05 13:40:12 UTC (rev 8402)
+++ code/trunk/src/libraries/network/Host.cc	2011-05-05 14:02:40 UTC (rev 8403)
@@ -160,5 +160,17 @@
     }
     return false;
   }
+  
+  Host* Host::getActiveInstance()
+  {
+    std::vector<Host*>::iterator it = Host::instances_s.begin();
+    while( it != Host::instances_s.end() )
+    {
+      if( (*it)->isActive() )
+        return *it;
+    }
+    return 0;
+  }
 
+
 }//namespace orxonox

Modified: code/trunk/src/libraries/network/Host.h
===================================================================
--- code/trunk/src/libraries/network/Host.h	2011-05-05 13:40:12 UTC (rev 8402)
+++ code/trunk/src/libraries/network/Host.h	2011-05-05 14:02:40 UTC (rev 8403)
@@ -70,7 +70,7 @@
 //     static Host *instance_;
 
   public:
-//     static Host* getInstance(){ return instance_; }
+    static Host* getActiveInstance();
     static bool running(){ return instances_s.size(); }
     static void addPacket(ENetPacket* packet, int clientID = NETWORK_PEER_ID_SERVER, uint8_t channelID = 0);
     //static bool chat(std::string& message);




More information about the Orxonox-commit mailing list