diff options
Diffstat (limited to 'common/connectionbase.cpp')
-rw-r--r-- | common/connectionbase.cpp | 35 |
1 files changed, 33 insertions, 2 deletions
diff --git a/common/connectionbase.cpp b/common/connectionbase.cpp index b2147fa..c744646 100644 --- a/common/connectionbase.cpp +++ b/common/connectionbase.cpp @@ -3,14 +3,45 @@ #include <iostream> #include <string> +void ConnectionBase::prepare_next_message() { + next_message = Message::create(); + + request_data(next_message->deserialize(0, 0)); +} + void ConnectionBase::connected() { std::cout << "Connection established." << std::endl; write_data((uint8_t*)"Hei!\n", 5); - request_data(10); + prepare_next_message(); } void ConnectionBase::got_data(uint8_t* data, std::size_t bytes) { - std::cout << "Fikk data: " << std::string((char*)data, bytes) << std::endl; + size_t remaining = next_message->deserialize(data, bytes); + + if(remaining) { + request_data(remaining); + } else { + recv_queue.push(next_message); + + prepare_next_message(); + } +} + +void ConnectionBase::send(const Message::p& msg) { + std::pair<uint8_t*, std::size_t> smsg = msg->serialize(); + + write_data(smsg.first, smsg.second); +} + +Message::p ConnectionBase::recv() { + if(recv_queue.empty()) { + return Message::p(); + } + + Message::p msg = recv_queue.front(); + recv_queue.pop(); + + return msg; } |