From c9b9d15a585df8f01b49510e4ff0dfb53ee7b9ef Mon Sep 17 00:00:00 2001 From: Vegard Storheil Eriksen Date: Mon, 8 Nov 2010 16:06:22 +0100 Subject: Started on payload classes. --- common/message.cpp | 49 ++++++++++++++++++++++++++++++++++--------------- 1 file changed, 34 insertions(+), 15 deletions(-) (limited to 'common/message.cpp') 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 #include #include -Message::Message() : deserialize_size(0) { - -} - -Message::p Message::create() { - return Message::p(new Message); -} - std::pair 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(buf, 4 + s); + //return std::pair(buf, 4 + s); + return std::pair(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; +} -- cgit v1.2.3