00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef __DATABLOCK_NDATA_H__
00012 #define __DATABLOCK_NDATA_H__
00013 #include "RNPlatform/Inc/DLLExportAPI.h"
00014
00015 #include "RNReplicaNet/Inc/DataBlock.h"
00016 #include "RNPlatform/Inc/RegistryManagerMap.h"
00017
00018 namespace RNReplicaNet
00019 {
00020
00025 class REPLICANETDLL_API DataBlock_NData : public DataBlock
00026 {
00027 public:
00031 DataBlock_NData();
00032
00036 virtual ~DataBlock_NData();
00037
00038 virtual void Poll(DataBlockReason *reason);
00039
00040 virtual void ParseMessage(MessageHelper *message);
00041
00048 static DataBlock_NData *Register(void *const data,const int size);
00049
00055 void RegisterInClassPointer(void *const data,const int size)
00056 {
00057 mData = data;
00058 mSize = size;
00059 }
00060
00066 void SetDefaultData(const void *data);
00067
00068 bool IsAttached(void *data);
00069
00070 void SetEndianTest(const bool test = true);
00071
00072 bool GetEndianTest(void) const;
00073
00074 protected:
00075 void *mData;
00076 int mSize;
00077
00078 struct SessionBlock_NData
00079 {
00080 SessionBlock_NData(int datasize);
00081
00082 virtual ~SessionBlock_NData();
00083
00084 void *mTestData;
00085
00086
00087
00088 float mLastUpdateSentLocalTime;
00089 int mNumForcedUpdates;
00090 };
00091
00092 RegistryManagerMap<int,SessionBlock_NData> mPerSessionData;
00093
00094 void *mDefaultData;
00095 bool mDisableEndian;
00096 };
00097
00098 }
00099
00100
00101 #define _RO_DO_REGISTERBLOCK_NDATA_VAR(x) \
00102 {\
00103 RNReplicaNet::DataBlock_NData *datablock = 0; \
00104 datablock = RNReplicaNet::DataBlock_NData::Register(&(basepoint->x),sizeof(basepoint->x)); \
00105 _RO_DO_SETDATABLOCKVARIABLENAME(x);
00106
00107
00108
00109 #define _RO_DO_REGISTERBLOCK_NDATA_VARAT(x) \
00110 {\
00111 RNReplicaNet::DataBlock_NData *datablock = 0; \
00112 datablock = RNReplicaNet::DataBlock_NData::Register((basepoint->x),sizeof(basepoint->x)); \
00113 _RO_DO_SETDATABLOCKVARIABLENAME(x);
00114
00115
00116
00117 #define _RO_DO_REGISTERBLOCK_NDATA_DISABLEENDIANTEST() \
00118 datablock->SetEndianTest(false);
00119
00120
00121
00122 #endif