ReplicaNet and RNLobby  1
DataBlock.h
1 /* START_LICENSE_HEADER
2 
3 Copyright (C) 2000 Martin Piper, original design and program code
4 Copyright (C) 2001 Replica Software
5 
6 This program file is copyright (C) Replica Software and can only be used under license.
7 For more information visit: http://www.replicanet.com/
8 Or email: info@replicanet.com
9 
10 END_LICENSE_HEADER */
11 #include "RNPlatform/Inc/MemoryTracking.h"
12 #ifndef __DATABLOCK_H__
13 #define __DATABLOCK_H__
14 #include <string>
15 
16 #include "RNPlatform/Inc/SysTime.h"
17 #include "RNPlatform/Inc/MinimalRTTI.h"
18 
19 namespace RNReplicaNet
20 {
21 
22 class MessageHelper;
23 class DynamicMessageHelper;
24 class ReplicaNet;
25 class ReplicaObject;
26 
27 const int kDataBlockReason_SomeoneJoined = 0;
28 const int kDataBlockReason_SomeoneLeft = 1;
29 const int kDataBlockReason_NormalPoll = 2;
30 const int kDataBlockReason_CalculateReplicaPoll = 4;
31 const int kDataBlockReason_CalculateMasterPoll = 5;
32 const int kDataBlockReason_MasterPrepAfterTakeover = 6;
33 const int kDataBlockReason_ReplicaCallBackPoll = 7;
34 const int kDataBlockReason_ReplicaPrepAfterTakeover = 8;
35 const int kDataBlockReason_RecordingNormalPoll = 9;
36 const int kDataBlockReason_AfterDataBlocksReceived = 10;
38 struct DataBlockReason;
39 
47 class DataBlock
48 {
49 friend class ReplicaObject;
50 public:
51  RN_CLASS_MINIMAL_RTTI_BASE_CLASS()
52  virtual int GetThisClassType(void); // Override this to assert if someone tries to directly query this base class. It should never happen.
56  DataBlock();
57 
61  virtual ~DataBlock();
62 
70  virtual void Poll(DataBlockReason *reason = 0,const bool discardOlderIncluded = false,const unsigned int discardOrder = 0);
71 
78  virtual void ParseMessage(MessageHelper *message);
79 
85  void SetVariableName(const char *name = 0);
86 
91  void BindReplicaNet(ReplicaNet *current);
92 
97  void BindReplicaObject(ReplicaObject *object);
98 
103  void SetReliableFlag(bool reliable = false);
104 
109  bool GetReliableFlag(void) const;
110 
115  void SetCertainFlag(bool certain = false);
116 
121  bool GetCertainFlag(void) const;
122 
127  void SetOrderedFlag(bool ordered = false);
128 
133  bool GetOrderedFlag(void) const;
134 
145  void SetDiscardOlder(const int windowBits = 0);
146 
151  int GetDiscardOlder(void) const;
152 
157  void SetAutomaticUpdatesFlag(bool automatic = true);
158 
163  bool GetAutomaticUpdatesFlag(void) const;
164 
170  virtual void GiveDeltaHint(void *pdata,int dataLen);
171 
176  void GiveDeltaHint(float delta)
177  {
178  GiveDeltaHint(&delta,sizeof(delta));
179  }
180 
185  {
186  kStop = 1,
189  };
190 
195  virtual void ContinuityBreak(unsigned char breakTypes);
196 
201  void SetForceReflectionUpdate(const bool enable = false);
202 
203  bool GetForceReflectionUpdate(void);
204 
209  void SetReflectionMasterUpdate(const bool enable = false);
210 
211  bool GetReflectionMasterUpdate(void);
212 
217  virtual bool IsAttached(void *data);
218 
223  virtual bool IsAllocated(void) const;
224 
229  void SetIsAllocated(const bool isAllocated = true);
230 
231 
241  void SetUpdateDelayMinimum(const float delay = 0.0f);
242 
247  float GetUpdateDelayMinimum(void) const;
248 
260  void SetForceSendMaximumUpdates(const int updates = 0);
261 
266  int GetForceSendMaximumUpdates(void) const;
267 
277  void SetForceSendTimeDelay(const float delay = 0.0f);
278 
283  float GetForceSendTimeDelay(void) const;
284 
289  void SetBand(const unsigned int band = 0);
290 
295  unsigned int GetBand(void) const;
296 
297 
301  bool ShouldDiscard(MessageHelper *message);
302 
306  virtual void OwnerChanged(const int sessionID);
307 
312  bool GetDiscardThisUpdate(void) const;
313 
314 protected: // User defined DataBlocks have access to these variables.
318  void SetID(int id);
319 
320  const char *GetROName(ReplicaObject *from = 0);
321 
322  void EmitBaseDebugInfo(const char *name,const char *className,DataBlockReason *reason);
323  void EmitBaseDebugInfoUpdates(const char *name,const char *className,DataBlockReason *reason);
324 
325  std::string GetVariableName(void);
326 
327  short mID;
328  ReplicaNet *mBoundReplicaNet;
329  ReplicaObject *mBoundObject;
330  bool mReliable;
331  bool mCertain;
332  bool mOrdered;
333  bool mAutomaticUpdates;
334  bool mIsAllocated;
335  bool mDebugOn;
336  char *mDebugText;
337  float mUpdateDelayMinimum;
338  int mForceSendMaximumUpdates;
339  float mForceSendTimeDelay;
340  char *mVariableName;
341  unsigned int mBand;
342  int mDiscardOlder;
343  unsigned int mDiscardOlderMidPoint;
344  unsigned int mDiscardOlderEndPoint;
345  size_t mDiscardOlderRealSize;
346  unsigned int mLocalisedOrderingSent;
347  unsigned int mLocalisedOrderingReceived;
348  bool mDiscardThisUpdate;
349 
350  bool mForceReflectionUpdate;
351  bool mReflectionMasterUpdate;
352 };
353 
358 {
359 public:
365  DataBlockReason(int code = kDataBlockReason_NormalPoll,int session = -1,ReplicaObject *object = 0)
366  {
367  mReasonCode = code;
368  mSessionReference = session;
369  mObserver = object;
370  mFloatValue = 0.0f;
371  mFloatTime = -1.0f;
372  }
373 
378  SysTimeType mFloatValue;
379  SysTimeType mFloatTime;
380  SysTimeType mFloatLocalTime;
381 };
382 
383 // This macro is used to finish any data block registration for a ReplicaObject
384 /* _RO_DO_REGISTERBLOCK_END macro starts here */
385 #define _RO_DO_REGISTERBLOCK_END() \
386  RegisterDataBlock(datablock); \
387  }
388 /* _RO_DO_REGISTERBLOCK_END macro ends here */
389 
390 } // namespace RNReplicaNet
391 
392 #endif
void SetReliableFlag(bool reliable=false)
Definition: DataBlock.h:188
ContinuityBreakTypes
Definition: DataBlock.h:184
Definition: DataBlock.h:357
void SetVariableName(const char *name=0)
SysTimeType mFloatValue
Definition: DataBlock.h:378
float GetUpdateDelayMinimum(void) const
virtual bool IsAllocated(void) const
bool GetDiscardThisUpdate(void) const
int mReasonCode
Definition: DataBlock.h:374
virtual void OwnerChanged(const int sessionID)
void GiveDeltaHint(float delta)
Definition: DataBlock.h:176
int GetForceSendMaximumUpdates(void) const
Definition: MessageHelper.h:35
void SetIsAllocated(const bool isAllocated=true)
int mSessionReference
Definition: DataBlock.h:375
virtual void Poll(DataBlockReason *reason=0, const bool discardOlderIncluded=false, const unsigned int discardOrder=0)
virtual void GiveDeltaHint(void *pdata, int dataLen)
ReplicaObject * mObserver
Definition: DataBlock.h:377
Definition: DataBlock.h:187
void SetUpdateDelayMinimum(const float delay=0.0f)
Definition: ROLCompilerDoc.cpp:288
void BindReplicaNet(ReplicaNet *current)
Definition: DataBlock.h:186
DynamicMessageHelper * mMessageHelper
Definition: DataBlock.h:376
void SetReflectionMasterUpdate(const bool enable=false)
Definition: ReplicaObject.h:43
Definition: ReplicaNet.h:110
bool ShouldDiscard(MessageHelper *message)
virtual void ContinuityBreak(unsigned char breakTypes)
virtual void ParseMessage(MessageHelper *message)
void SetBand(const unsigned int band=0)
float GetForceSendTimeDelay(void) const
bool GetReliableFlag(void) const
bool GetOrderedFlag(void) const
void SetAutomaticUpdatesFlag(bool automatic=true)
bool GetAutomaticUpdatesFlag(void) const
void SetOrderedFlag(bool ordered=false)
void SetForceSendTimeDelay(const float delay=0.0f)
void SetForceReflectionUpdate(const bool enable=false)
bool GetCertainFlag(void) const
void SetCertainFlag(bool certain=false)
void SetDiscardOlder(const int windowBits=0)
void BindReplicaObject(ReplicaObject *object)
void SetForceSendMaximumUpdates(const int updates=0)
Definition: MessageHelper.h:211
Definition: DataBlock.h:47
virtual bool IsAttached(void *data)
int GetDiscardOlder(void) const
DataBlockReason(int code=kDataBlockReason_NormalPoll, int session=-1, ReplicaObject *object=0)
Definition: DataBlock.h:365
unsigned int GetBand(void) const