Changeset 9629 for code/branches/core6/src/libraries/network/synchronisable
- Timestamp:
- Aug 9, 2013, 9:26:46 PM (11 years ago)
- Location:
- code/branches/core6/src/libraries/network/synchronisable
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/core6/src/libraries/network/synchronisable/Synchronisable.cc
r9564 r9629 49 49 * Initializes all Variables and sets the right objectID_ 50 50 */ 51 Synchronisable::Synchronisable( BaseObject* creator)51 Synchronisable::Synchronisable(Context* context) 52 52 { 53 53 RegisterRootObject(Synchronisable); … … 69 69 this->setPriority( Priority::Normal ); 70 70 71 // get creator id 72 if( creator ) 73 this->creatorID_ = creator->getSceneID(); 74 else 75 this->creatorID_ = OBJECTID_UNKNOWN; 71 // get context id 72 this->contextID_ = this->findContextID(context); 76 73 } 77 74 … … 100 97 } 101 98 99 /** 100 * @brief Returns the id of the context. 101 * If the context is not Synchronisable, it moves on to its parent, recursively. 102 */ 103 uint32_t Synchronisable::findContextID(Context* context) 104 { 105 if (context == NULL) 106 return OBJECTID_UNKNOWN; 107 108 Synchronisable* synchronisableContext = orxonox_cast<Synchronisable*>(context); 109 if (synchronisableContext != NULL) 110 return synchronisableContext->getObjectID(); 111 else 112 return this->findContextID(context->getParentContext()); 113 } 102 114 103 115 /** … … 142 154 } 143 155 assert(id); 144 BaseObject* creator= 0;145 if (header.getC reatorID() != OBJECTID_UNKNOWN)146 { 147 Synchronisable* synchronisable_c reator = Synchronisable::getSynchronisable(header.getCreatorID());148 if (!synchronisable_c reator)156 Context* context = 0; 157 if (header.getContextID() != OBJECTID_UNKNOWN) 158 { 159 Synchronisable* synchronisable_context = Synchronisable::getSynchronisable(header.getContextID()); 160 if (!synchronisable_context) 149 161 { 150 162 mem += header.getDataSize()+SynchronisableHeader::getSize(); //.TODO: this suckz.... remove size from header … … 153 165 } 154 166 else 155 c reator = orxonox_cast<BaseObject*>(synchronisable_creator);167 context = orxonox_cast<Context*>(synchronisable_context); 156 168 } 157 169 assert(getSynchronisable(header.getObjectID())==0); //make sure no object with this id exists 158 BaseObject *bo = orxonox_cast<BaseObject*>(id->fabricate(c reator));170 BaseObject *bo = orxonox_cast<BaseObject*>(id->fabricate(context)); 159 171 assert(bo); 160 172 Synchronisable *no = orxonox_cast<Synchronisable*>(bo); … … 162 174 assert( Synchronisable::objectMap_.find(header.getObjectID()) == Synchronisable::objectMap_.end() ); 163 175 no->setObjectID(header.getObjectID()); 164 //no->c reatorID=header.getCreatorID(); //TODO: remove this176 //no->contextID=header.getContextID(); //TODO: remove this 165 177 no->setClassID(header.getClassID()); 166 assert(no->creatorID_ == header.getCreatorID()); 167 if( creator ) 168 bo->setLevel(creator->getLevel()); // Note: this ensures that the level is known on the client for child objects of the scene (and the scene itself) 178 assert(no->contextID_ == header.getContextID()); 179 if( context ) 180 { 181 BaseObject* boContext = orxonox_cast<BaseObject*>(context); 182 if (boContext) 183 bo->setLevel(boContext->getLevel()); // Note: this ensures that the level is known on the client for child objects of the scene (and the scene itself) 184 } 169 185 //assert(no->classID_ == header.getClassID()); 170 186 orxout(verbose, context::network) << "fabricate objectID_: " << no->objectID_ << " classID_: " << no->classID_ << endl; … … 274 290 275 291 header.setObjectID( this->objectID_ ); 276 header.setC reatorID( this->creatorID_ );292 header.setContextID( this->contextID_ ); 277 293 header.setClassID( this->classID_ ); 278 294 header.setDataSize( tempsize ); … … 331 347 SynchronisableHeader syncHeader2(mem); 332 348 assert( this->getClassID() == syncHeader2.getClassID() ); 333 assert( this->getC reatorID() == syncHeader2.getCreatorID() );349 assert( this->getContextID() == syncHeader2.getContextID() ); 334 350 mem += SynchronisableHeader::getSize(); 335 351 std::vector<SynchronisableVariableBase *>::iterator i; -
code/branches/core6/src/libraries/network/synchronisable/Synchronisable.h
r9587 r9629 107 107 * @brief: stores information about a Synchronisable 108 108 * 109 * This class stores the information about a Synchronisable (objectID_, classID_, c reatorID_, dataSize)109 * This class stores the information about a Synchronisable (objectID_, classID_, contextID_, dataSize) 110 110 * in an emulated bitset. 111 111 * Bit 1 to 31 store the size of the Data the synchronisable consumes in the stream … … 113 113 * Byte 5 to 8: objectID_ 114 114 * Byte 9 to 12: classID_ 115 * Byte 13 to 16: c reatorID_115 * Byte 13 to 16: contextID_ 116 116 */ 117 117 class _NetworkExport SynchronisableHeader: public SynchronisableHeaderLight … … 126 126 inline void setClassID(uint32_t classID_) 127 127 { *(uint32_t*)(data_+SynchronisableHeaderLight::getSize()) = classID_; } 128 inline uint32_t getC reatorID() const128 inline uint32_t getContextID() const 129 129 { return *(uint32_t*)(data_+SynchronisableHeaderLight::getSize()+4); } 130 inline void setC reatorID(uint32_t creatorID_)131 { *(uint32_t*)(data_+SynchronisableHeaderLight::getSize()+4) = c reatorID_; }130 inline void setContextID(uint32_t contextID_) 131 { *(uint32_t*)(data_+SynchronisableHeaderLight::getSize()+4) = contextID_; } 132 132 inline void operator=(SynchronisableHeader& h) 133 133 { memcpy(data_, h.data_, getSize()); } … … 158 158 159 159 inline uint32_t getObjectID() const {return this->objectID_;} 160 inline unsigned int getC reatorID() const {return this->creatorID_;}160 inline unsigned int getContextID() const {return this->contextID_;} 161 161 inline uint32_t getClassID() const {return this->classID_;} 162 162 inline unsigned int getPriority() const { return this->objectFrequency_;} … … 170 170 171 171 protected: 172 Synchronisable( BaseObject* creator);172 Synchronisable(Context* context); 173 173 template <class T> void registerVariable(T& variable, uint8_t mode=0x1, NetworkCallbackBase *cb=0, bool bidirectional=false); 174 174 template <class T> void registerVariable(std::set<T>& variable, uint8_t mode=0x1, NetworkCallbackBase *cb=0, bool bidirectional=false); … … 176 176 177 177 void setPriority(unsigned int freq){ objectFrequency_ = freq; } 178 178 uint32_t findContextID(Context* context); 179 179 180 180 private: … … 189 189 190 190 uint32_t objectID_; 191 uint32_t c reatorID_;191 uint32_t contextID_; 192 192 uint32_t classID_; 193 193
Note: See TracChangeset
for help on using the changeset viewer.