Changeset 2531 for code/branches/bugger/src/network/packet/Gamestate.cc
- Timestamp:
- Dec 23, 2008, 11:09:55 PM (15 years ago)
- Location:
- code/branches/bugger
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/bugger
- Property svn:mergeinfo changed
/code/branches/network (added) merged: 2356 /code/branches/network64 (added) merged: 2210-2211,2245-2247,2255,2307,2309-2312,2316,2355
- Property svn:mergeinfo changed
-
code/branches/bugger/src/network/packet/Gamestate.cc
r2450 r2531 28 28 29 29 #include "Gamestate.h" 30 #include "network/ClientInformation.h" 31 #include "network/GamestateHandler.h" 30 #include "../GamestateHandler.h" 31 #include "../synchronisable/Synchronisable.h" 32 #include "../TrafficControl.h" 32 33 #include "core/Core.h" 33 34 #include "core/CoreIncludes.h" … … 49 50 50 51 #define PACKET_FLAG_GAMESTATE ENET_PACKET_FLAG_RELIABLE 52 53 TrafficControl Gamestate::trafficControl_; 51 54 52 55 Gamestate::Gamestate() … … 74 77 bool Gamestate::collectData(int id, uint8_t mode) 75 78 { 76 u nsigned int tempsize=0, currentsize=0;79 uint32_t tempsize=0, currentsize=0; 77 80 assert(data_==0); 78 u nsigned int size = calcGamestateSize(id, mode);81 uint32_t size = calcGamestateSize(id, mode); 79 82 80 83 COUT(4) << "G.ST.Man: producing gamestate with id: " << id << std::endl; … … 110 113 111 114 //if(it->doSelection(id)) 112 dataMap_[mem-data_]=(*it); // save the mem location of the synchronisable data 115 if(tempsize!=0) 116 dataMap_.push_back( obj(it->getObjectID(), it->getCreatorID(), tempsize, mem-data_) ); 117 // dataMap_[mem-data_]=(*it); // save the mem location of the synchronisable data 113 118 if(!it->getData(mem, id, mode)) 114 119 return false; // mem pointer gets automatically increased because of call by reference … … 150 155 { 151 156 if (!Core::isMaster()) 152 Synchronisable::fabricate(mem, mode);157 s = Synchronisable::fabricate(mem, mode); 153 158 else 154 159 mem += objectheader->size; 160 assert(s); 155 161 } 156 162 else … … 170 176 } 171 177 172 u nsigned int Gamestate::getSize() const178 uint32_t Gamestate::getSize() const 173 179 { 174 180 assert(data_); … … 255 261 assert(HEADER->compressed); 256 262 COUT(4) << "GameStateClient: uncompressing gamestate. id: " << HEADER->id << ", baseid: " << HEADER->base_id << ", datasize: " << HEADER->datasize << ", compsize: " << HEADER->compsize << std::endl; 257 u nsigned int datasize = HEADER->datasize;258 u nsigned int compsize = HEADER->compsize;259 u nsigned int bufsize;263 uint32_t datasize = HEADER->datasize; 264 uint32_t compsize = HEADER->compsize; 265 uint32_t bufsize; 260 266 // assert(compsize<=datasize); 261 267 bufsize = datasize; … … 306 312 //unsigned char *basep = base->getGs()/*, *gs = getGs()*/; 307 313 uint8_t *basep = GAMESTATE_START(base->data_), *gs = GAMESTATE_START(this->data_); 308 u nsigned int of=0; // pointers offset309 u nsigned int dest_length=0;314 uint32_t of=0; // pointers offset 315 uint32_t dest_length=0; 310 316 dest_length=HEADER->datasize; 311 317 if(dest_length==0) … … 336 342 } 337 343 338 Gamestate* Gamestate::doSelection(unsigned int clientID ){344 Gamestate* Gamestate::doSelection(unsigned int clientID, unsigned int targetSize){ 339 345 assert(data_); 340 std:: map<unsigned int, Synchronisable *>::iterator it;346 std::list<obj>::iterator it; 341 347 342 348 // allocate memory for new data … … 345 351 Gamestate *gs = new Gamestate(gdata); 346 352 uint8_t *newdata = gdata + sizeof(GamestateHeader); 347 uint8_t *origdata = GAMESTATE_START(data_);353 // uint8_t *origdata = GAMESTATE_START(data_); 348 354 349 355 //copy the GamestateHeader … … 351 357 352 358 synchronisableHeader *oldobjectheader, *newobjectheader; 353 unsigned int objectOffset; 354 359 uint32_t objectOffset; 360 unsigned int objectsize, destsize=0; 361 Synchronisable *object; 362 363 //call TrafficControl 364 trafficControl_.processObjectList( clientID, HEADER->id, &dataMap_ ); 365 355 366 //copy in the zeros 356 367 for(it=dataMap_.begin(); it!=dataMap_.end(); it++){ 357 if( it->second->getSize(HEADER->id)==0)368 if((*it).objSize==0) 358 369 continue; 359 oldobjectheader = (synchronisableHeader*) origdata;370 oldobjectheader = (synchronisableHeader*)(data_ + (*it).objDataOffset); 360 371 newobjectheader = (synchronisableHeader*)newdata; 361 unsigned int objectsize = oldobjectheader->size; 362 assert(it->second->objectID==oldobjectheader->objectID); 372 object = Synchronisable::getSynchronisable( (*it).objID ); 373 assert(object->objectID == oldobjectheader->objectID); 374 objectsize = oldobjectheader->size; 363 375 *newobjectheader = *oldobjectheader; 364 376 objectOffset=sizeof(synchronisableHeader); //skip the size and the availableData variables in the objectheader 365 if (it->second->doSelection(HEADER->id)){377 if ( /*object->doSelection(HEADER->id)*/true ){ 366 378 assert(newobjectheader->dataAvailable==true); 367 memcpy(newdata+objectOffset, origdata+objectOffset, objectsize-objectOffset);379 memcpy(newdata+objectOffset, data_ + (*it).objDataOffset + objectOffset, objectsize-objectOffset); 368 380 }else{ 369 381 newobjectheader->dataAvailable=false; … … 372 384 } 373 385 newdata += objectsize; 374 origdata += objectsize; 375 } 386 destsize += objectsize; 387 // origdata += objectsize; 388 } 389 ((GamestateHeader*)gdata)->datasize = destsize; 390 assert(destsize!=0); 376 391 return gs; 377 392 } … … 388 403 389 404 //preparations 390 std:: map<unsigned int, Synchronisable *>::iterator it;405 std::list<obj>::iterator it; 391 406 uint8_t *origdata, *basedata, *destdata, *ndata; 392 u nsigned int objectOffset, streamOffset=0; //data offset393 u nsigned int minsize = (HEADER->datasize < GAMESTATE_HEADER(base->data_)->datasize) ? HEADER->datasize : GAMESTATE_HEADER(base->data_)->datasize;407 uint32_t objectOffset, streamOffset=0; //data offset 408 uint32_t minsize = (HEADER->datasize < GAMESTATE_HEADER(base->data_)->datasize) ? HEADER->datasize : GAMESTATE_HEADER(base->data_)->datasize; 394 409 synchronisableHeader *origheader; 395 410 synchronisableHeader *destheader; 411 Synchronisable *object; 396 412 397 413 origdata = GAMESTATE_START(this->data_); … … 403 419 for(it=dataMap_.begin(); it!=dataMap_.end(); it++){ 404 420 assert(streamOffset<HEADER->datasize); 405 bool sendData = it->second->doSelection(HEADER->id);406 421 origheader = (synchronisableHeader *)(origdata+streamOffset); 407 422 destheader = (synchronisableHeader *)(destdata+streamOffset); 423 object = Synchronisable::getSynchronisable(origheader->objectID); 424 bool sendData = object->doSelection(HEADER->id); 408 425 409 426 //copy and partially diff the object header 410 assert(sizeof(synchronisableHeader)==3*sizeof(u nsigned int)+sizeof(bool));427 assert(sizeof(synchronisableHeader)==3*sizeof(uint32_t)+sizeof(bool)); 411 428 *(uint32_t*)destdata = *(uint32_t*)origdata; //size (do not diff) 412 429 *(bool*)(destdata+sizeof(uint32_t)) = sendData; … … 456 473 457 474 //preparations 458 std:: map<unsigned int, Synchronisable *>::iterator it;475 std::list<obj>::iterator it; 459 476 uint8_t *origdata, *basedata, *destdata, *ndata; 460 u nsigned int objectOffset, streamOffset=0; //data offset461 u nsigned int minsize = (HEADER->datasize < GAMESTATE_HEADER(base->data_)->datasize) ? HEADER->datasize : GAMESTATE_HEADER(base->data_)->datasize;477 uint32_t objectOffset, streamOffset=0; //data offset 478 uint32_t minsize = (HEADER->datasize < GAMESTATE_HEADER(base->data_)->datasize) ? HEADER->datasize : GAMESTATE_HEADER(base->data_)->datasize; 462 479 synchronisableHeader *origheader; 463 480 synchronisableHeader *destheader; 481 Synchronisable *object; 464 482 465 483 origdata = GAMESTATE_START(this->data_); … … 473 491 origheader = (synchronisableHeader *)(origdata+streamOffset); 474 492 destheader = (synchronisableHeader *)(destdata+streamOffset); 493 object = Synchronisable::getSynchronisable( origheader->objectID ); 475 494 bool sendData; 476 495 477 496 //copy and partially diff the object header 478 assert(sizeof(synchronisableHeader)==3*sizeof(u nsigned int)+sizeof(bool));479 *(u nsigned int*)destdata = *(unsigned int*)origdata; //size (do not diff)480 *(bool*)(destdata+sizeof(u nsigned int)) = *(bool*)(origdata+sizeof(unsigned int));481 sendData = *(bool*)(origdata+sizeof(u nsigned int));497 assert(sizeof(synchronisableHeader)==3*sizeof(uint32_t)+sizeof(bool)); 498 *(uint32_t*)destdata = *(uint32_t*)origdata; //size (do not diff) 499 *(bool*)(destdata+sizeof(uint32_t)) = *(bool*)(origdata+sizeof(uint32_t)); 500 sendData = *(bool*)(origdata+sizeof(uint32_t)); 482 501 if(sendData){ 483 *(u nsigned int*)(destdata+sizeof(unsigned int)+sizeof(bool)) = *(unsigned int*)(basedata+sizeof(unsigned int)+sizeof(bool)) ^ *(unsigned int*)(origdata+sizeof(unsigned int)+sizeof(bool)); //objectid (diff it)484 *(u nsigned int*)(destdata+2*sizeof(unsigned int)+sizeof(bool)) = *(unsigned int*)(basedata+2*sizeof(unsigned int)+sizeof(bool)) ^ *(unsigned int*)(origdata+2*sizeof(unsigned int)+sizeof(bool)); //classid (diff it)502 *(uint32_t*)(destdata+sizeof(uint32_t)+sizeof(bool)) = *(uint32_t*)(basedata+sizeof(uint32_t)+sizeof(bool)) ^ *(uint32_t*)(origdata+sizeof(uint32_t)+sizeof(bool)); //objectid (diff it) 503 *(uint32_t*)(destdata+2*sizeof(uint32_t)+sizeof(bool)) = *(uint32_t*)(basedata+2*sizeof(uint32_t)+sizeof(bool)) ^ *(uint32_t*)(origdata+2*sizeof(uint32_t)+sizeof(bool)); //classid (diff it) 485 504 }else{ 486 *(u nsigned int*)(destdata+sizeof(unsigned int)+sizeof(bool)) = 0;487 *(u nsigned int*)(destdata+2*sizeof(unsigned int)+sizeof(bool)) = 0;505 *(uint32_t*)(destdata+sizeof(uint32_t)+sizeof(bool)) = 0; 506 *(uint32_t*)(destdata+2*sizeof(uint32_t)+sizeof(bool)) = 0; 488 507 } 489 508 objectOffset=sizeof(synchronisableHeader); … … 523 542 uint8_t *basep = GAMESTATE_START(base->data_); 524 543 uint8_t *gs = GAMESTATE_START(this->data_); 525 u nsigned int of=0; // pointers offset526 u nsigned int dest_length=0;544 uint32_t of=0; // pointers offset 545 uint32_t dest_length=0; 527 546 dest_length=HEADER->datasize; 528 547 if(dest_length==0) … … 554 573 555 574 556 u nsigned int Gamestate::calcGamestateSize(unsigned int id, uint8_t mode)557 { 558 u nsigned int size=0;575 uint32_t Gamestate::calcGamestateSize(int32_t id, uint8_t mode) 576 { 577 uint32_t size=0; 559 578 // get the start of the Synchronisable list 560 579 ObjectList<Synchronisable>::iterator it;
Note: See TracChangeset
for help on using the changeset viewer.