and the basics work now no-netsession
authorterom
Thu, 20 Nov 2008 23:20:00 +0000
branchno-netsession
changeset 40 4b2867fb5c12
parent 39 cfb8b6e2a35f
child 41 ca80cd67785d
and the basics work now
src/proto2/NetworkPacket.cc
src/proto2/NetworkPacket.hh
--- a/src/proto2/NetworkPacket.cc	Thu Nov 20 22:55:28 2008 +0000
+++ b/src/proto2/NetworkPacket.cc	Thu Nov 20 23:20:00 2008 +0000
@@ -1,3 +1,5 @@
+
+#include <cassert>
 
 #include "NetworkPacket.hh"
 
@@ -19,32 +21,42 @@
         throw NetworkPacketError("not enough data to read");
 }
 
+void NetworkPacket::write (const void *ptr, size_t len) {
+    // check buffer overflow
+    check_write_size(len);
+
+    // set value
+    memcpy(buf + offset, ptr, len);
+
+    // update offset and size
+    offset += len;
+    data_size += len;
+}
+
+void NetworkPacket::read (void *ptr, size_t len) {
+    // check buffer underflow
+    check_read_size(len);
+
+    // set value
+    memcpy(ptr, buf + offset, len);
+
+    // update offset
+    offset += len;
+}
+
 template <typename T> T NetworkPacket::read_val (void) {
     T val;
 
-    // check size
-    check_read_size(sizeof(T));
-    
-    // set value
-    val = *((T*) (buf + offset));
-
-    // update offset
-    offset += sizeof(T);
+    // read
+    read(&val, sizeof(T));
 
     // return
     return val;
 }
 
 template <typename T> void NetworkPacket::write_val (const T &val) {
-    // check max size
-    check_write_size(sizeof(T));
-    
-    // set value
-    *((T*) (buf + offset)) = val;
-
-    // update offset and size
-    offset += sizeof(T);
-    data_size += sizeof(T);
+    // write
+    write(&val, sizeof(T));
 }
 
 uint32_t NetworkPacket::read_uint32 (void) {
@@ -72,7 +84,9 @@
 }
         
 float NetworkPacket::read_float32 (void) {
-    return (float) read_uint32();
+    int32_t ival = read_int32();
+
+    return *((float *) &ival);
 }
 
 Vector NetworkPacket::read_vector (void) {
@@ -107,7 +121,7 @@
 }
         
 void NetworkPacket::write_float32 (float val) {
-    write_uint32((uint32_t) val);
+    write_int32(*((int32_t *) &val));
 }
 
 void NetworkPacket::write_vector (const Vector &vec) {
--- a/src/proto2/NetworkPacket.hh	Thu Nov 20 22:55:28 2008 +0000
+++ b/src/proto2/NetworkPacket.hh	Thu Nov 20 23:20:00 2008 +0000
@@ -30,6 +30,10 @@
         size_t get_buf_size (void) const { return buf_size; }
 
         void set_data_size (size_t size) { offset = 0; data_size = size; }
+
+        // raw
+        void write (const void *ptr, size_t len);
+        void read (void *ptr, size_t len);
        
         // type-reads, handle network-endianlness
         uint32_t read_uint32 (void);
@@ -42,7 +46,6 @@
         
         float read_float32 (void);
 
-        Vector read_vector (void);
 
         void write_uint32 (uint32_t val);
         void write_uint16 (uint16_t val);
@@ -54,6 +57,8 @@
         
         void write_float32 (float val);
 
+        // complex
+        Vector read_vector (void);
         void write_vector (const Vector &vec);
         void write_packet (const NetworkPacket &pkt);
 };