From be08c29dd5e18c41b5c2f05b7178bab90f04e026 Mon Sep 17 00:00:00 2001 From: Vegard Storheil Eriksen Date: Mon, 15 Nov 2010 04:58:54 +0100 Subject: Changed Message-API. Implemented Hello, Login, LoginResponse. --- common/message.cpp | 76 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 43 insertions(+), 33 deletions(-) (limited to 'common/message.cpp') diff --git a/common/message.cpp b/common/message.cpp index ddfaaa7..6e1901d 100644 --- a/common/message.cpp +++ b/common/message.cpp @@ -5,54 +5,64 @@ #include -std::pair Message::serialize() { - //std::size_t s = payload.size(); +Message::Hello::Hello() : Base(Types::Hello) { - //uint8_t* buf = new uint8_t[4 + s]; +} + +Message::Hello::Hello(const std::string& v) : Base(Types::Hello), version(v) { - //*(uint16_t*)buf = (uint16_t)s; +} + +std::pair Message::Hello::serialize() { + std::size_t s = version.size(); + uint8_t* buf = new uint8_t[s]; - //memcpy(buf + 4, payload.c_str(), payload.size()); + memcpy(buf, version.c_str(), version.size()); - //return std::pair(buf, 4 + s); - return std::pair(0, 0); + return std::pair(buf, s); } -std::size_t Message::deserialize(uint8_t* data, std::size_t bytes) { - if(deserialize_size == 0 && bytes == 0) { - return 4; - } - - if(deserialize_size == 0 && bytes == 4) { - uint16_t* header = (uint16_t*)data; - - deserialize_size = (std::size_t)header[0]; - payload_type = (Payload::Type)header[1]; - - return deserialize_size; - } +void Message::Hello::deserialize(uint8_t* data, std::size_t bytes) { + version = std::string((char*)data, bytes); +} + +Message::Login::Login() : Base(Types::Login) { - if(!deserialize_size) { - throw std::runtime_error("Deserialization header error."); - } +} + +Message::Login::Login(const std::string& n) : Base(Types::Login), nick(n) { - if(bytes != deserialize_size) { - throw std::runtime_error("Deserialization attempted with incomplete data."); - } +} + +std::pair Message::Login::serialize() { + std::size_t s = nick.size(); + uint8_t* buf = new uint8_t[s]; - //payload = std::string((char*)data, bytes); + memcpy(buf, nick.c_str(), nick.size()); - return 0; + return std::pair(buf, s); } -Message::Message() : deserialize_size(0) { +void Message::Login::deserialize(uint8_t* data, std::size_t bytes) { + nick = std::string((char*)data, bytes); +} + +Message::LoginResponse::LoginResponse() : Base(Types::LoginResponse) { + +} + +Message::LoginResponse::LoginResponse(bool ok) : Base(Types::LoginResponse), login_ok(ok) { } -Message::p Message::create() { - return Message::p(new Message); +std::pair Message::LoginResponse::serialize() { + uint8_t* buf = new uint8_t[1]; + + buf[1] = uint8_t(login_ok); + + return std::pair(buf, 1); } -Payload::Type Message::type() { - return payload_type; +void Message::LoginResponse::deserialize(uint8_t* data, std::size_t bytes) { + login_ok = bool(data[0]); } -- cgit v1.2.3