Changeset 1901 for code/branches/network/src/network/packet/Gamestate.cc
- Timestamp:
- Oct 12, 2008, 12:15:30 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/network/src/network/packet/Gamestate.cc
r1834 r1901 47 47 48 48 49 #define PACKET_FLAG_GAMESTATE ENET_PACKET_FLAG_RELIABLE 50 49 51 Gamestate::Gamestate() 50 52 { 51 } 52 53 Gamestate::Gamestate(unsigned char *data, int clientID): 53 flags_ = flags_ | PACKET_FLAG_GAMESTATE; 54 } 55 56 Gamestate::Gamestate(uint8_t *data, unsigned int clientID): 54 57 Packet(data, clientID) 55 58 { 56 } 57 58 Gamestate::Gamestate(unsigned char *data) 59 { 59 flags_ = flags_ | PACKET_FLAG_GAMESTATE; 60 } 61 62 Gamestate::Gamestate(uint8_t *data) 63 { 64 flags_ = flags_ | PACKET_FLAG_GAMESTATE; 60 65 data_=data; 61 66 } … … 86 91 #endif 87 92 //start collect data synchronisable by synchronisable 88 u nsigned char*mem=data_;93 uint8_t *mem=data_; 89 94 mem+=sizeof(GamestateHeader); 90 95 orxonox::ObjectList<Synchronisable>::iterator it; … … 99 104 while(++temp) 100 105 addsize+=temp->getSize(id, mode); 101 data_ = (u nsigned char*)realloc(data_, sizeof(GamestateHeader) + currentsize + addsize);106 data_ = (uint8_t *)realloc(data_, sizeof(GamestateHeader) + currentsize + addsize); 102 107 if(!data_) 103 108 return false; … … 140 145 assert(!HEADER->compressed); 141 146 assert(!HEADER->diffed); 142 u nsigned char*mem=data_+sizeof(GamestateHeader);147 uint8_t *mem=data_+sizeof(GamestateHeader); 143 148 // get the start of the Synchronisable list 144 149 //orxonox::ObjectList<Synchronisable>::iterator it=orxonox::ObjectList<Synchronisable>::begin(); … … 159 164 else 160 165 { 161 assert(s->updateData(mem, mode)); 166 bool b = s->updateData(mem, mode); 167 assert(b); 162 168 //if(!s->updateData(mem, mode)) 163 169 //return false; … … 186 192 187 193 bool Gamestate::operator==(packet::Gamestate gs){ 188 u nsigned char*d1 = data_+sizeof(GamestateHeader);189 u nsigned char*d2 = gs.data_+sizeof(GamestateHeader);194 uint8_t *d1 = data_+sizeof(GamestateHeader); 195 uint8_t *d2 = gs.data_+sizeof(GamestateHeader); 190 196 assert(!isCompressed()); 191 197 assert(!gs.isCompressed()); … … 215 221 return false; 216 222 217 u nsigned char *ndata = new unsigned char[buffer+sizeof(GamestateHeader)];218 u nsigned char*dest = GAMESTATE_START(ndata);223 uint8_t *ndata = new uint8_t[buffer+sizeof(GamestateHeader)]; 224 uint8_t *dest = GAMESTATE_START(ndata); 219 225 //unsigned char *dest = new unsigned char[buffer]; 220 u nsigned char*source = GAMESTATE_START(data_);226 uint8_t *source = GAMESTATE_START(data_); 221 227 int retval; 222 228 retval = compress( dest, &buffer, source, (uLong)(HEADER->datasize) ); … … 229 235 #ifndef NDEBUG 230 236 //decompress and compare the start and the decompressed data 231 u nsigned char *rdata = new unsigned char[HEADER->datasize+sizeof(GamestateHeader)];232 u nsigned char*d2 = GAMESTATE_START(rdata);237 uint8_t *rdata = new uint8_t[HEADER->datasize+sizeof(GamestateHeader)]; 238 uint8_t *d2 = GAMESTATE_START(rdata); 233 239 uLongf length2 = HEADER->datasize; 234 240 uncompress(d2, &length2, dest, buffer); … … 265 271 bufsize = datasize; 266 272 assert(bufsize!=0); 267 u nsigned char *ndata = new unsigned char[bufsize + sizeof(GamestateHeader)];268 u nsigned char*dest = ndata + sizeof(GamestateHeader);269 u nsigned char*source = data_ + sizeof(GamestateHeader);273 uint8_t *ndata = new uint8_t[bufsize + sizeof(GamestateHeader)]; 274 uint8_t *dest = ndata + sizeof(GamestateHeader); 275 uint8_t *source = data_ + sizeof(GamestateHeader); 270 276 int retval; 271 277 uLongf length=bufsize; … … 299 305 assert(!HEADER->diffed); 300 306 //unsigned char *basep = base->getGs()/*, *gs = getGs()*/; 301 u nsigned char*basep = GAMESTATE_START(base->data_), *gs = GAMESTATE_START(this->data_);307 uint8_t *basep = GAMESTATE_START(base->data_), *gs = GAMESTATE_START(this->data_); 302 308 unsigned int of=0; // pointers offset 303 309 unsigned int dest_length=0; … … 305 311 if(dest_length==0) 306 312 return NULL; 307 u nsigned char *ndata = new unsigned char[dest_length*sizeof(unsigned char)+sizeof(GamestateHeader)];308 u nsigned char*dest = ndata + sizeof(GamestateHeader);313 uint8_t *ndata = new uint8_t[dest_length*sizeof(uint8_t)+sizeof(GamestateHeader)]; 314 uint8_t *dest = ndata + sizeof(GamestateHeader); 309 315 while(of < GAMESTATE_HEADER(base->data_)->datasize && of < HEADER->datasize){ 310 316 *(dest+of)=*(basep+of)^*(gs+of); // do the xor … … 312 318 } 313 319 if(GAMESTATE_HEADER(base->data_)->datasize!=HEADER->datasize){ 314 u nsigned charn=0;320 uint8_t n=0; 315 321 if(GAMESTATE_HEADER(base->data_)->datasize < HEADER->datasize){ 316 322 while(of<dest_length){ … … 335 341 336 342 Gamestate *gs = new Gamestate(*this); 337 u nsigned char*ndata = gs->data_ + sizeof(GamestateHeader);343 uint8_t *ndata = gs->data_ + sizeof(GamestateHeader); 338 344 synchronisableHeader *objectheader; 339 345 unsigned int objectOffset; … … 344 350 unsigned int objectsize = objectheader->size; 345 351 assert(it->second->objectID==objectheader->objectID); 346 objectOffset=sizeof(u nsigned int)+sizeof(bool); //skip the size and the availableDate variables in the objectheader352 objectOffset=sizeof(uint8_t)+sizeof(bool); //skip the size and the availableDate variables in the objectheader 347 353 if(!it->second->doSelection(HEADER->id)){ 348 354 while(objectOffset<objectsize){ … … 370 376 //preparations 371 377 std::map<unsigned int, Synchronisable *>::iterator it; 372 u nsigned char*origdata, *basedata, *destdata, *ndata;378 uint8_t *origdata, *basedata, *destdata, *ndata; 373 379 unsigned int objectOffset, streamOffset=0; //data offset 374 380 unsigned int minsize = (HEADER->datasize < GAMESTATE_HEADER(base->data_)->datasize) ? HEADER->datasize : GAMESTATE_HEADER(base->data_)->datasize; … … 378 384 origdata = GAMESTATE_START(this->data_); 379 385 basedata = GAMESTATE_START(base->data_); 380 ndata = new u nsigned char[HEADER->datasize + sizeof(GamestateHeader)];386 ndata = new uint8_t[HEADER->datasize + sizeof(GamestateHeader)]; 381 387 destdata = ndata + sizeof(GamestateHeader); 382 388 … … 390 396 //copy and partially diff the object header 391 397 assert(sizeof(synchronisableHeader)==3*sizeof(unsigned int)+sizeof(bool)); 392 *(u nsigned int*)destdata = *(unsigned int*)origdata; //size (do not diff)393 *(bool*)(destdata+sizeof(u nsigned int)) = sendData;398 *(uint32_t*)destdata = *(uint32_t*)origdata; //size (do not diff) 399 *(bool*)(destdata+sizeof(uint32_t)) = sendData; 394 400 if(sendData){ 395 *(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)396 *(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)401 *(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) 402 *(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) 397 403 }else{ 398 *(u nsigned int*)(destdata+sizeof(unsigned int)+sizeof(bool)) = 0;399 *(u nsigned int*)(destdata+2*sizeof(unsigned int)+sizeof(bool)) = 0;404 *(uint32_t*)(destdata+sizeof(uint32_t)+sizeof(bool)) = 0; 405 *(uint32_t*)(destdata+2*sizeof(uint32_t)+sizeof(bool)) = 0; 400 406 } 401 407 objectOffset=sizeof(synchronisableHeader); … … 408 414 *(destdata+objectOffset)=*(basedata+objectOffset)^*(origdata+objectOffset); // do the xor 409 415 else if(sendData) 410 *(destdata+objectOffset)=((u nsigned char)0)^*(origdata+objectOffset); // xor with 0 (basestream is too short)416 *(destdata+objectOffset)=((uint8_t)0)^*(origdata+objectOffset); // xor with 0 (basestream is too short) 411 417 else 412 418 *(destdata+objectOffset)=0; // set to 0 because this object should not be transfered … … 438 444 //preparations 439 445 std::map<unsigned int, Synchronisable *>::iterator it; 440 u nsigned char*origdata, *basedata, *destdata, *ndata;446 uint8_t *origdata, *basedata, *destdata, *ndata; 441 447 unsigned int objectOffset, streamOffset=0; //data offset 442 448 unsigned int minsize = (HEADER->datasize < GAMESTATE_HEADER(base->data_)->datasize) ? HEADER->datasize : GAMESTATE_HEADER(base->data_)->datasize; … … 446 452 origdata = GAMESTATE_START(this->data_); 447 453 basedata = GAMESTATE_START(base->data_); 448 ndata = new u nsigned char[HEADER->datasize + sizeof(GamestateHeader)];454 ndata = new uint8_t[HEADER->datasize + sizeof(GamestateHeader)]; 449 455 destdata = ndata + sizeof(GamestateHeader); 450 456 … … 502 508 assert(!HEADER->compressed && !GAMESTATE_HEADER(base->data_)->compressed); 503 509 //unsigned char *basep = base->getGs()/*, *gs = getGs()*/; 504 u nsigned char*basep = GAMESTATE_START(base->data_);505 u nsigned char*gs = GAMESTATE_START(this->data_);510 uint8_t *basep = GAMESTATE_START(base->data_); 511 uint8_t *gs = GAMESTATE_START(this->data_); 506 512 unsigned int of=0; // pointers offset 507 513 unsigned int dest_length=0; … … 509 515 if(dest_length==0) 510 516 return NULL; 511 u nsigned char *ndata = new unsigned char[dest_length*sizeof(unsigned char)+sizeof(GamestateHeader)];512 u nsigned char*dest = ndata + sizeof(GamestateHeader);517 uint8_t *ndata = new uint8_t[dest_length*sizeof(uint8_t)+sizeof(GamestateHeader)]; 518 uint8_t *dest = ndata + sizeof(GamestateHeader); 513 519 while(of < GAMESTATE_HEADER(base->data_)->datasize && of < HEADER->datasize){ 514 520 *(dest+of)=*(basep+of)^*(gs+of); // do the xor … … 516 522 } 517 523 if(GAMESTATE_HEADER(base->data_)->datasize!=HEADER->datasize){ 518 u nsigned charn=0;524 uint8_t n=0; 519 525 if(GAMESTATE_HEADER(base->data_)->datasize < HEADER->datasize){ 520 526 while(of < dest_length){
Note: See TracChangeset
for help on using the changeset viewer.