Main Page | Class Hierarchy | Class List | Directories | File List | Class Members

DataBlock.h

00001 /* START_LICENSE_HEADER
00002 
00003 Copyright (C) 2000 Martin Piper, original design and program code
00004 Copyright (C) 2001-2005 Replica Software
00005 
00006 This program file is copyright (C) Replica Software and can only be used under license.
00007 For more information visit: http://www.replicanet.com/
00008 Or email: info@replicanet.com
00009 
00010 END_LICENSE_HEADER */
00011 #ifndef __DATABLOCK_H__
00012 #define __DATABLOCK_H__
00013 #include "RNPlatform/Inc/DLLExportAPI.h"
00014 #include <string>
00015 
00016 namespace RNReplicaNet
00017 {
00018 
00019 class MessageHelper;
00020 class ReplicaNet;
00021 class ReplicaObject;
00022 
00023 const int kDataBlockReason_SomeoneJoined            = 0;    
00024 const int kDataBlockReason_SomeoneLeft              = 1;    
00025 const int kDataBlockReason_NormalPoll               = 2;    
00026 const int kDataBlockReason_CalculateReplicaPoll     = 4;    
00027 const int kDataBlockReason_CalculateMasterPoll      = 5;    
00028 const int kDataBlockReason_MasterPrepAfterTakeover  = 6;    
00029 const int kDataBlockReason_ReplicaCallBackPoll      = 7;    
00030 const int kDataBlockReason_ReplicaPrepAfterTakeover = 8;    
00031 const int kDataBlockReason_RecordingNormalPoll      = 9;    
00033 struct DataBlockReason;
00034 
00041 class REPLICANETDLL_API DataBlock
00042 {
00043 friend class ReplicaObject;
00044 public:
00048     DataBlock();
00049 
00053     virtual ~DataBlock();
00054 
00059     virtual void Poll(DataBlockReason *reason = 0);
00060 
00065     virtual void ParseMessage(MessageHelper *message);
00066 
00072     void SetVariableName(const char *name = 0);
00073 
00078     void BindReplicaNet(ReplicaNet *current);
00079 
00084     void BindReplicaObject(ReplicaObject *object);
00085 
00090     void SetReliableFlag(bool reliable = false);
00091 
00096     bool GetReliableFlag(void);
00097 
00102     void SetCertainFlag(bool certain = false);
00103 
00108     bool GetCertainFlag(void);
00109 
00114     void SetAutomaticUpdatesFlag(bool automatic = true);
00115 
00120     bool GetAutomaticUpdatesFlag(void);
00121 
00127     virtual void GiveDeltaHint(void *pdata,int dataLen);
00128 
00133     void GiveDeltaHint(float delta)
00134     {
00135         GiveDeltaHint(&delta,sizeof(delta));
00136     }
00137 
00141     enum ContinuityBreakTypes
00142     {
00143         kStop = 1,              
00144         kSuddenChange = 2,      
00145         kTeleport = 4           
00146     };
00147 
00152     virtual void ContinuityBreak(unsigned char breakTypes);
00153 
00158     virtual bool IsAttached(void *data);
00159 
00164     virtual bool IsAllocated(void) const;
00165 
00170     void SetIsAllocated(const bool isAllocated = true);
00171 
00172 
00182     void SetUpdateDelayMinimum(const float delay = 0.0f);
00183 
00188     float GetUpdateDelayMinimum(void) const;
00189 
00201     void SetForceSendMaximumUpdates(const int updates = 0);
00202 
00207     int GetForceSendMaximumUpdates(void) const;
00208 
00218     void SetForceSendTimeDelay(const float delay = 0.0f);
00219 
00224     float GetForceSendTimeDelay(void) const;
00225     
00226 protected:
00230     void SetID(int id);
00231 
00232     const char *GetROName(ReplicaObject *from = 0);
00233 
00234     void EmitBaseDebugInfo(const char *name,const char *className,DataBlockReason *reason);
00235     void EmitBaseDebugInfoUpdates(const char *name,const char *className,DataBlockReason *reason);
00236 
00237     std::string GetVariableName(void);
00238 
00239     short mID;
00240     ReplicaNet *mBoundReplicaNet;
00241     ReplicaObject *mBoundObject;
00242     bool mReliable;
00243     bool mCertain;
00244     bool mAutomaticUpdates;
00245     bool mIsAllocated;
00246     bool mDebugOn;
00247     char *mDebugText;
00248     float mUpdateDelayMinimum;
00249     int mForceSendMaximumUpdates;
00250     float mForceSendTimeDelay;
00251     char *mVariableName;
00252 };
00253 
00257 struct REPLICANETDLL_API DataBlockReason
00258 {
00259 public:
00265     DataBlockReason(int code = kDataBlockReason_NormalPoll,int session = -1,ReplicaObject *object = 0)
00266     {
00267         mReasonCode = code;
00268         mSessionReference = session;
00269         mObserver = object;
00270         mFloatValue = 0.0f;
00271         mFloatTime = -1.0f;
00272     }
00273 
00274     int mReasonCode;                    
00275     int mSessionReference;              
00276     MessageHelper *mMessageHelper;      
00277     ReplicaObject *mObserver;           
00278     float mFloatValue;                  
00279     float mFloatTime;
00280     float mFloatLocalTime;
00281 };
00282 
00283 // This macro is used to finish any data block registration for a ReplicaObject
00284 /* _RO_DO_REGISTERBLOCK_END macro starts here */
00285 #define _RO_DO_REGISTERBLOCK_END()  \
00286         RegisterDataBlock(datablock);   \
00287     }
00288 /* _RO_DO_REGISTERBLOCK_END macro ends here */
00289 
00290 } // namespace RNReplicaNet
00291 
00292 #endif

Generated on Sun Oct 30 01:11:54 2005 for ReplicaNet by  doxygen 1.4.1