Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Dec 17, 2007, 10:39:12 AM (16 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)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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
Note: See TracChangeset for help on using the changeset viewer.