- Timestamp:
- May 26, 2009, 9:20:57 PM (15 years ago)
- Location:
- code/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
code/trunk
- Property svn:mergeinfo changed
-
code/trunk/src/network/synchronisable/SynchronisableVariable.h
r2896 r3084 21 21 * 22 22 * Author: 23 * Oliver Scheuss , (C) 200823 * Oliver Scheuss 24 24 * Co-authors: 25 25 * ... … … 35 35 #include <string> 36 36 #include <cassert> 37 #include "util/Math.h" 37 #include "util/Serialise.h" 38 #include "core/Core.h" 39 #include "core/CoreIncludes.h" 40 #include "core/GameMode.h" 38 41 #include "network/synchronisable/NetworkCallback.h" 39 42 #include "network/synchronisable/NetworkCallbackManager.h" … … 55 58 { 56 59 public: 57 virtual voidgetData(uint8_t*& mem, uint8_t mode)=0;60 virtual uint32_t getData(uint8_t*& mem, uint8_t mode)=0; 58 61 virtual void putData(uint8_t*& mem, uint8_t mode, bool forceCallback = false)=0; 59 62 virtual uint32_t getSize(uint8_t mode)=0; … … 62 65 virtual ~SynchronisableVariableBase() {} 63 66 protected: 64 static void setState();65 67 static uint8_t state_; 66 68 }; … … 74 76 75 77 virtual inline uint8_t getMode(){ return mode_; } 76 virtual inline voidgetData(uint8_t*& mem, uint8_t mode);78 virtual inline uint32_t getData(uint8_t*& mem, uint8_t mode); 77 79 virtual inline void putData(uint8_t*& mem, uint8_t mode, bool forceCallback = false); 78 80 virtual inline uint32_t getSize(uint8_t mode); 79 81 virtual inline void* getReference(){ return (void *)&this->variable_; } 80 82 protected: 81 bool checkEquality(uint8_t* mem);82 void setAndIncrease(uint8_t*& mem);83 void getAndIncrease(uint8_t*& mem);84 uint32_t returnSize();85 83 86 84 T& variable_; … … 97 95 98 96 virtual inline uint8_t getMode(){ return 0x3; } //this basically is a hack ^^ 99 virtual voidgetData(uint8_t*& mem, uint8_t mode);97 virtual inline uint32_t getData(uint8_t*& mem, uint8_t mode); 100 98 virtual void putData(uint8_t*& mem, uint8_t mode, bool forceCallback = false); 101 virtual uint32_t getSize(uint8_t mode);99 virtual inline uint32_t getSize(uint8_t mode); 102 100 private: 103 101 T varBuffer_; … … 110 108 variable_( variable ), mode_( syncDirection ), callback_( cb ) 111 109 { 112 setState(); 110 if ( state_ == 0x0 ) 111 { 112 state_ = GameMode::isMaster() ? 0x1 : 0x2; // set the appropriate mode here 113 } 113 114 } 114 115 … … 119 120 } 120 121 121 template <class T> voidSynchronisableVariable<T>::getData(uint8_t*& mem, uint8_t mode)122 template <class T> inline uint32_t SynchronisableVariable<T>::getData(uint8_t*& mem, uint8_t mode) 122 123 { 123 124 if ( state_ == this->mode_ ) 124 getAndIncrease( mem ); 125 // mem += SynchronisableVariable<T>::getSize(); 125 { 126 saveAndIncrease( this->variable_, mem ); 127 return returnSize( this->variable_ ); 128 } 129 else 130 return 0; 126 131 } 127 132 … … 135 140 if ( this->callback_ != 0 ) 136 141 { 137 if( forceCallback || !checkEquality( mem ) )142 if( forceCallback || !checkEquality( this->variable_, mem ) ) 138 143 callback = true; 139 144 } 140 145 // write the data 141 setAndIncrease( mem ); 142 // mem += SynchronisableVariable<T>::getSize(); 146 loadAndIncrease( this->variable_, mem ); 143 147 // now do a callback if neccessary 144 148 if ( callback ) 145 149 NetworkCallbackManager::triggerCallback( this->callback_ ); 146 //this->callback_->call(); 147 } 148 149 template <class T> uint32_t SynchronisableVariable<T>::getSize(uint8_t mode) 150 } 151 152 template <class T> inline uint32_t SynchronisableVariable<T>::getSize(uint8_t mode) 150 153 { 151 154 if ( mode == this->mode_ ) 152 return returnSize( );155 return returnSize( this->variable_ ); 153 156 else 154 157 return 0; 155 158 } 156 159 157 template <> _NetworkExport uint32_t SynchronisableVariable<const bool>::returnSize();158 template <> _NetworkExport void SynchronisableVariable<const bool>::setAndIncrease(uint8_t*& mem);159 template <> _NetworkExport void SynchronisableVariable<const bool>::getAndIncrease(uint8_t*& mem);160 template <> _NetworkExport bool SynchronisableVariable<const bool>::checkEquality(uint8_t* mem);161 template <> _NetworkExport uint32_t SynchronisableVariable<const unsigned char>::returnSize();162 template <> _NetworkExport void SynchronisableVariable<const unsigned char>::setAndIncrease(uint8_t*& mem);163 template <> _NetworkExport void SynchronisableVariable<const unsigned char>::getAndIncrease(uint8_t*& mem);164 template <> _NetworkExport bool SynchronisableVariable<const unsigned char>::checkEquality(uint8_t* mem);165 template <> _NetworkExport uint32_t SynchronisableVariable<const short>::returnSize();166 template <> _NetworkExport void SynchronisableVariable<const short>::setAndIncrease(uint8_t*& mem);167 template <> _NetworkExport void SynchronisableVariable<const short>::getAndIncrease(uint8_t*& mem);168 template <> _NetworkExport bool SynchronisableVariable<const short>::checkEquality(uint8_t* mem);169 template <> _NetworkExport uint32_t SynchronisableVariable<const unsigned short>::returnSize();170 template <> _NetworkExport void SynchronisableVariable<const unsigned short>::setAndIncrease(uint8_t*& mem);171 template <> _NetworkExport void SynchronisableVariable<const unsigned short>::getAndIncrease(uint8_t*& mem);172 template <> _NetworkExport bool SynchronisableVariable<const unsigned short>::checkEquality(uint8_t* mem);173 template <> _NetworkExport uint32_t SynchronisableVariable<const int>::returnSize();174 template <> _NetworkExport void SynchronisableVariable<const int>::setAndIncrease(uint8_t*& mem);175 template <> _NetworkExport void SynchronisableVariable<const int>::getAndIncrease(uint8_t*& mem);176 template <> _NetworkExport bool SynchronisableVariable<const int>::checkEquality(uint8_t* mem);177 template <> _NetworkExport uint32_t SynchronisableVariable<const unsigned int>::returnSize();178 template <> _NetworkExport void SynchronisableVariable<const unsigned int>::setAndIncrease(uint8_t*& mem);179 template <> _NetworkExport void SynchronisableVariable<const unsigned int>::getAndIncrease(uint8_t*& mem);180 template <> _NetworkExport bool SynchronisableVariable<const unsigned int>::checkEquality(uint8_t* mem);181 template <> _NetworkExport uint32_t SynchronisableVariable<const long>::returnSize();182 template <> _NetworkExport void SynchronisableVariable<const long>::setAndIncrease(uint8_t*& mem);183 template <> _NetworkExport void SynchronisableVariable<const long>::getAndIncrease(uint8_t*& mem);184 template <> _NetworkExport bool SynchronisableVariable<const long>::checkEquality(uint8_t* mem);185 template <> _NetworkExport uint32_t SynchronisableVariable<const unsigned long>::returnSize();186 template <> _NetworkExport void SynchronisableVariable<const unsigned long>::setAndIncrease(uint8_t*& mem);187 template <> _NetworkExport void SynchronisableVariable<const unsigned long>::getAndIncrease(uint8_t*& mem);188 template <> _NetworkExport bool SynchronisableVariable<const unsigned long>::checkEquality(uint8_t* mem);189 template <> _NetworkExport uint32_t SynchronisableVariable<const long long>::returnSize();190 template <> _NetworkExport void SynchronisableVariable<const long long>::setAndIncrease(uint8_t*& mem);191 template <> _NetworkExport void SynchronisableVariable<const long long>::getAndIncrease(uint8_t*& mem);192 template <> _NetworkExport bool SynchronisableVariable<const long long>::checkEquality(uint8_t* mem);193 template <> _NetworkExport uint32_t SynchronisableVariable<const unsigned long long>::returnSize();194 template <> _NetworkExport void SynchronisableVariable<const unsigned long long>::setAndIncrease(uint8_t*& mem);195 template <> _NetworkExport void SynchronisableVariable<const unsigned long long>::getAndIncrease(uint8_t*& mem);196 template <> _NetworkExport bool SynchronisableVariable<const unsigned long long>::checkEquality(uint8_t* mem);197 template <> _NetworkExport uint32_t SynchronisableVariable<const float>::returnSize();198 template <> _NetworkExport void SynchronisableVariable<const float>::setAndIncrease(uint8_t*& mem);199 template <> _NetworkExport void SynchronisableVariable<const float>::getAndIncrease(uint8_t*& mem);200 template <> _NetworkExport bool SynchronisableVariable<const float>::checkEquality(uint8_t* mem);201 template <> _NetworkExport uint32_t SynchronisableVariable<const double>::returnSize();202 template <> _NetworkExport void SynchronisableVariable<const double>::setAndIncrease(uint8_t*& mem);203 template <> _NetworkExport void SynchronisableVariable<const double>::getAndIncrease(uint8_t*& mem);204 template <> _NetworkExport bool SynchronisableVariable<const double>::checkEquality(uint8_t* mem);205 template <> _NetworkExport uint32_t SynchronisableVariable<const long double>::returnSize();206 template <> _NetworkExport void SynchronisableVariable<const long double>::setAndIncrease(uint8_t*& mem);207 template <> _NetworkExport void SynchronisableVariable<const long double>::getAndIncrease(uint8_t*& mem);208 template <> _NetworkExport bool SynchronisableVariable<const long double>::checkEquality(uint8_t* mem);209 template <> _NetworkExport uint32_t SynchronisableVariable<const std::string>::returnSize();210 template <> _NetworkExport void SynchronisableVariable<const std::string>::setAndIncrease(uint8_t*& mem);211 template <> _NetworkExport void SynchronisableVariable<const std::string>::getAndIncrease(uint8_t*& mem);212 template <> _NetworkExport bool SynchronisableVariable<const std::string>::checkEquality(uint8_t* mem);213 template <> _NetworkExport uint32_t SynchronisableVariable<const Degree>::returnSize();214 template <> _NetworkExport void SynchronisableVariable<const Degree>::setAndIncrease(uint8_t*& mem);215 template <> _NetworkExport void SynchronisableVariable<const Degree>::getAndIncrease(uint8_t*& mem);216 template <> _NetworkExport bool SynchronisableVariable<const Degree>::checkEquality(uint8_t* mem);217 160 218 161 … … 229 172 } 230 173 231 template <class T> voidSynchronisableVariableBidirectional<T>::getData(uint8_t*& mem, uint8_t mode)174 template <class T> uint32_t SynchronisableVariableBidirectional<T>::getData(uint8_t*& mem, uint8_t mode) 232 175 { 233 176 if ( this->mode_ == mode ) … … 243 186 mem += sizeof(this->varReference_); 244 187 // now write the content 245 SynchronisableVariable<T>::getAndIncrease(mem );246 // mem += SynchronisableVariable<T>::getSize();188 saveAndIncrease( this->variable_, mem ); 189 return SynchronisableVariableBidirectional::getSize(mode); 247 190 } 248 191 … … 255 198 if ( *static_cast<uint8_t*>(mem) != this->varReference_ ) 256 199 { // wrong reference number, so discard the data 200 // COUT(0) << "discharding data" << endl; 257 201 mem += getSize( mode ); // SynchronisableVariableBidirectional::getSize returns size of variable + reference 258 202 return; … … 260 204 else{ 261 205 // apply data 262 mem += sizeof(varReference_); 263 if ( SynchronisableVariableBidirectional<T>::checkEquality( mem )==true ) 206 if ( checkEquality( this->variable_, mem+sizeof(varReference_) )==true ) 264 207 { 265 mem += SynchronisableVariable<T>::getSize( mode );208 mem += getSize( mode ); 266 209 return; 267 210 } 268 211 else 269 212 { 213 mem += sizeof(varReference_); 270 214 memcpy((void*)&this->varBuffer_, &this->variable_, sizeof(T)); 271 215 if ( this->callback_ != 0 ) … … 285 229 this->varReference_ = *static_cast<uint8_t*>(mem); 286 230 mem += sizeof(varReference_); 287 if ( SynchronisableVariable<T>::checkEquality(mem ) == false )231 if ( checkEquality( this->variable_, mem ) == false ) 288 232 { 289 233 // value changed so remark for callback … … 294 238 } 295 239 // now write the data 296 SynchronisableVariable<T>::setAndIncrease(mem);240 loadAndIncrease(this->variable_, mem); 297 241 // now do a callback if neccessary 298 242 if ( callback ) 299 243 NetworkCallbackManager::triggerCallback( this->callback_ ); 300 //this->callback_->call(); 301 } 302 303 template <class T> uint32_t SynchronisableVariableBidirectional<T>::getSize(uint8_t mode) 304 { 305 return SynchronisableVariable<T>::returnSize() + sizeof(varReference_); 244 } 245 246 template <class T> inline uint32_t SynchronisableVariableBidirectional<T>::getSize(uint8_t mode) 247 { 248 return returnSize( this->variable_ ) + sizeof(varReference_); 306 249 } 307 250
Note: See TracChangeset
for help on using the changeset viewer.