Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

Last change on this file since 8076 was 8068, checked in by patrick, 18 years ago

trunk: merged the network branche back to trunk

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