Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Dec 14, 2010, 8:54:00 PM (15 years ago)
Author:
scheusso
Message:

a lot of changes:

  • some fixes (mostly gamestate:diff)
  • FunctionCall buffering (if Gamestate is not recent enough)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/network5/src/libraries/network/packet/Gamestate.cc

    r7758 r7759  
    4343#define GAMESTATE_START(data) (data + GamestateHeader::getSize())
    4444
    45 #define PACKET_FLAG_GAMESTATE  0 //PacketFlag::Reliable
     45// #define PACKET_FLAG_GAMESTATE  PacketFlag::Unsequenced
     46// #define PACKET_FLAG_GAMESTATE  0
     47#define PACKET_FLAG_GAMESTATE  PacketFlag::Reliable
    4648
    4749inline bool memzero( uint8_t* data, uint32_t datalength)
     
    364366inline void /*Gamestate::*/diffObject( uint8_t*& newDataPtr, uint8_t*& origDataPtr, uint8_t*& baseDataPtr, SynchronisableHeader& objectHeader, std::vector<uint32_t>::iterator& sizes )
    365367{
    366   //       COUT(4) << "dodiff" << endl;
    367   //       if(baseOffset==0)
    368   //       {
    369   //         assert(origOffset==0);
    370   //       }
    371368  assert( objectHeader.getDataSize() == SynchronisableHeader(baseDataPtr).getDataSize() );
    372369 
     
    382379  else
    383380  {
    384     //         if( Synchronisable::getSynchronisable(origHeader.getObjectID())->getIdentifier()->getName() == "Bot" )
    385     //           COUT(0) << "blub" << endl;
    386     //         COUT(4) << "object diff: " << Synchronisable::getSynchronisable(h.getObjectID())->getIdentifier()->getName() << endl;
    387     //         COUT(4) << "diff " << h.getObjectID() << ":";
    388381    // Now start to diff the Object
    389382    SynchronisableHeaderLight newObjectHeader(newDataPtr);
     
    396389      // check whether variable changed and write id and copy over variable to the new stream
    397390      // otherwise skip variable
    398 //       assert(sizes != this->sizes_.end());
    399391      uint32_t varSize = *sizes;
    400392      assert( varSize == Synchronisable::getSynchronisable(objectHeader.getObjectID())->getVarSize(variableID) );
     
    403395        if ( memcmp(origDataPtr+objectOffset, baseDataPtr+objectOffset, varSize) != 0 )
    404396        {
    405           //               COUT(4) << "copy variable" << endl;
    406397          *(VariableID*)(newDataPtr+diffedObjectOffset) = variableID; // copy over the variableID
    407398          diffedObjectOffset += sizeof(VariableID);
     
    412403        else
    413404        {
    414           //               COUT(4) << "skip variable" << endl;
    415405          objectOffset += varSize;
    416406        }
    417407      }
    418 //           else
    419 //             COUT(4) << "varsize 0" << endl;
    420408
    421409      ++variableID;
    422410      ++sizes;
    423411    }
    424            
     412   
     413    // if there are variables from this object with 0 size left in sizes
    425414    if( Synchronisable::getSynchronisable(objectHeader.getObjectID())->getNrOfVariables() != variableID )
    426415      sizes += Synchronisable::getSynchronisable(objectHeader.getObjectID())->getNrOfVariables() - variableID;
    427     //         COUT(4) << endl;
    428416   
    429417    newObjectHeader.setDiffed(true);
     
    431419    assert(objectOffset == objectHeader.getDataSize()+SynchronisableHeader::getSize());
    432420    assert(newObjectHeader.getDataSize()>0);
     421   
    433422    origDataPtr += objectOffset;
    434     //         baseOffset += temp + h.getDataSize()+SynchronisableHeader::getSize() - baseData;
    435     //baseOffset += objectOffset;
    436     //         SynchronisableHeader htemp(temp);
    437     //         baseOffset += SynchronisableHeader::getSize() + htemp.getDataSize();
    438     //         {
    439       //           SynchronisableHeader htemp2( baseData+(temp-baseData+objectOffset) );
    440     //           if( baseData+(temp-baseData+objectOffset) < baseData+baseLength )
    441     //           {
    442       //             assert(htemp2.getClassID()<500);
    443     //             assert(htemp2.getDataSize()!=0 && htemp2.getDataSize()<1000);
    444     //             assert(htemp2.isDiffed()==false);
    445     //           }
    446     //         }
    447423    baseDataPtr += objectOffset;
    448424    newDataPtr += diffedObjectOffset;
     
    455431  // Just copy over the whole Object
    456432  memcpy( newData, origData, objectHeader.getDataSize()+SynchronisableHeader::getSize() );
     433  SynchronisableHeader(newData).setDiffed(false);
     434 
    457435  newData += objectHeader.getDataSize()+SynchronisableHeader::getSize();
    458436  origData += objectHeader.getDataSize()+SynchronisableHeader::getSize();
     
    547525    assert(sizesIt != this->sizes_.end());
    548526   
     527    assert(Synchronisable::getSynchronisable(origHeader.getObjectID()));
     528    assert(ClassByID(origHeader.getClassID()));
     529    assert(origHeader.getDataSize() < 500);
     530   
    549531    bool diffedObject = false;
    550532    if( findObject(baseDataPtr, baseDataEnd, origHeader) )
    551533    {
     534      SynchronisableHeader baseHeader(baseDataPtr);
     535      assert(Synchronisable::getSynchronisable(baseHeader.getObjectID()));
     536      assert(ClassByID(baseHeader.getClassID()));
     537      assert(baseHeader.getDataSize() < 500);
    552538      if( SynchronisableHeader(baseDataPtr).getDataSize()==origHeader.getDataSize() )
    553539      {
     
    570556      if( findObject(baseDataPtr, oldBaseDataPtr, origHeader) )
    571557      {
     558        SynchronisableHeader baseHeader(baseDataPtr);
     559        assert(Synchronisable::getSynchronisable(baseHeader.getObjectID()));
     560        assert(ClassByID(baseHeader.getClassID()));
     561        assert(baseHeader.getDataSize() < 500);
    572562        if( SynchronisableHeader(baseDataPtr).getDataSize()==origHeader.getDataSize() )
    573563        {
Note: See TracChangeset for help on using the changeset viewer.