Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/branches/proxy/src/lib/network/synchronizeable.h @ 9334

Last change on this file since 9334 was 9295, checked in by patrick, 18 years ago

extended the handshake structure to support synchronization of proxy server addresses

File size: 3.4 KB
Line 
1/*!
2 * @file synchronizeable.h
3    \brief interface for all classes that have to be synchronized
4 */
5
6#ifndef _SYNCHRONIZEABLE_H
7#define _SYNCHRONIZEABLE_H
8
9#include "base_object.h"
10#include "netdefs.h"
11#include "converter.h"
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"
22#include "synchronizeable_var/synchronizeable_ip.h"
23
24
25#include <vector>
26#include <list>
27
28//State constants: They have to be of the form 2^n
29#define STATE_SERVER 1
30
31struct StateHistoryEntry
32{
33  int             stateId;
34  byte *          data;
35  int             dataLength;
36  std::list<int>  sizeList;
37};
38
39typedef std::list<StateHistoryEntry*> StateHistory;
40
41typedef std::vector<StateHistory> UserStateHistory;
42
43typedef std::vector<SynchronizeableVar*> SyncVarList;
44
45class NetworkStream;
46
47class Synchronizeable : virtual public BaseObject
48{
49
50  public:
51    Synchronizeable();
52    virtual ~Synchronizeable();
53
54//     void setIsServer( bool isServer );
55//     bool isServer();
56
57    virtual void varChangeHandler( std::list<int> & id );
58
59    virtual int getStateDiff( int userId, byte* data, int maxLength, int stateId, int fromStateId, int priorityTH );
60    virtual int setStateDiff( int userId, byte* data, int length, int stateId, int fromStateId );
61    virtual void cleanUpUser( int userId );
62    virtual void handleSentState( int userId, int stateId, int fromStateId );
63    virtual void handleRecvState( int userId, int stateId, int fromStateId );
64
65    void registerVar( SynchronizeableVar * var );
66    int registerVarId( SynchronizeableVar * var );
67
68    inline void setUniqueID( int id ){ uniqueID = id; }
69    inline int  getUniqueID() const { return uniqueID; }
70
71    inline int getOwner(){ return owner; }
72    inline void setOwner(int owner){ this->owner = owner; }
73
74    /** @returns true if this Synchronizeable wants to be synchronized over network */
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; }
78
79    inline void setNetworkStream(NetworkStream* stream) { this->networkStream = stream; }
80    inline NetworkStream* getNetworkStream() { return this->networkStream; }
81
82
83  protected:
84    NetworkStream*    networkStream;  //!< reference network stream we are connected to
85//     int               state;
86
87  private:
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    bool              bSynchronize;   //!< do we need beeing synchronized?
92
93    SyncVarList       syncVarList;    //!< list containing variables to synchronize
94
95    UserStateHistory  sentStates;     //!< store already sent states to create diffs from, offset corresponds to the user id
96    UserStateHistory  recvStates;     //!< store recieved states to apply diffs, offset corresponds to the user id
97
98};
99#endif /* _SYNCHRONIZEABLE_H */
Note: See TracBrowser for help on using the repository browser.