Changeset 2171 for code/trunk/src/network/packet/Gamestate.cc
- Timestamp:
- Nov 10, 2008, 12:05:03 AM (15 years ago)
- Location:
- code/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
code/trunk
- Property svn:mergeinfo changed
/code/branches/objecthierarchy merged: 2111-2115,2123,2132-2134,2143-2144,2153-2158,2160-2169
- Property svn:mergeinfo changed
-
code/trunk/src/network/packet/Gamestate.cc
r2087 r2171 38 38 39 39 40 namespace network{40 namespace orxonox { 41 41 42 42 namespace packet { … … 71 71 } 72 72 73 bool Gamestate::collectData(int id, int mode)74 { 75 int tempsize=0, currentsize=0;73 bool Gamestate::collectData(int id, uint8_t mode) 74 { 75 unsigned int tempsize=0, currentsize=0; 76 76 assert(data_==0); 77 int size = calcGamestateSize(id, mode);77 unsigned int size = calcGamestateSize(id, mode); 78 78 79 79 COUT(4) << "G.ST.Man: producing gamestate with id: " << id << std::endl; … … 86 86 } 87 87 88 #ifndef NDEBUG89 std::list<Synchronisable*> slist;90 std::list<Synchronisable*>::iterator iit;91 #endif92 88 //start collect data synchronisable by synchronisable 93 89 uint8_t *mem=data_; 94 90 mem+=sizeof(GamestateHeader); 95 orxonox::ObjectList<Synchronisable>::iterator it;96 for(it = orxonox::ObjectList<Synchronisable>::begin(); it; ++it){91 ObjectList<Synchronisable>::iterator it; 92 for(it = ObjectList<Synchronisable>::begin(); it; ++it){ 97 93 tempsize=it->getSize(id, mode); 98 94 99 95 if(currentsize+tempsize > size){ 96 assert(0); // if we don't use multithreading this part shouldn't be neccessary 100 97 // start allocate additional memory 101 98 COUT(3) << "G.St.Man: need additional memory" << std::endl; 102 orxonox::ObjectList<Synchronisable>::iterator temp = it;99 ObjectList<Synchronisable>::iterator temp = it; 103 100 int addsize=tempsize; 104 101 while(++temp) … … 110 107 }// stop allocate additional memory 111 108 112 #ifndef NDEBUG113 for(iit=slist.begin(); iit!=slist.end(); iit++)114 assert((*iit)!=*it);115 slist.push_back(*it);116 #endif117 109 118 110 //if(it->doSelection(id)) … … 127 119 //start write gamestate header 128 120 HEADER->packetType = ENUM::Gamestate; 129 assert( *(ENUM::Type *)(data_) == ENUM::Gamestate);130 121 HEADER->datasize = currentsize; 131 122 HEADER->id = id; … … 140 131 } 141 132 142 bool Gamestate::spreadData( int mode)133 bool Gamestate::spreadData(uint8_t mode) 143 134 { 144 135 assert(data_); … … 147 138 uint8_t *mem=data_+sizeof(GamestateHeader); 148 139 // get the start of the Synchronisable list 149 // orxonox::ObjectList<Synchronisable>::iterator it=orxonox::ObjectList<Synchronisable>::begin();140 //ObjectList<Synchronisable>::iterator it=ObjectList<Synchronisable>::begin(); 150 141 Synchronisable *s; 151 142 … … 163 154 bool b = s->updateData(mem, mode); 164 155 assert(b); 165 //if(!s->updateData(mem, mode))166 //return false;167 156 } 168 157 } … … 367 356 assert(it->second->objectID==oldobjectheader->objectID); 368 357 *newobjectheader = *oldobjectheader; 369 objectOffset=sizeof( uint8_t)+sizeof(bool); //skip the size and the availableData variables in the objectheader358 objectOffset=sizeof(synchronisableHeader); //skip the size and the availableData variables in the objectheader 370 359 if(it->second->doSelection(HEADER->id)){ 371 newobjectheader->dataAvailable=true; //TODO: probably not neccessary 372 while(objectOffset<objectsize){ 373 *(newdata + objectOffset)=*(origdata + objectOffset); // copy the data 374 objectOffset++; 375 } 360 assert(newobjectheader->dataAvailable==true); 361 memcpy(newdata+objectOffset, origdata+objectOffset, objectsize-objectOffset); 376 362 }else{ 377 363 newobjectheader->dataAvailable=false; 378 while(objectOffset<objectsize){ 379 *(newdata+objectOffset)=0; // set to 0 380 objectOffset++; 381 } 364 memset(newdata+objectOffset, 0, objectsize-objectOffset); 382 365 assert(objectOffset==objectsize); 383 366 } … … 565 548 566 549 567 unsigned int Gamestate::calcGamestateSize(unsigned int id, int mode)568 { 569 int size=0;550 unsigned int Gamestate::calcGamestateSize(unsigned int id, uint8_t mode) 551 { 552 unsigned int size=0; 570 553 // get the start of the Synchronisable list 571 orxonox::ObjectList<Synchronisable>::iterator it;554 ObjectList<Synchronisable>::iterator it; 572 555 // get total size of gamestate 573 for(it = orxonox::ObjectList<Synchronisable>::begin(); it; ++it)556 for(it = ObjectList<Synchronisable>::begin(); it; ++it) 574 557 size+=it->getSize(id, mode); // size of the actual data of the synchronisable 575 558 // size+=sizeof(GamestateHeader); … … 582 565 * @return iterator pointing to the next object in the list 583 566 */ 584 void Gamestate::removeObject( orxonox::ObjectList<Synchronisable>::iterator &it) {585 orxonox::ObjectList<Synchronisable>::iterator temp=it;567 void Gamestate::removeObject(ObjectList<Synchronisable>::iterator &it) { 568 ObjectList<Synchronisable>::iterator temp=it; 586 569 ++it; 587 570 delete *temp;
Note: See TracChangeset
for help on using the changeset viewer.