- Timestamp:
- Feb 13, 2009, 6:41:08 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/presentation/src/network/synchronisable/Synchronisable.cc
r2575 r2655 28 28 */ 29 29 30 //31 // C++ Implementation: synchronisable32 //33 // Description:34 //35 //36 // Author: Dumeni, Oliver Scheuss, (C) 200737 //38 // Copyright: See COPYING file that comes with this distribution39 //40 30 41 31 #include "Synchronisable.h" … … 155 145 Synchronisable *Synchronisable::fabricate(uint8_t*& mem, uint8_t mode) 156 146 { 157 synchronisableHeader *header = (synchronisableHeader *)mem;158 159 if(!header ->dataAvailable)160 { 161 mem += header ->size;147 SynchronisableHeader header(mem); 148 149 if(!header.isDataAvailable()) 150 { 151 mem += header.getDataSize(); 162 152 return 0; 163 153 } 164 154 165 COUT(4) << "fabricating object with id: " << header ->objectID<< std::endl;166 167 Identifier* id = ClassByID(header ->classID);155 COUT(4) << "fabricating object with id: " << header.getObjectID() << std::endl; 156 157 Identifier* id = ClassByID(header.getClassID()); 168 158 if (!id) 169 159 { … … 174 164 assert(id); 175 165 BaseObject* creator = 0; 176 if (header ->creatorID!= OBJECTID_UNKNOWN)177 { 178 Synchronisable* synchronisable_creator = Synchronisable::getSynchronisable(header ->creatorID);166 if (header.getCreatorID() != OBJECTID_UNKNOWN) 167 { 168 Synchronisable* synchronisable_creator = Synchronisable::getSynchronisable(header.getCreatorID()); 179 169 if (!synchronisable_creator) 180 170 { 181 mem += header ->size; //.TODO: this suckz.... remove size from header182 //assert(0); // TODO: uncomment this if we have a clean objecthierarchy (with destruction of children of objects) ^^171 mem += header.getDataSize(); //.TODO: this suckz.... remove size from header 172 assert(0); // TODO: uncomment this if we have a clean objecthierarchy (with destruction of children of objects) ^^ 183 173 return 0; 184 174 } … … 186 176 creator = dynamic_cast<BaseObject*>(synchronisable_creator); 187 177 } 188 assert(getSynchronisable(header ->objectID)==0); //make sure no object with this id exists178 assert(getSynchronisable(header.getObjectID())==0); //make sure no object with this id exists 189 179 BaseObject *bo = id->fabricate(creator); 190 180 assert(bo); 191 181 Synchronisable *no = dynamic_cast<Synchronisable *>(bo); 192 182 assert(no); 193 no->objectID=header ->objectID;194 no->creatorID=header ->creatorID; //TODO: remove this195 no->classID=header ->classID;183 no->objectID=header.getObjectID(); 184 no->creatorID=header.getCreatorID(); //TODO: remove this 185 no->classID=header.getClassID(); 196 186 COUT(4) << "fabricate objectID: " << no->objectID << " classID: " << no->classID << std::endl; 197 187 // update data and create object/entity... … … 329 319 330 320 // start copy header 331 synchronisableHeader *header = (synchronisableHeader *)mem;332 header ->size = size;333 header ->objectID = this->objectID;334 header ->creatorID = this->creatorID;335 header ->classID = this->classID;336 header ->dataAvailable = true;337 tempsize += sizeof(synchronisableHeader);338 mem += sizeof(synchronisableHeader);321 SynchronisableHeader header(mem); 322 header.setDataSize( size ); 323 header.setObjectID( this->objectID ); 324 header.setCreatorID( this->creatorID ); 325 header.setClassID( this->classID ); 326 header.setDataAvailable( true ); 327 tempsize += SynchronisableHeader::getSize(); 328 mem += SynchronisableHeader::getSize(); 339 329 // end copy header 340 330 … … 371 361 uint8_t* data=mem; 372 362 // start extract header 373 synchronisableHeader *syncHeader = (synchronisableHeader *)mem;374 assert(syncHeader ->objectID==this->objectID);375 assert(syncHeader ->creatorID==this->creatorID);376 assert( this->classID==syncHeader->classID); //TODO: fix this!!! maybe a problem with the identifier ?377 if(syncHeader ->dataAvailable==false){378 mem += syncHeader ->size;363 SynchronisableHeader syncHeader(mem); 364 assert(syncHeader.getObjectID()==this->objectID); 365 assert(syncHeader.getCreatorID()==this->creatorID); 366 assert(syncHeader.getClassID()==this->classID); 367 if(syncHeader.isDataAvailable()==false){ 368 mem += syncHeader.getDataSize(); 379 369 return true; 380 370 } 381 371 382 mem += sizeof(synchronisableHeader);372 mem += SynchronisableHeader::getSize(); 383 373 // stop extract header 384 374 385 COUT(5) << "Synchronisable: objectID " << syncHeader->objectID << ", classID " << syncHeader->classID << " size: " << syncHeader->size << " synchronising data" << std::endl; 386 for(i=syncList.begin(); i!=syncList.end() && mem <= data+syncHeader->size; i++) 387 { 375 //COUT(5) << "Synchronisable: objectID " << syncHeader.getObjectID() << ", classID " << syncHeader.getClassID() << " size: " << syncHeader.getDataSize() << " synchronising data" << std::endl; 376 for(i=syncList.begin(); i!=syncList.end(); i++) 377 { 378 assert( mem <= data+syncHeader.getDataSize() ); // always make sure we don't exceed the datasize in our stream 388 379 (*i)->putData( mem, mode, forceCallback ); 389 380 } 390 assert(mem == data+syncHeader ->size);381 assert(mem == data+syncHeader.getDataSize()); 391 382 return true; 392 383 } … … 399 390 */ 400 391 uint32_t Synchronisable::getSize(int32_t id, uint8_t mode){ 401 int tsize= sizeof(synchronisableHeader);392 int tsize=SynchronisableHeader::getSize(); 402 393 if(mode==0x0) 403 394 mode=state_; … … 428 419 bool Synchronisable::isMyData(uint8_t* mem) 429 420 { 430 synchronisableHeader *header = (synchronisableHeader *)mem;431 assert(header ->objectID==this->objectID);432 return header ->dataAvailable;421 SynchronisableHeader header(mem); 422 assert(header.getObjectID()==this->objectID); 423 return header.isDataAvailable(); 433 424 } 434 425
Note: See TracChangeset
for help on using the changeset viewer.