Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Jan 17, 2010, 11:49:48 AM (14 years ago)
Author:
scheusso
Message:

changed diff behaviour in order to reduce datasize before and after compress
this reduces time needed for gamestate diff and compress about 50%

File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/network2/src/libraries/network/GamestateManager.cc

    r6417 r6449  
    4343#include <cassert>
    4444#include <queue>
     45#include "util/Clock.h"
    4546// #include <boost/thread/mutex.hpp>
    4647
     
    158159
    159160      clientGamestates.push(0);
    160       finishGamestate( cid, &clientGamestates.back(), client, reference );
     161      finishGamestate( cid, clientGamestates.back(), client, reference );
    161162      //FunctorMember<GamestateManager>* functor =
    162163//       ExecutorMember<GamestateManager>* executor = createExecutor( createFunctor(&GamestateManager::finishGamestate, this) );
     
    180181
    181182
    182   void GamestateManager::finishGamestate( unsigned int clientID, packet::Gamestate** destgamestate, packet::Gamestate* base, packet::Gamestate* gamestate ) {
     183  void GamestateManager::finishGamestate( unsigned int clientID, packet::Gamestate*& destgamestate, packet::Gamestate* base, packet::Gamestate* gamestate ) {
    183184    //why are we searching the same client's gamestate id as we searched in
    184185    //Server::sendGameState?
     
    186187    //chose wheather the next gamestate is the first or not
    187188
    188     packet::Gamestate *gs = gamestate->doSelection(clientID, 20000);
    189 //     packet::Gamestate *gs = new packet::Gamestate(*gamestate);
     189//     packet::Gamestate *gs = gamestate->doSelection(clientID, 20000);
     190//       packet::Gamestate* gs = new packet::Gamestate(*gamestate);
     191//     packet::Gamestate* gs = gamestate;
     192    packet::Gamestate *gs = new packet::Gamestate(*gamestate);
    190193//     packet::Gamestate *gs = new packet::Gamestate();
    191194//     gs->collectData( id_, 0x1 );
     
    193196    gamestateMap_[clientID][gamestate->getID()]=gs;
    194197//     this->threadMutex_->unlock();
     198      Clock clock;
     199      clock.capture();
    195200
    196201    if(base)
     
    200205//       packet::Gamestate* gs1  = gs;
    201206      packet::Gamestate *diffed = gs->diff(base);
     207      if( diffed->getDataSize() == 0 )
     208      {
     209        delete diffed;
     210        destgamestate = 0;
     211        return;
     212      }
     213      else
     214        gs = diffed;
    202215      //packet::Gamestate *gs2 = diffed->undiff(gs);
    203216//       assert(*gs == *gs2);
    204       gs = diffed;
    205217//       packet::Gamestate* gs2 = gs->undiff(client);
    206218//       gs = new packet::Gamestate(*gs);
     
    214226    bool b = gs->compressData();
    215227    assert(b);
    216 //     COUT(4) << "sending gamestate with id " << gs->getID();
     228      clock.capture();
     229      COUT(0) << "diff time: " << clock.getDeltaTime() << endl;
     230//     COUT(5) << "sending gamestate with id " << gs->getID();
    217231//     if(gamestate->isDiffed())
    218 //     COUT(4) << " and baseid " << gs->getBaseID() << endl;
     232//       COUT(5) << " and baseid " << gs->getBaseID() << endl;
    219233//     else
    220 //     COUT(4) << endl;
     234//       COUT(5) << endl;
    221235    gs->setClientID(clientID);
    222     *destgamestate = gs;
     236    destgamestate = gs;
    223237  }
    224238
Note: See TracChangeset for help on using the changeset viewer.