- Timestamp:
- Nov 22, 2008, 11:54:48 AM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/network64/src/network/synchronisable/Synchronisable.h
r2211 r2245 35 35 #include <map> 36 36 #include <queue> 37 #include "util/Integers.h" 37 #include <cassert> 38 #include "util/Math.h" 39 #include "util/mbool.h" 38 40 #include "core/OrxonoxClass.h" 39 #include "core/XMLIncludes.h" 41 // TODO: this has to be removed 42 // #include <OgreLight.h> 43 // #include "OrxonoxPrereqs.h" 44 // ============================ 40 45 #include "NetworkCallback.h" 41 #include " util/Integers.h"46 #include "SynchronisableVariable.h" 42 47 43 #define REGISTERDATA(varname, ...) \48 /*#define REGISTERDATA(varname, ...) \ 44 49 registerVariable((void*)&varname, sizeof(varname), DATA, __VA_ARGS__) 45 50 #define REGISTERSTRING(stringname, ...) \ 46 registerVariable(&stringname, stringname.length()+1, STRING, __VA_ARGS__) 51 registerVariable(&stringname, stringname.length()+1, STRING, __VA_ARGS__)*/ 47 52 48 53 namespace orxonox … … 50 55 static const unsigned int OBJECTID_UNKNOWN = (unsigned int)-1; 51 56 52 namespace direction{53 enum syncdirection{57 namespace objectDirection{ 58 enum objectdirection{ 54 59 toclient=0x1, 55 60 toserver=0x2, 56 bidirectional=0x3, 57 serverMaster=0x3, 58 clientMaster=0x7 61 bidirectional=0x3 59 62 }; 60 63 } 61 62 namespace syncmode{63 enum mode{64 once=0,65 always=166 };67 }68 69 enum variableType{70 DATA,71 STRING,72 };73 64 74 65 struct _NetworkExport synchronisableHeader{ … … 80 71 }; 81 72 82 struct _NetworkExport synchronisableVariable{83 size_t size;84 uint8_t mode; // this determines in which direction the variable gets synchronised85 void *var;86 variableType type;87 NetworkCallbackBase *callback;88 void *varBuffer;89 uint8_t varReference;90 };91 73 92 74 /** … … 101 83 virtual ~Synchronisable(); 102 84 103 104 virtual bool create();105 85 static void setClient(bool b); 106 86 … … 115 95 protected: 116 96 Synchronisable(BaseObject* creator); 117 void registerVariable(void *var, int size, variableType t, uint8_t mode=0x1, NetworkCallbackBase *cb=0); 118 void unregisterVariable(void *var); 97 // void registerVariable(void *var, int size, variableType t, uint8_t mode=0x1, NetworkCallbackBase *cb=0); 98 template <class T> void registerVariable(T& variable, uint8_t mode=0x1, NetworkCallbackBase *cb=0, bool bidirectional=false); 99 template <class T> void unregisterVariable(T& var); 119 100 void setObjectMode(uint8_t mode); 120 101 void setObjectFrequency(unsigned int freq){ objectFrequency_ = freq; } … … 133 114 unsigned int classID; 134 115 135 std::list< synchronisableVariable *> *syncList;116 std::list<SynchronisableVariableBase*> syncList; 136 117 static uint8_t state_; // detemines wheter we are server (default) or client 137 118 bool backsync_; // if true the variables with mode > 1 will be synchronised to server (client -> server) … … 141 122 static std::queue<unsigned int> deletedObjects_; 142 123 }; 124 125 template <class T> void Synchronisable::registerVariable(T& variable, uint8_t mode, NetworkCallbackBase *cb, bool bidirectional) 126 { 127 if (bidirectional) 128 syncList.push_back(new SynchronisableVariableBidirectional<const T>(variable, mode, cb)); 129 else 130 syncList.push_back(new SynchronisableVariable<const T>(variable, mode, cb)); 131 } 132 133 template <class T> void Synchronisable::unregisterVariable(T& var){ 134 std::list<SynchronisableVariableBase*>::iterator it = syncList.begin(); 135 while(it!=syncList.end()){ 136 if( ((*it)->getReference()) == &var ){ 137 delete (*it); 138 syncList.erase(it); 139 return; 140 } 141 else 142 it++; 143 } 144 bool unregistered_nonexistent_variable = false; 145 assert(unregistered_nonexistent_variable); //if we reach this point something went wrong: 146 // the variable has not been registered before 147 } 148 149 // ================= Specialisation declarations 150 template <> void Synchronisable::registerVariable( const ColourValue& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional);template <> void Synchronisable::registerVariable( const ColourValue& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional); 151 template <> void Synchronisable::registerVariable( ColourValue& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional); 152 template <> void Synchronisable::registerVariable( const Vector2& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional); 153 template <> void Synchronisable::registerVariable( Vector2& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional); 154 template <> void Synchronisable::registerVariable( const Vector3& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional); 155 template <> void Synchronisable::registerVariable( Vector3& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional); 156 template <> void Synchronisable::registerVariable( const Vector4& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional); 157 template <> void Synchronisable::registerVariable( Vector4& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional); 158 template <> void Synchronisable::registerVariable( mbool& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional); 159 template <> void Synchronisable::registerVariable( const Quaternion& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional); 160 template <> void Synchronisable::registerVariable( Quaternion& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional); 161 // template <> void Synchronisable::registerVariable( LODParticle::LOD& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional); 162 // template <> void Synchronisable::registerVariable( Ogre::Light::LightTypes& variable, uint8_t mode, NetworkCallbackBase* cb, bool bidirectional); 143 163 } 144 164
Note: See TracChangeset
for help on using the changeset viewer.