Changeset 1742 for code/branches/network/src/network/packet/Gamestate.cc
- Timestamp:
- Sep 8, 2008, 2:21:00 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/network/src/network/packet/Gamestate.cc
r1741 r1742 62 62 { 63 63 int tempsize=0, currentsize=0; 64 assert(data_==0 /*&& bs_==0*/);65 int size = calcGamestateSize( mode);64 assert(data_==0); 65 int size = calcGamestateSize(id, mode); 66 66 67 67 COUT(4) << "G.ST.Man: producing gamestate with id: " << id << std::endl; 68 //retval->data = (unsigned char*)malloc(size);69 68 if(size==0) 70 69 return false; 71 70 data_ = new unsigned char[size + sizeof(GamestateHeader)]; 72 //bs_ = new Bytestream(data_+sizeof(GamestateHeader), size);73 71 if(!data_){ 74 72 COUT(2) << "GameStateManager: could not allocate memory" << std::endl; … … 81 79 orxonox::Iterator<Synchronisable> it; 82 80 for(it = orxonox::ObjectList<Synchronisable>::start(); it; ++it){ 83 tempsize=it->getSize2( mode);81 tempsize=it->getSize2(id, mode); 84 82 85 83 if(currentsize+tempsize > size){ … … 89 87 int addsize=tempsize; 90 88 while(++temp) 91 addsize+=temp->getSize2( mode);89 addsize+=temp->getSize2(id, mode); 92 90 data_ = (unsigned char *)realloc(data_, sizeof(GamestateHeader) + currentsize + addsize); 93 91 if(!data_) … … 96 94 }// stop allocate additional memory 97 95 98 if(!it->getData 2(mem, mode))96 if(!it->getData(mem, id, mode)) 99 97 return false; // mem pointer gets automatically increased because of call by reference 100 98 // increase size counter by size of current synchronisable … … 199 197 { 200 198 assert(HEADER); 199 assert(!HEADER->compressed); 201 200 uLongf buffer = (uLongf)(((HEADER->normsize + 12)*1.01)+1); 202 201 if(buffer==0) … … 228 227 229 228 //copy and modify header 229 #ifndef NDEBUG 230 HEADER->crc32 = calcCRC(data_+sizeof(GamestateHeader), HEADER->normsize); 231 #endif 230 232 *GAMESTATE_HEADER(ndata) = *HEADER; 231 233 //delete old data … … 241 243 bool Gamestate::decompressData() 242 244 { 245 assert(HEADER); 243 246 assert(HEADER->compressed); 244 247 COUT(3) << "GameStateClient: uncompressing gamestate. id: " << HEADER->id << ", baseid: " << HEADER->base_id << ", normsize: " << HEADER->normsize << ", compsize: " << HEADER->compsize << std::endl; … … 261 264 case Z_DATA_ERROR: COUT(2) << "data corrupted (zlib)" << std::endl; return false; 262 265 } 266 #ifndef NDEBUG 267 assert(HEADER->crc32==calcCRC(ndata+sizeof(GamestateHeader), HEADER->normsize)); 268 #endif 263 269 264 270 //copy over the header … … 276 282 Gamestate *Gamestate::diff(Gamestate *base) 277 283 { 284 assert(HEADER); 285 assert(!HEADER->compressed); 286 assert(!HEADER->diffed); 278 287 //unsigned char *basep = base->getGs()/*, *gs = getGs()*/; 279 288 unsigned char *basep = GAMESTATE_START(base->data_), *gs = GAMESTATE_START(this->data_); … … 310 319 Gamestate *Gamestate::undiff(Gamestate *base) 311 320 { 312 assert(this && base); 321 assert(this && base);assert(HEADER); 322 assert(HEADER->diffed); 313 323 assert(!HEADER->compressed && !GAMESTATE_HEADER(base->data_)->compressed); 314 324 //unsigned char *basep = base->getGs()/*, *gs = getGs()*/; … … 346 356 347 357 348 unsigned int Gamestate::calcGamestateSize( int mode)358 unsigned int Gamestate::calcGamestateSize(unsigned int id, int mode) 349 359 { 350 360 int size=0; … … 353 363 // get total size of gamestate 354 364 for(it = orxonox::ObjectList<Synchronisable>::start(); it; ++it) 355 size+=it->getSize2( mode); // size of the actual data of the synchronisable365 size+=it->getSize2(id, mode); // size of the actual data of the synchronisable 356 366 // size+=sizeof(GamestateHeader); 357 367 return size;
Note: See TracChangeset
for help on using the changeset viewer.