[Orxonox-commit 2632] r7337 - code/branches/network3/src/libraries/network/packet

scheusso at orxonox.net scheusso at orxonox.net
Fri Sep 3 15:46:22 CEST 2010


Author: scheusso
Date: 2010-09-03 15:46:21 +0200 (Fri, 03 Sep 2010)
New Revision: 7337

Modified:
   code/branches/network3/src/libraries/network/packet/Gamestate.cc
Log:
fix in gamestate diff


Modified: code/branches/network3/src/libraries/network/packet/Gamestate.cc
===================================================================
--- code/branches/network3/src/libraries/network/packet/Gamestate.cc	2010-09-03 13:45:59 UTC (rev 7336)
+++ code/branches/network3/src/libraries/network/packet/Gamestate.cc	2010-09-03 13:46:21 UTC (rev 7337)
@@ -509,6 +509,7 @@
     assert(baseData < baseDataEnd);
     assert(dest < newData + newDataSize);
     assert(sizes != this->sizes_.end());
+    bool diffedObject = false;
     while ( baseData < baseDataEnd )
     {
       SynchronisableHeader htemp(baseData);
@@ -518,6 +519,8 @@
         assert( h.getClassID() == htemp.getClassID() );
 //         goto DODIFF;
         diffObject(dest, origData, baseData, h, sizes);
+        diffedObject = true;
+        break;
       }
       {
         SynchronisableHeader htemp2(baseData+htemp.getDataSize()+SynchronisableHeader::getSize());
@@ -528,12 +531,13 @@
           assert(htemp2.isDiffed()==false);
         }
       }
+      baseData += htemp.getDataSize()+SynchronisableHeader::getSize();
 //       assert( baseData+htemp.getDataSize()+SynchronisableHeader::getSize() <=baseData+baseLength );
 //       temp += htemp.getDataSize()+SynchronisableHeader::getSize();
-        
+      
     }
     // If not found start looking at the beginning
-    assert( baseData == baseDataEnd );
+    assert( diffedObject || baseData == baseDataEnd );
     baseData = GAMESTATE_START(base->data_);
     {
       SynchronisableHeader htemp2(baseData);
@@ -544,7 +548,7 @@
         assert(htemp2.isDiffed()==false);
       }
     }
-    while ( baseData < baseDataEnd )
+    while ( !diffedObject && baseData < baseDataEnd )
     {
       SynchronisableHeader htemp(baseData);
       if ( htemp.getObjectID() == objectID )
@@ -573,8 +577,8 @@
       copyObject(dest, origData, baseData, h, sizes);
       assert(sizes != this->sizes_.end() || origData>=origDataEnd);
     }
-    
   }
+  assert(sizes==this->sizes_.end());
 
 
   Gamestate *g = new Gamestate(newData, getClientID());




More information about the Orxonox-commit mailing list