Changeset 6275 in orxonox.OLD for branches/network/src/lib/network/synchronizeable.h
- Timestamp:
- Dec 24, 2005, 2:15:49 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/network/src/lib/network/synchronizeable.h
r6273 r6275 21 21 #define STATE_REQUESTEDSYNC 4 22 22 23 23 24 //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 27 46 #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 } 32 122 33 123 class NetworkStream;
Note: See TracChangeset
for help on using the changeset viewer.