Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Nov 1, 2008, 7:04:09 PM (16 years ago)
Author:
landauf
Message:

merged objecthierarchy branch back to trunk

Location:
code/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • code/trunk

  • code/trunk/src/network/Synchronisable.h

    r1910 r2087  
    4141#include "util/Integers.h"
    4242
    43 #define REGISTERDATA(varname) registerVar(&varname, sizeof(varname), network::DATA)
    44 #define REGISTERDATA_WITHDIR(varname, mode) registerVar(&varname, sizeof(varname), network::DATA, mode)
    45 #define REGISTERSTRING(stringname) registerVar(&stringname, stringname.length()+1, network::STRING)
    46 #define REGISTERSTRING_WITHDIR(stringname, mode) registerVar(&stringname, stringname.length()+1, network::STRING, mode)
    47 
    48 //TODO: this is only a very ugly hack ...
    49 namespace orxonox{
    50 class SpaceShip;
    51 }
     43#define REGISTERDATA(varname, ...) \
     44    registerVar((void*)&varname, sizeof(varname), network::DATA, __VA_ARGS__)
     45#define REGISTERSTRING(stringname, ...) \
     46    registerVar(&stringname, stringname.length()+1, network::STRING, __VA_ARGS__)
    5247
    5348namespace network
    5449{
     50  static const unsigned int OBJECTID_UNKNOWN = (unsigned int)-1;
     51
    5552  namespace direction{
    5653    enum syncdirection{
    5754      toclient=0x1,
    5855      toserver=0x2,
    59       bidirectional=0x3
     56      bidirectional=0x3,
     57      serverMaster=0x3,
     58      clientMaster=0x7
    6059    };
    6160  }
    62  
     61
    6362  namespace syncmode{
    6463    enum mode{
     
    6766    };
    6867  }
    69  
     68
    7069  enum variableType{
    7170    DATA,
     
    7372  };
    7473
    75   struct synchronisableHeader{
     74  struct _NetworkExport synchronisableHeader{
    7675    uint32_t size:31;
    7776    bool dataAvailable:1;
    7877    uint32_t objectID;
     78    uint32_t creatorID;
    7979    uint32_t classID;
    8080  };
    8181
    82   typedef struct synchronisableVariable{
     82  struct _NetworkExport synchronisableVariable{
    8383    unsigned int size;
    8484    int mode; // this determines in which direction the variable gets synchronised
     
    8686    variableType type;
    8787    NetworkCallbackBase *callback;
    88   }SYNCVAR;
     88    void *varBuffer;
     89    uint8_t varReference;
     90  };
    8991
    9092  /**
     
    98100    friend class GamestateClient;
    99101    friend class Server;
    100     friend class orxonox::SpaceShip;
    101102    virtual ~Synchronisable();
    102103
    103    
     104
    104105    virtual bool create();
    105106    static void setClient(bool b);
    106    
     107
    107108    static Synchronisable *fabricate(uint8_t*& mem, int mode=0x0);
    108109    static bool deleteObject(unsigned int objectID);
     
    110111    static unsigned int getNumberOfDeletedObject(){ return deletedObjects_.size(); }
    111112    static unsigned int popDeletedObject(){ unsigned int i = deletedObjects_.front(); deletedObjects_.pop(); return i; }
    112    
     113
    113114    inline unsigned int getObjectID(){return objectID;}
    114115    inline unsigned int getClassID(){return classID;}
    115116  protected:
    116     Synchronisable();
     117    Synchronisable(orxonox::BaseObject* creator);
    117118    void registerVar(void *var, int size, variableType t, int mode=1, NetworkCallbackBase *cb=0);
    118119    void setObjectMode(int mode);
    119120    void setObjectFrequency(unsigned int freq){ objectFrequency_ = freq; }
    120     virtual void registerAllVariables()=0;
    121    
    122    
     121
     122
    123123  private:
    124124    bool getData(uint8_t*& men, unsigned int id, int mode=0x0);
    125125    uint32_t getSize(unsigned int id, int mode=0x0);
    126     bool updateData(uint8_t*& mem, int mode=0x0);
     126    bool updateData(uint8_t*& mem, int mode=0x0, bool forceCallback=false);
    127127    bool isMyData(uint8_t* mem);
    128128    bool doSelection(unsigned int id);
    129     bool isMyTick(unsigned int id);
    130    
     129    bool doSync(unsigned int id);
     130
    131131    unsigned int objectID;
     132    unsigned int creatorID;
    132133    unsigned int classID;
    133    
     134
    134135    std::list<synchronisableVariable *> *syncList;
    135136    static int state_; // detemines wheter we are server (default) or client
Note: See TracChangeset for help on using the changeset viewer.