11 #include "RNPlatform/Inc/MemoryTracking.h"
12 #ifndef __DATABLOCK_FUNCTION_H__
13 #define __DATABLOCK_FUNCTION_H__
15 #include "RNReplicaNet/Inc/DataBlock.h"
16 #include "RNPlatform/Inc/MessageHelper.h"
17 #include "RNPlatform/Inc/RegistryManagerMap.h"
20 namespace RNReplicaNet
23 struct CombinedDataPacket;
24 struct SessionBlock_Function;
59 RN_CLASS_MINIMAL_RTTI();
60 typedef void (tDataBlock_Function_funcp)(
void *classp,
void *data,
void *thisDataBlock);
72 virtual void Poll(
DataBlockReason *reason,
const bool discardOlderIncluded =
false,
const unsigned int discardOrder = 0);
82 static DataBlock_Function *
Register(
void *classp,tDataBlock_Function_funcp *funcp);
101 static void SetSessionIDFilter(
const int numSessionIDs = 0,
const int *sessionIDs = 0);
103 void AddFunctionStateChange(
void *data,
int len,
const char *debug = 0);
110 void FreeSessionBlocks(
void);
112 tDataBlock_Function_funcp *mData;
116 std::list<CombinedDataPacket *> mFunctionStateChanges;
118 static int mConfiguredNumSessions;
119 static int *mConfiguredSessionIDs;
124 void FunctionAddVariable(DynamicMessageHelper &message, T &variable)
126 message.AddVariable(&variable,
sizeof(variable));
131 void FunctionGetVariable(MessageHelper &message, T &variable)
133 message.GetVariable(&variable,
sizeof(variable));
140 #define _RO_DO_REGISTERBLOCK_FUNCTION_VAR(x) \
142 RNReplicaNet::DataBlock_Function *datablock = 0; \
143 datablock = RNReplicaNet::DataBlock_Function::Register((void *)this,&x); \
144 mDataBlockFunction_##x = datablock; \
145 _RO_DO_SETDATABLOCKVARIABLENAME(x);
150 #define _RO_MAKE_MEMBERFUNC(x) Call_##x
154 #define _RO_DO_MEMBERFUNC_PRESTAGE_DEF(x,y) \
155 void _MAKE_RO(x)::_RO_MAKE_MEMBERFUNC(y)(
160 #ifdef REPLICANET_VISUALDEBUGGER
161 #define _RO_DO_MEMBERFUNC_PRESTAGE(x) \
164 if (!mDataBlocksRegistered) \
168 RNReplicaNet::DynamicMessageHelper message; \
169 message.SetBufferSize(256); \
171 #else //ifdef REPLICANET_VISUALDEBUGGER
172 #define _RO_DO_MEMBERFUNC_PRESTAGE(x) \
175 if (!mDataBlocksRegistered) \
179 RNReplicaNet::DynamicMessageHelper message; \
180 message.SetBufferSize(256);
181 #endif //ifdef REPLICANET_VISUALDEBUGGER
185 #define _RO_DO_MEMBERFUNC_ADDVAR(x) \
186 RNReplicaNet::FunctionAddVariable(message,x);
188 #ifdef REPLICANET_VISUALDEBUGGER
189 #define _RO_DO_MEMBERFUNC_ADDVAR2(x,y) \
190 RNReplicaNet::FunctionAddVariable(message,x); \
191 if (RNReplicaNet::XPURL::GetDebugHandler()) \
195 debug += RNReplicaNet::MessageHelper::DumpAsHex(&x,sizeof(x)); \
198 #else // ifdef REPLICANET_VISUALDEBUGGER
199 #define _RO_DO_MEMBERFUNC_ADDVAR2(x,y) \
200 RNReplicaNet::FunctionAddVariable(message,x);
201 #endif // ifdef REPLICANET_VISUALDEBUGGER
205 #ifdef REPLICANET_VISUALDEBUGGER
206 #define _RO_DO_MEMBERFUNC_POSTSTAGE(x) \
207 RNReplicaNet::DataBlock_Function *datablock = (RNReplicaNet::DataBlock_Function *) mDataBlockFunction_##x; \
208 datablock->AddFunctionStateChange(message.GetBuffer(),message.GetSize(),debug.c_str()); \
210 #else //ifdef REPLICANET_VISUALDEBUGGER
211 #define _RO_DO_MEMBERFUNC_POSTSTAGE(x) \
212 RNReplicaNet::DataBlock_Function *datablock = (RNReplicaNet::DataBlock_Function *) mDataBlockFunction_##x; \
213 datablock->AddFunctionStateChange(message.GetBuffer(),message.GetSize()); \
215 #endif //ifdef REPLICANET_VISUALDEBUGGER
220 #define _RO_DO_MEMBERFUNC_CRACK_START(x,y) \
221 void _MAKE_RO(x)::y(void *classp,void *opaque_message,void *thisDataBlock) \
223 _MAKE_RO(x) *thisclass = (_MAKE_RO(x) *) classp; \
224 RNReplicaNet::MessageHelper *message = (RNReplicaNet::MessageHelper *) opaque_message; \
229 #define _RO_DO_MEMBERFUNC_MESSAGE_CRACK(x) \
230 RNReplicaNet::FunctionGetVariable(*message,x);
235 #define _RO_DO_MEMBERFUNC_CRACK_END(x,y) \
236 if (!((RNReplicaNet::DataBlock*)thisDataBlock)->GetDiscardThisUpdate()) \
242 #define _RO_DO_MEMBERFUNC_CRACK_END2() \
Definition: DataBlock.h:357
void RegisterInClassPointer(void *classp, tDataBlock_Function_funcp *funcp)
Definition: DataBlock_Function.h:89
Definition: DataBlock_Function.h:56
static DataBlock_Function * Register(void *classp, tDataBlock_Function_funcp *funcp)
bool IsAttached(void *data)
virtual void ParseMessage(MessageHelper *message)
Definition: MessageHelper.h:35
virtual void OwnerChanged(const int sessionID)
virtual void Poll(DataBlockReason *reason, const bool discardOlderIncluded=false, const unsigned int discardOrder=0)
static void SetSessionIDFilter(const int numSessionIDs=0, const int *sessionIDs=0)
Definition: DataBlock.h:47
virtual ~DataBlock_Function()