Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Sep 23, 2008, 12:46:37 AM (16 years ago)
Author:
scheusso
Message:

another new gamestate concept ;)

  • server does an individual object composition (to be sent) for every client
  • atm objects have sync frequencies and are priorized after their frequency (not clienbased yet)
  • after highlevel diff (object composition) a lowlevel diff is done
  • afterwards compression

→ 65 to 80 percent less data to be transmitted

File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/network/src/network/Synchronisable.cc

    r1800 r1827  
    120120  Synchronisable *Synchronisable::fabricate(unsigned char*& mem, int mode)
    121121  {
    122     unsigned int size, objectID, classID;
    123     size = *(unsigned int *)mem;
    124     objectID = *(unsigned int*)(mem+sizeof(unsigned int));
    125     classID = *(unsigned int*)(mem+2*sizeof(unsigned int));
    126    
    127     orxonox::Identifier* id = GetIdentifier(classID);
     122    synchronisableHeader *header = (synchronisableHeader *)mem;
     123   
     124    orxonox::Identifier* id = GetIdentifier(header->classID);
    128125    assert(id);
    129126    orxonox::BaseObject *bo = id->fabricate();
    130127    Synchronisable *no = dynamic_cast<Synchronisable *>(bo);
    131128    assert(no);
    132     no->objectID=objectID;
    133     no->classID=classID;
     129    no->objectID=header->objectID;
     130    no->classID=header->classID;
    134131    COUT(3) << "fabricate objectID: " << no->objectID << " classID: " << no->classID << std::endl;
    135132          // update data and create object/entity...
     
    228225   
    229226    // start copy header
    230     memcpy(mem, &size, sizeof(unsigned int));
    231     mem+=sizeof(unsigned int);
    232     memcpy(mem, &(this->objectID), sizeof(unsigned int));
    233     mem+=sizeof(unsigned int);
    234     memcpy(mem, &(this->classID), sizeof(unsigned int));
    235     mem+=sizeof(unsigned int);
    236     tempsize+=12;
     227    synchronisableHeader *header = (synchronisableHeader *)mem;
     228    header->size = size;
     229    header->objectID = this->objectID;
     230    header->classID = this->classID;
     231    header->dataAvailable = true;
     232    tempsize+=sizeof(synchronisableHeader);
     233    mem+=sizeof(synchronisableHeader);
    237234    // end copy header
    238235   
     
    241238    // copy to location
    242239    for(i=syncList->begin(); i!=syncList->end(); ++i){
    243       //(std::memcpy(retVal.data+n, (const void*)(&(i->size)), sizeof(int));
    244240      if( ((*i)->mode & mode) == 0 ){
    245241        COUT(5) << "not getting data: " << std::endl;
     
    284280    unsigned char *data=mem;
    285281    // start extract header
    286     if(!isMyData(mem))
     282    synchronisableHeader *syncHeader = (synchronisableHeader *)mem;
     283    assert(syncHeader->objectID==this->objectID);
     284    if(syncHeader->dataAvailable==false){
     285      mem+=syncHeader->size;
    287286      return true;
    288     unsigned int objectID, classID, size;
    289     size = *(int *)mem;
    290     mem+=sizeof(size);
    291     objectID = *(int *)mem;
    292     mem+=sizeof(objectID);
    293     classID = *(int *)mem;
    294     mem+=sizeof(classID);
     287    }
     288   
     289    mem+=sizeof(synchronisableHeader);
    295290    // stop extract header
    296     assert(this->objectID==objectID);
    297     assert(this->classID==classID);
    298    
    299     COUT(5) << "Synchronisable: objectID " << objectID << ", classID " << classID << " size: " << size << " synchronising data" << std::endl;
    300     for(i=syncList->begin(); i!=syncList->end() && mem <= data+size; i++){
     291    assert(this->objectID==syncHeader->objectID);
     292//    assert(this->classID==syncHeader->classID); //TODO: fix this!!! maybe a problem with the identifier ?
     293   
     294    COUT(5) << "Synchronisable: objectID " << syncHeader->objectID << ", classID " << syncHeader->classID << " size: " << syncHeader->size << " synchronising data" << std::endl;
     295    for(i=syncList->begin(); i!=syncList->end() && mem <= data+syncHeader->size; i++){
    301296      if( ((*i)->mode ^ mode) == 0 ){
    302297        COUT(5) << "synchronisable: not updating variable " << std::endl;
     
    382377  bool Synchronisable::isMyData(unsigned char* mem)
    383378  {
    384     unsigned int objectID, classID, size;
    385     size = *(int *)mem;
    386     mem+=sizeof(size);
    387     objectID = *(int *)mem;
    388     mem+=sizeof(objectID);
    389     classID = *(int *)mem;
    390     mem+=sizeof(classID);
    391    
    392     assert(classID == this->classID);
    393     return (objectID == this->objectID);
     379    synchronisableHeader *header = (synchronisableHeader *)mem;
     380    assert(header->objectID==this->objectID);
     381    return header->dataAvailable;
    394382  }
    395383 
Note: See TracChangeset for help on using the changeset viewer.