Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Dec 17, 2007, 10:39:12 AM (17 years ago)
Author:
scheusso
Message:

added class BaseEntity:

  • !!! please inherit from this class in future (instead of Entity/WorldEntity/BaseObject):
  • this class is able to be synchronised over the network (or at least created so far)
Location:
code/branches/FICN/src/network
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • code/branches/FICN/src/network/Client.cc

    r514 r565  
    127127    if(!isConnected)
    128128      return false;
    129     if(client_connection.addPacket(pck_gen.chatMessage( message.c_str() )));
     129    if(client_connection.addPacket(pck_gen.chatMessage( message.c_str() )))
    130130      return client_connection.sendPackets();
    131131    // send packets
  • code/branches/FICN/src/network/Synchronisable.cc

    r531 r565  
    2626  datasize=0;
    2727  objectID=idCounter++;
    28   //registerAllVariables();
     28//   registerAllVariables();
    2929}
    3030
     
    4141 * @param size size of the datatype the variable consists of
    4242 */
    43 void Synchronisable::registerVar(const void *var, int size){
     43void Synchronisable::registerVar(const void *var, int size, variableType t){
    4444  // create temporary synch.Var struct
    45   synchronisableVariable temp={size, var};
     45  synchronisableVariable temp={size, var, t};
    4646  // increase datasize
    4747  datasize+=sizeof(int)+size;
     
    6565  for(i=syncList.begin(); i!=syncList.end(); i++){
    6666    // increase size (size of variable and size of size of variable ;)
    67     totalsize+=sizeof(int)+i->size;
     67    if(i->type == STRING)
     68      totalsize+=sizeof(int)+((std::string *)i->var)->length()+1;
     69    else
     70      totalsize+=sizeof(int)+i->size;
    6871  }
    6972  syncData retVal;
     
    7780  int n=0;
    7881  for(i=syncList.begin(); n<totalsize && i!=syncList.end(); i++){
    79         //CHANGED: i->size TO (const void*)(&(i->size)) memcpy WANTS A CONST VOID* SO CONVERT INT TO CONST VOID*
    8082    std::memcpy(retVal.data+n, (const void*)(i->size), sizeof(int));
    8183    n+=sizeof(int);
    82     //CHANGED: i->var TO (const void*)(&(i->var)) SINCE var IS A POINTER, NO & BEFORE i
    83     std::memcpy(retVal.data+n, (const void*)(i->var), i->size);
    84     n+=i->size;
     84    switch(i->type){
     85    case STRING:
     86      std::memcpy(retVal.data+n, (const void *)(((std::string *)i->var)->c_str()), ((std::string *)i->var)->length()+1);
     87      n+=((std::string *)i->var)->length()+1;
     88      break;
     89    case DATA:
     90      std::memcpy(retVal.data+n, ((const void*)i->var), i->size);
     91      n+=i->size;
     92      break;
     93    }
    8594  }
    8695  return retVal;
     
    107116  int n=0;
    108117  for(i=syncList.begin(); n<datasize && i!=syncList.end(); i++){
    109         //CHANGED: i->size TO (const void*)(&(i->size)) memcpy WANTS A CONST VOID* SO CONVERT INT TO CONST VOID*
    110118    std::memcpy(retVal.data+n, (const void*)(i->size), sizeof(int));
    111119    n+=sizeof(int);
    112     //CHANGED: i->var TO (const void*)(&(i->var)) SINCE var IS A POINTER, NO & BEFORE i
    113     std::memcpy(retVal.data+n, (const void*)(i->var), i->size);
    114     n+=i->size;
     120    switch(i->type){
     121      case DATA:
     122        std::memcpy(retVal.data+n, (const void*)(i->var), i->size);
     123        n+=i->size;
     124        break;
     125      case STRING:
     126        std::memcpy(retVal.data+n, (const void*)(((std::string *)i->var)->c_str()), ((std::string *)i->var)->length()+1);
     127        n+=((std::string *) i->var)->length()+1;
     128        break;
     129    }
    115130  }
    116131  return retVal;
     
    126141  std::list<synchronisableVariable>::iterator i;
    127142  for(i=syncList.begin(); i!=syncList.end(); i++){
    128     if((int)*data==i->size){
    129       data+=sizeof(int);
    130       //CHANGED: THIS FROM i->var TO (void*)i->var SINCE var IS A CONST VOID* AND memcpy NEEDS A VOID* AS FIRST ARGUMENT
    131       memcpy((void*)i->var, data, i->size);
    132       data+=i->size;
     143    if((int)*data==i->size || i->type==STRING){
     144      switch(i->type){
     145      case DATA:
     146        data+=sizeof(int);
     147        memcpy((void*)i->var, data, i->size);
     148        data+=i->size;
     149        break;
     150      case STRING:
     151        i->size = (int)*data;
     152        data+=sizeof(int);
     153        *((std::string *)i->var) = std::string((const char*)data);
     154        data += i->size;
     155        break;
     156      }
    133157    } else
    134158      return false; //there was some problem with registerVar
     
    142166 */
    143167int Synchronisable::getSize(){
    144   return datasize;
     168  int tsize=0;
     169  std::list<synchronisableVariable>::iterator i;
     170  for(i=syncList.begin(); i!=syncList.end(); i++){
     171    switch(i->type){
     172    case DATA:
     173      tsize+=i->size;
     174      break;
     175    case STRING:
     176      tsize+=((std::string *)i->var)->length()+1;
     177      break;
     178    }
     179  }
     180  return tsize;
    145181}
    146182
  • code/branches/FICN/src/network/Synchronisable.h

    r496 r565  
    1515#include <list>
    1616#include <iostream>
     17#include <string>
    1718
    1819#include "orxonox/core/CoreIncludes.h"
     
    2122namespace network {
    2223
     24enum variableType{
     25  DATA,
     26  STRING,
     27};
    2328 
    2429struct syncData{
     
    3237  int size;
    3338  const void *var;
     39  variableType type;
    3440}SYNCVAR;
    3541
     
    4046 * @author Oliver Scheuss
    4147*/
    42 class Synchronisable : public orxonox::OrxonoxClass{
     48class Synchronisable : virtual public orxonox::OrxonoxClass{
    4349public:
    44   Synchronisable();
    4550
    4651  virtual ~Synchronisable();
     
    4853  int classID;
    4954   
    50   void registerVar(const void *var, int size);
     55  void registerVar(const void *var, int size, variableType t);
    5156  syncData getData();
    5257  syncData getData(unsigned char *mem);
    5358  int getSize();
    5459  bool updateData(syncData vars);
    55   virtual void registerAllVariables() = 0;
    56 
     60  virtual void registerAllVariables()=0;
     61  virtual bool create(){return true;}
     62protected:
     63  Synchronisable();
    5764private:
    5865/*  bool removeObject(Iterator<Synchronisable> it);*/
Note: See TracChangeset for help on using the changeset viewer.