summaryrefslogtreecommitdiff
path: root/common/message.cpp
diff options
context:
space:
mode:
authorVegard Storheil Eriksen <zyp@jvnv.net>2010-11-08 16:06:22 +0100
committerVegard Storheil Eriksen <zyp@jvnv.net>2010-11-08 16:06:22 +0100
commitc9b9d15a585df8f01b49510e4ff0dfb53ee7b9ef (patch)
tree4bec517a83bca880c459f36fc99242f902874a87 /common/message.cpp
parent2b73fe37b292c22dbc823fe9a225dd2826cdff1d (diff)
Started on payload classes.
Diffstat (limited to 'common/message.cpp')
-rw-r--r--common/message.cpp49
1 files changed, 34 insertions, 15 deletions
diff --git a/common/message.cpp b/common/message.cpp
index 4ddd543..ddfaaa7 100644
--- a/common/message.cpp
+++ b/common/message.cpp
@@ -1,27 +1,21 @@
#include "message.h"
+#include <stdexcept>
#include <cstring>
#include <iostream>
-Message::Message() : deserialize_size(0) {
-
-}
-
-Message::p Message::create() {
- return Message::p(new Message);
-}
-
std::pair<uint8_t*, std::size_t> Message::serialize() {
- std::size_t s = payload.size();
+ //std::size_t s = payload.size();
- uint8_t* buf = new uint8_t[4 + s];
+ //uint8_t* buf = new uint8_t[4 + s];
- *(uint32_t*)buf = (uint32_t)s;
+ //*(uint16_t*)buf = (uint16_t)s;
- memcpy(buf + 4, payload.c_str(), payload.size());
+ //memcpy(buf + 4, payload.c_str(), payload.size());
- return std::pair<uint8_t*, std::size_t>(buf, 4 + s);
+ //return std::pair<uint8_t*, std::size_t>(buf, 4 + s);
+ return std::pair<uint8_t*, std::size_t>(0, 0);
}
std::size_t Message::deserialize(uint8_t* data, std::size_t bytes) {
@@ -30,10 +24,35 @@ std::size_t Message::deserialize(uint8_t* data, std::size_t bytes) {
}
if(deserialize_size == 0 && bytes == 4) {
- return (std::size_t)(*(int32_t*)data);
+ uint16_t* header = (uint16_t*)data;
+
+ deserialize_size = (std::size_t)header[0];
+ payload_type = (Payload::Type)header[1];
+
+ return deserialize_size;
+ }
+
+ if(!deserialize_size) {
+ throw std::runtime_error("Deserialization header error.");
+ }
+
+ if(bytes != deserialize_size) {
+ throw std::runtime_error("Deserialization attempted with incomplete data.");
}
- payload = std::string((char*)data, bytes);
+ //payload = std::string((char*)data, bytes);
return 0;
}
+
+Message::Message() : deserialize_size(0) {
+
+}
+
+Message::p Message::create() {
+ return Message::p(new Message);
+}
+
+Payload::Type Message::type() {
+ return payload_type;
+}