summaryrefslogtreecommitdiff
path: root/common/connectionbase.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'common/connectionbase.cpp')
-rw-r--r--common/connectionbase.cpp35
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;
}