Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/trunk/src/lib/network/synchronizeable.h

Last change on this file was 9869, checked in by bensch, 18 years ago

orxonox/trunk: merged the new_class_id branche back to the trunk.
merged with command:
svn merge https://svn.orxonox.net/orxonox/branches/new_class_id trunk -r9683:HEAD
no conflicts… puh..

File size: 3.2 KB
RevLine 
[5523]1/*!
[7954]2 * @file synchronizeable.h
[9406]3 * @brief interface for all classes that have to be synchronized
[5547]4 */
[5523]5
[5547]6#ifndef _SYNCHRONIZEABLE_H
7#define _SYNCHRONIZEABLE_H
[5523]8
[5997]9#include "base_object.h"
[9406]10
[7954]11#include "synchronizeable_var/synchronizeable_var.h"
12#include "synchronizeable_var/synchronizeable_vector.h"
13#include "synchronizeable_var/synchronizeable_quaternion.h"
14#include "synchronizeable_var/synchronizeable_string.h"
15#include "synchronizeable_var/synchronizeable_int.h"
16#include "synchronizeable_var/synchronizeable_float.h"
17#include "synchronizeable_var/synchronizeable_bool.h"
18#include "synchronizeable_var/synchronizeable_uint.h"
[9406]19#include "synchronizeable_var/synchronizeable_ip.h"
[5547]20
[5997]21#include <vector>
22#include <list>
23
24
[7954]25struct StateHistoryEntry
26{
27  int             stateId;
28  byte *          data;
29  int             dataLength;
30  std::list<int>  sizeList;
[6815]31};
32
[7954]33typedef std::list<StateHistoryEntry*> StateHistory;
[6815]34
[7954]35typedef std::vector<StateHistory> UserStateHistory;
[6959]36
[7954]37typedef std::vector<SynchronizeableVar*> SyncVarList;
[6815]38
[6139]39class NetworkStream;
[5997]40
[5581]41class Synchronizeable : virtual public BaseObject
[6695]42{
[9869]43  ObjectListDeclaration(Synchronizeable);
[6695]44
[5804]45  public:
[5996]46    Synchronizeable();
[6695]47    virtual ~Synchronizeable();
[5523]48
[7954]49    virtual void varChangeHandler( std::list<int> & id );
50
51    virtual int getStateDiff( int userId, byte* data, int maxLength, int stateId, int fromStateId, int priorityTH );
52    virtual int setStateDiff( int userId, byte* data, int length, int stateId, int fromStateId );
53    virtual void cleanUpUser( int userId );
54    virtual void handleSentState( int userId, int stateId, int fromStateId );
55    virtual void handleRecvState( int userId, int stateId, int fromStateId );
[9406]56
[7954]57    void registerVar( SynchronizeableVar * var );
58    int registerVarId( SynchronizeableVar * var );
59
[6341]60    inline void setUniqueID( int id ){ uniqueID = id; }
[6695]61    inline int  getUniqueID() const { return uniqueID; }
[5547]62
[6139]63    inline int getOwner(){ return owner; }
64    inline void setOwner(int owner){ this->owner = owner; }
65
[7954]66    /** @returns true if this Synchronizeable wants to be synchronized over network */
[6695]67    inline bool beSynchronized() { return this->bSynchronize; }
68    /** @param bSynchronize sets the Synchronizeable to be sunchronized or not */
69    inline void setSynchronized(bool bSynchronize) { this->bSynchronize = bSynchronize; }
[6139]70
[6695]71    inline void setNetworkStream(NetworkStream* stream) { this->networkStream = stream; }
72    inline NetworkStream* getNetworkStream() { return this->networkStream; }
[6139]73
74
[6695]75  protected:
[7954]76    NetworkStream*    networkStream;  //!< reference network stream we are connected to
[6139]77
[9406]78
[6695]79  private:
[7954]80    int               uniqueID;       //!< unique id assigned to synchronizeable
81    int               mLeafClassId;   //!< store leafClassId to send via states
82    int               owner;          //!< hostId of owner ( 0 if none / server )
83    bool              bSynchronize;   //!< do we need beeing synchronized?
[5547]84
[7954]85    SyncVarList       syncVarList;    //!< list containing variables to synchronize
[6139]86
[7954]87    UserStateHistory  sentStates;     //!< store already sent states to create diffs from, offset corresponds to the user id
88    UserStateHistory  recvStates;     //!< store recieved states to apply diffs, offset corresponds to the user id
89
[6695]90};
[5548]91#endif /* _SYNCHRONIZEABLE_H */
Note: See TracBrowser for help on using the repository browser.