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)