#include "client.hpp" #include "logging.hpp" #include #include #include using namespace boost::asio::ip; using namespace boost::system; Client::Client(tcp::socket &&socket) : socket(std::move(socket)) , buffer() , done() {} void Client::handle_receive(MessageHandler message_handler, const error_code &ec, size_t read_bytes) { buffer.commit(read_bytes); std::istream is(&buffer); BOOST_LOG_TRIVIAL(trace) << "handling receive"; if(!ec) { std::vector data(std::istream_iterator(is), {}); message_handler(data); } else { if(done) { done(); } } } void Client::receive(MessageHandler message_handler) { using namespace boost::asio::placeholders; socket.async_receive( buffer.prepare(512), boost::bind(&Client::handle_receive, this, message_handler, error(), bytes_transferred()) ); } void Client::on_done(Client::OnDoneFT f) { done = f; }