Logo
factory.hh
Go to the documentation of this file.
1 #pragma once
2 
3 #include "message.hh"
4 #include <boost/asio/streambuf.hpp>
5 #include <boost/asio.hpp>
6 #include <string>
7 #include <memory>
8 
9 #include <iostream>
10 using namespace std;
11 
12 
13 namespace eclipse {
14 namespace messages {
15 
16 Message* load_message (boost::asio::streambuf&);
17 Message* load_message (std::string&);
18 std::string* save_message (Message*);
19 
20 void send_message(boost::asio::ip::tcp::socket*, eclipse::messages::Message*);
21 
22 template <typename T>
23 auto read_reply(boost::asio::ip::tcp::socket* socket) {
24  using namespace boost::asio;
25  char header[17] = {0};
26  header[16] = '\0';
27  boost::asio::streambuf buf;
28 
29  read(*socket, buffer(header, 16));
30  size_t size_of_msg = atoi(header);
31 
32  size_t l = read(*socket, buf.prepare(size_of_msg));
33 
34  Message* msg = nullptr;
35  buf.commit(l);
36  msg = load_message(buf);
37  buf.consume(l);
38  T* m = dynamic_cast<T*>(msg);
39  return std::unique_ptr<T>(m);
40 }
41 
42 } /* messages */
43 }
std::string * save_message(Message *m)
Definition: factory.cc:46
auto read_reply(boost::asio::ip::tcp::socket *socket)
Definition: factory.hh:23
void send_message(boost::asio::ip::tcp::socket *socket, eclipse::messages::Message *msg)
Definition: factory.cc:69
Message * load_message(std::string &str)
Definition: factory.cc:18
Definition: block_node.cc:12
Definition: message.hh:15