11 #include "RNPlatform/Inc/MemoryTracking.h" 
   12 #ifndef __REPLICAOBJECT_H__ 
   13 #define __REPLICAOBJECT_H__ 
   19 #include "RNPlatform/Inc/ThreadClass.h" 
   20 #include "RNPlatform/Inc/SysTime.h" 
   21 #include "RNReplicaNet/Inc/DataBlock.h" 
   23 namespace RNReplicaNet
 
   27 class ReplicaNetPrivate;
 
   28 struct s_RO_RegistryBlock;
 
   30 const float kReplicaObject_InfiniteDistance = -1.0f;    
 
   31 const int kReplicaObjectUnknownUniqueID = -1;
 
   48         kPacket_Unreliable = 0,
 
  200     template<
typename dataBlockType , 
typename dataType>
 
  208         if (datablock->IsClassType(dataBlockType::StaticThisClassType()))
 
  210             dataBlockType *realBlock = (dataBlockType*)(datablock);
 
  490     void DataSend(
const int sessionid,
const void *data,
const int length,
const PacketType type = kPacket_Reliable,
const unsigned int band = 0);
 
  500     virtual void CallBackDataReceive(
const int fromsessionid,
const void *data,
const int length,
const PacketType type);
 
  585     void SetBand(
const unsigned int band = 0);
 
  591     unsigned int GetBand(
void) 
const;
 
  621     virtual void _Internal_GetUpdateType(
void) {}
 
  622     virtual void _Internal_SetupLoadBalance(
void) {}
 
  623     virtual void _Internal_SetupLoadBalanceScore(
void) {}
 
  624     virtual void _Internal_SetupLoadBalanceDefault(
void) {}
 
  625     virtual void _Internal_SetupLoadBalanceScoreDefault(
void) {}
 
  626     virtual void _Internal_SetupOpaquePointer(
void) {}
 
  627     virtual void _Internal_SetupPropagateToSessionDistanceRecalculationDelay(
void) {}
 
  628     virtual void _Internal_SetupPropagateDistance(
void) {}
 
  629     virtual void _Internal_SetupPropagateDistanceDefault(
void) {}
 
  630     virtual void _Internal_SetupPropagateDistanceInclude(
void) {}
 
  631     virtual void _Internal_SetupPropagateDistanceIncludeDefault(
void) {}
 
  632     virtual void _Internal_SetupPropagateDistanceExclude(
void) {}
 
  633     virtual void _Internal_SetupPropagateDistanceExcludeDefault(
void) {}
 
  634     virtual void _Internal_SetupBand(
void) {}
 
  637     void _Internal_SetFullyQualifiedName(
const char *name = 0);
 
  638     const char *_Internal_GetFullyQualifiedName(
void);
 
  640     void _DebugInternal_EmitClassCreate(
const int packetSize,
const int toSession);
 
  641     void _DebugInternal_EmitClassDelete(
const int packetSize,
const int toSession);
 
  642     void _DebugInternal_EmitClassUnpublish(
const int packetSize,
const int toSession);
 
  650     virtual void SetNumExpectedDataBlocks(
const int expected);
 
  660 friend class ReplicaNet;            
 
  661 friend class ReplicaNetPrivate;     
 
  662 friend struct SessionUnique;        
 
  663 friend class DataBlock;
 
  667     virtual void PreRegisterDataBlocks(
void);   
 
  669     virtual void RegisterDataBlocks(
void);  
 
  671     void PollInternalForDistance(
const SysTimeType localTime,
ReplicaObject *observer,
const int sessionID);
 
  678     ReplicaNet *mBoundReplicaNet;   
 
  681     bool mDataBlocksRegistered;
 
  683     bool mFlagForLaterMigration;    
 
  684     void *mOpaquePointer;
 
  685     bool mOpaquePointerSet;
 
  690     bool mObjectHasBeenAdded;   
 
  691     bool mEnableLoadBalancing;
 
  693     bool mEnableLoadBalancingDefault;
 
  694     float mLoadScoreDefault;
 
  695     int mReflectSessionID;      
 
  696     float mDistanceToSessionPropagate;
 
  697     float mDistanceToSessionPropagateDefault;
 
  698     float mDistanceToSessionPropagateOuter;
 
  699     float mDistanceToSessionPropagateOuterDefault;
 
  700     bool mSessionPropagationFilter;
 
  702     std::vector<DataBlock *> mAutoRegister;
 
  704     std::vector<DataBlock *> mDataBlocks;   
 
  705     std::set<int> mSessionPropagationFilterIDs;
 
  707     std::set<int> mSessionPropagationFilterDelaySlotAdd;
 
  708     std::set<int> mSessionPropagationFilterDelaySlotRemove;
 
  711     bool mEnableDistanceBased;
 
  712     SysTimeType mDistanceBasedPollTime;
 
  713     SysTimeType mDistanceBasedLastTime;
 
  715     bool mMasterOrReplicaDataBlockPollDone;
 
  717     char *mFullyQualifiedName;
 
  718     bool mPostObjectCreateDone;
 
  720     std::set<int> mObserverFor;     
 
  722     int mProcessingDataBlocksFromSessionID;
 
  724     float mDelayDeleteSeconds;
 
  725     SysTimeType mDelayDeleteTime;   
 
  726     bool mUpdateSendDormant;
 
  728     bool mDormantDelayActive;
 
  729     bool mDormantDelayState;
 
  730     float mDormantDelaySeconds;
 
  731     SysTimeType mDormantDelayTime;
 
  735     bool mGetNewSessionIDAndUniqueIDCalled;
 
  737     static bool mDelayIDFetch;
 
  738     static bool mDelayBind;
 
