Changeset 1827 for code/branches/network/src/network/Synchronisable.cc
- Timestamp:
- Sep 23, 2008, 12:46:37 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/network/src/network/Synchronisable.cc
r1800 r1827 120 120 Synchronisable *Synchronisable::fabricate(unsigned char*& mem, int mode) 121 121 { 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); 128 125 assert(id); 129 126 orxonox::BaseObject *bo = id->fabricate(); 130 127 Synchronisable *no = dynamic_cast<Synchronisable *>(bo); 131 128 assert(no); 132 no->objectID= objectID;133 no->classID= classID;129 no->objectID=header->objectID; 130 no->classID=header->classID; 134 131 COUT(3) << "fabricate objectID: " << no->objectID << " classID: " << no->classID << std::endl; 135 132 // update data and create object/entity... … … 228 225 229 226 // 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); 237 234 // end copy header 238 235 … … 241 238 // copy to location 242 239 for(i=syncList->begin(); i!=syncList->end(); ++i){ 243 //(std::memcpy(retVal.data+n, (const void*)(&(i->size)), sizeof(int));244 240 if( ((*i)->mode & mode) == 0 ){ 245 241 COUT(5) << "not getting data: " << std::endl; … … 284 280 unsigned char *data=mem; 285 281 // 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; 287 286 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); 295 290 // 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+s ize; 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++){ 301 296 if( ((*i)->mode ^ mode) == 0 ){ 302 297 COUT(5) << "synchronisable: not updating variable " << std::endl; … … 382 377 bool Synchronisable::isMyData(unsigned char* mem) 383 378 { 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; 394 382 } 395 383
Note: See TracChangeset
for help on using the changeset viewer.