Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 6275 in orxonox.OLD for branches/network/src/lib


Ignore:
Timestamp:
Dec 24, 2005, 2:15:49 PM (19 years ago)
Author:
rennerc
Message:

synchronizeable: added macros to help write/read data

Location:
branches/network/src/lib
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • branches/network/src/lib/lang/base_object.cc

    r6257 r6275  
    7575  this->classID |= (long)classID;
    7676  this->className = className;
    77   this->realClassID = classID;
    7877
    7978  ClassList::addToClassList(this, classID, className);
  • branches/network/src/lib/lang/base_object.h

    r6257 r6275  
    3434  /** @returns the classID of the corresponding Object */
    3535  inline int getClassID() const { return this->classID; };
    36   inline int getRealClassID() const { return this->realClassID; };
     36  inline ClassID getLeafID() { return (ClassID)(this->classID & CL_MASK_LOWLEVEL_CLASS); }
    3737
    3838  bool isA (ClassID classID) const;
     
    5050    const char*        className;        //!< the name of the class
    5151    long               classID;          //!< this is the id from the class_id.h enumeration
    52     long               realClassID;      //!< classID which can be used with factory
    5352    char*              objectName;       //!< The name of this object
    5453};
  • branches/network/src/lib/network/converter.cc

    r6273 r6275  
    444444  {
    445445    PRINTF(1)("There is not enough space in string (%d) to store %d bytes\n", maxLength, length+1 );
     446    strncpy(s,"",maxLength);
    446447    return -1;
    447448  }
  • branches/network/src/lib/network/data_stream.h

    r5822 r6275  
    1313#include "netdefs.h"
    1414
    15 #define DATA_STREAM_BUFFER_SIZE 1024
     15#define DATA_STREAM_BUFFER_SIZE 10240
    1616
    1717class DataStream : public BaseObject
  • branches/network/src/lib/network/network_game_manager.cc

    r6273 r6275  
    236236    }
    237237
     238
    238239    if ( b->isA(CL_SYNCHRONIZEABLE) )
    239240    {
     
    372373  while ( it != e )
    373374  {
    374     if ( (*it)->getRealClassID() != CL_NETWORK_GAME_MANAGER && (*it)->getRealClassID() != CL_HANDSHAKE )
    375     {
    376 
    377       if ( !writeToClientBuffer( outBuffer[userID], (*it)->getRealClassID() ) )
     375    if ( (*it)->getLeafID() != CL_NETWORK_GAME_MANAGER && (*it)->getLeafID() != CL_HANDSHAKE )
     376    {
     377
     378      if ( !writeToClientBuffer( outBuffer[userID], (int)((*it)->getLeafID()) ) )
    378379        return;
    379380
     
    425426    PRINTF(1)("Could not fabricate Object with classID %x\n", classID);
    426427    return;
    427   }
    428   else
    429   {
    430     //PRINTF(0)("Fabricated entity: %s\n", b->getClassName());
    431428  }
    432429
     
    439436    if ( !isServer() )
    440437      s->setIsOutOfSync( true );
     438    PRINTF(0)("Fabricated %s with id %d\n", s->getClassName(), s->getUniqueID());
    441439  }
    442440  else
  • branches/network/src/lib/network/synchronizeable.h

    r6273 r6275  
    2121#define STATE_REQUESTEDSYNC 4
    2222
     23
    2324//macros to help writing data in byte buffer
    24 #define SYNCHELP_WRITE_BEGIN() {  int __synchelp_write_i = 0; \
    25                                   bool __synchelp_write_err = false; \
    26                                   int __synchelp_write_n; }
     25/*
     26 * Important: these macros must be used in
     27 *     SYNCHELP_READ_*:  virtual void      writeBytes(const byte* data, int length, int sender);
     28 *     SYNCHELP_WRITE_*: virtual int       readBytes(byte* data, int maxLength, int * reciever);
     29 * with the same argument names!
     30 *
     31 *
     32 * Example 1:
     33 *  SYNCHELP_READ_BEGIN();
     34 *  SYNCHELP_READ_FLOAT(size);
     35 *  SYNCHELP_READ_STRING( textureName, 1024 ); //1024 is the length of textureName
     36 *
     37 * Example 2:
     38 *  SYNCHELP_WRITE_BEGIN();
     39 *  SYNCHELP_WRITE_FLOAT(this->size);
     40 *  SYNCHELP_WRITE_STRING(this->textureName);
     41 *  return SYNCHELP_WRITE_N;
     42 *
     43 */
     44#define SYNCHELP_WRITE_BEGIN()    int __synchelp_write_i = 0; \
     45                                  int __synchelp_write_n
    2746#define SYNCHELP_WRITE_RESET() { __synchelp_write_i = 0; __synchelp_write_err = false; }
    28 #define SYNCHELP_WRITE_INT(i) { __synchelp_write_n =  }
    29 #define SYNCHELP_WIRTE_FLOAT()
    30 #define SYNCHELP_WRITE_BYTE()
    31 #define SYNCHELP_WRITE_STRING()
     47#define SYNCHELP_WRITE_INT(i) { __synchelp_write_n = \
     48                                Converter::intToByteArray( i, data+__synchelp_write_i, maxLength-__synchelp_write_i ); \
     49                                if ( __synchelp_write_n <= 0) \
     50{ \
     51                                  PRINTF(1)("Buffer is too small to store a int\n"); \
     52                                  return 0; \
     53} \
     54                                __synchelp_write_i += __synchelp_write_n; \
     55}
     56#define SYNCHELP_WRITE_FLOAT(f) { __synchelp_write_n = \
     57                                Converter::floatToByteArray( f, data+__synchelp_write_i, maxLength-__synchelp_write_i ); \
     58                                if ( __synchelp_write_n <= 0) \
     59{ \
     60                                  PRINTF(1)("Buffer is too small to store a float\n"); \
     61                                  return 0; \
     62} \
     63                                __synchelp_write_i += __synchelp_write_n; \
     64}
     65#define SYNCHELP_WRITE_BYTE(b) { \
     66                                if (maxLength - __synchelp_write_i < 1) \
     67{ \
     68                                  PRINTF(1)("Buffer is too small to store string\n"); \
     69                                  return 0; \
     70} \
     71                                data[__synchelp_write_i] = b; \
     72                                __synchelp_write_i++; \
     73}
     74#define SYNCHELP_WRITE_STRING(s) { __synchelp_write_n = \
     75                                Converter::stringToByteArray( s, data+__synchelp_write_i, strlen(s), maxLength-__synchelp_write_i ); \
     76                                if ( __synchelp_write_n <= 0) \
     77{ \
     78                                  PRINTF(1)("Buffer is too small to store string\n"); \
     79                                  return 0; \
     80} \
     81                                __synchelp_write_i += __synchelp_write_n; \
     82}
     83#define SYNCHELP_WRITE_N __synchelp_write_i
     84
     85
     86#define SYNCHELP_READ_BEGIN()     int __synchelp_read_i = 0; \
     87                                  int __synchelp_read_n
     88
     89#define SYNCHELP_READ_INT(i)       { \
     90                                    if ( length-__synchelp_read_i < INTSIZE ) \
     91{ \
     92                                      PRINTF(1)("There is not enough data to read an int\n");  \
     93                                      return; \
     94} \
     95                                    __synchelp_read_i += Converter::byteArrayToInt( data+__synchelp_read_i, &i );  \
     96}
     97#define SYNCHELP_READ_FLOAT(f)    { \
     98                                    if ( length-__synchelp_read_i < FLOATSIZE ) \
     99{ \
     100                                      PRINTF(1)("There is not enough data to read a flaot\n");  \
     101                                      return; \
     102} \
     103                                    __synchelp_read_i += Converter::byteArrayToFloat( data+__synchelp_read_i, &f );  \
     104}
     105#define SYNCHELP_READ_STRING(s,l)    { \
     106                                    __synchelp_read_n = Converter::byteArrayToString( data+__synchelp_read_i, s, l );  \
     107                                    if ( __synchelp_read_n <0 )  \
     108{ \
     109                                      PRINTF(1)("There is not enough data to read string\n");  \
     110                                      return; \
     111} \
     112}
     113#define SYNCHELP_READ_BYTE(b)      { \
     114                                    if ( length-__synchelp_read_i < 1 ) \
     115{ \
     116                                      PRINTF(1)("There is not enough data to read a byte\n");  \
     117                                      return; \
     118} \
     119                                    b = data[__synchelp_read_i]; \
     120                                    __synchelp_read_i ++;  \
     121}
    32122
    33123class NetworkStream;
Note: See TracChangeset for help on using the changeset viewer.