virtual bool ApproveMigration(void)
 
void DataSend(const int sessionid, const void *data, const int length, const PacketType type=kPacket_Reliable, const unsigned int band=0)
 
bool GetUpdateSendDormant(void) const 
 
void AddAutoRegisterDataBlock(DataBlock *const dataBlock)
 
virtual void RegisterDataBlock(DataBlock *block)
 
bool UpdateIsReliable(void)
 
virtual float CalculateDistanceToObject(ReplicaObject *object)
 
bool GetSessionPropagationFilter(void) const 
 
void SetPropagateToSessionDistanceIncludeDefault(const float distance=kReplicaObject_InfiniteDistance)
 
bool UpdateIsOrdered(void)
 
virtual void SetRegistered(bool flag=true)=0
 
void DelayedDelete(const float delaySeconds=0.0f)
 
float GetDistanceToObject(ReplicaObject *object)
 
virtual void CallBackDataReceive(const int fromsessionid, const void *data, const int length, const PacketType type)
 
virtual bool ApproveFault(void)
 
bool GetNewSessionIDAndUniqueID(RNReplicaNet::ReplicaNet *toBindTo=0)
 
float GetPropagateToSessionDistanceInclude(void) const 
 
void UpdateSetUnreliable(void)
 
bool UpdateIsCertain(void)
 
void GiveOwnership(int sessionID)
 
ReplicaNet * GetBoundReplicaNet(void)
 
virtual bool GetRegistered(void)=0
 
bool UpdateIsUnreliable(void)
 
void SetPropagateToSessionDistanceExcludeDefault(const float distance=kReplicaObject_InfiniteDistance)
 
bool GetDelayedDelete(void)
 
virtual void DataBlockPacketDataReceivedPost(const DataBlock *datablock)
 
bool SessionPropagationAddSession(const int sessionID)
 
void UpdateSetReliable(void)
 
void SetLoadBalancing(const bool enable=false)
 
void GiveDeltaHint(float &variable, float delta)
 
virtual void DataBlockPacketDataReceived(const DataBlock *datablock)
 
void UpdateSetCertain(void)
 
bool SessionPropagationRemoveSession(const int sessionID)
 
bool IsReplica(void) const 
 
void SetBand(const unsigned int band=0)
 
void UpdateSetOrdered(void)
 
void SetPropagateToSessionDistanceExclude(const float distance=kReplicaObject_InfiniteDistance)
 
virtual void CallbackObjectUnpublishPost(void)
 
void GetSessionPropagationSet(std::set< int > &theSet)
 
bool GetUpdateSendDormantDelay(bool &dormant, float &delaySeconds) const 
 
virtual s_RO_RegistryBlock * GetRegistryBlock(void) const =0
 
static void DeleteForReplicaNet(ReplicaObject *object)
 
float GetPropagateToSessionDistance(void) const 
 
static ReplicaObject * AllocateForReplicaNet(void)
 
static void SetDelayIDFetch(const bool delay=false)
 
bool GetLoadBalancing(void)
 
void SetLoadBalancingDefault(const bool defaultValue=false)
 
void SetPropagateToSessionDistance(const float distance=kReplicaObject_InfiniteDistance)
 
virtual void SetOpaquePointer(void *data)
 
void SetLoadScore(const float load=0.0f)
 
virtual void PostObjectCreate(void)
 
float GetPropagateToSessionDistanceExclude(void) const 
 
int GetMessageReflectionID(void) const 
 
Definition: ReplicaObject.h:43
 
unsigned int GetBand(void) const 
 
Definition: ReplicaNet.h:110
 
void ContinuityBreak(float &variable, unsigned char breakTypes)
 
virtual void OwnerChange(void)
 
static bool GetDelayBind(void)
 
void UpdateSendDormantDelay(const bool dormant=false, const float delaySeconds=0.0f)
 
void SetSessionPropagationFilter(const bool enable=false)
 
virtual int GetNumExpectedDataBlocks(void)
 
Definition: RO_RegistryBlock.h:29
 
void UpdateSendDormantDelayCancel(void)
 
virtual void CallbackObjectUnpublishPre(void)
 
void SetPropagateToSessionDistanceInclude(const float distance=kReplicaObject_InfiniteDistance)
 
bool IsPublished(void) const 
 
void SetMessageReflectionID(const int sessionID=kReplicaObjectUnknownUniqueID)
 
void DelayedDeleteCancel(void)
 
void SetLoadScoreDefault(const float defaultLoad=0.0f)
 
void RequestOwnership(void)
 
virtual const int GetClassID(void)=0
 
static void SetDelayBind(const bool delay=false)
 
void SetPropagateToSessionDistanceRecalculationDelay(const float delay=0.1f)
 
Definition: ThreadClass.h:39
 
bool IsMaster(void) const 
 
virtual void * GetOpaquePointer(void *data=0)
 
void UpdateSendDormant(const bool dormant=false)
 
void SetPropagateToSessionDistanceDefault(const float distance=kReplicaObject_InfiniteDistance)
 
virtual void UserRegisterDataBlocks(void)
 
dataBlockType * FindDataBlock(dataType &member)
Definition: ReplicaObject.h:201
 
int GetProcessingDataBlocksFromSessionID(void)
 
Definition: DataBlock.h:47
 
virtual void UpdateSendDormantDelayStateChange(const bool dormant)
 
static bool GetDelayIDFetch(void)
 
DataBlock * FindDataBlock(void *pdata)