aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--network-handler/client.cpp10
-rw-r--r--network-handler/client.hpp15
-rw-r--r--network-handler/nodeclient.cpp12
-rw-r--r--network-handler/nodeclient.hpp8
-rw-r--r--network-handler/userclient.cpp11
-rw-r--r--network-handler/userclient.hpp9
6 files changed, 42 insertions, 23 deletions
diff --git a/network-handler/client.cpp b/network-handler/client.cpp
index 19b6f34..3098185 100644
--- a/network-handler/client.cpp
+++ b/network-handler/client.cpp
@@ -13,26 +13,26 @@ Client::Client(tcp::socket &&socket)
, buffer()
{}
-void Client::handle_receive(const error_code &ec, size_t read_bytes)
+void Client::handle_receive(MessageHandler message_handler, const error_code &ec, size_t read_bytes)
{
buffer.commit(read_bytes);
std::istream is(&buffer);
if(!ec) {
std::vector<uint8_t> data(std::istream_iterator<uint8_t>(is), {});
- handle_message(data);
- receive();
+ message_handler(data);
+ receive(message_handler);
} else {
done();
}
}
-void Client::receive() {
+void Client::receive(MessageHandler message_handler) {
using namespace boost::asio::placeholders;
socket.async_receive(
buffer.prepare(512),
- boost::bind(&Client::handle_receive, this, error(), bytes_transferred())
+ boost::bind(&Client::handle_receive, this, message_handler, error(), bytes_transferred())
);
}
diff --git a/network-handler/client.hpp b/network-handler/client.hpp
index fa0c6d6..2b6a6df 100644
--- a/network-handler/client.hpp
+++ b/network-handler/client.hpp
@@ -8,26 +8,17 @@
class Client {
public:
typedef std::function<void(void)> OnDoneFT;
+ typedef std::function<void(std::vector<uint8_t>)> MessageHandler;
private:
boost::asio::ip::tcp::socket socket;
boost::asio::streambuf buffer;
OnDoneFT done;
- Client() = delete;
- Client(Client const&) = delete;
- Client(Client&&) = delete;
-
- Client& operator=(Client const&) = delete;
- Client& operator=(Client&&) = delete;
-
-protected:
- virtual void handle_message(std::vector<uint8_t> message) = 0;
-
public:
Client(boost::asio::ip::tcp::socket&& socket);
- void handle_receive(boost::system::error_code const& ec, size_t read_bytes);
- void receive();
+ void handle_receive(MessageHandler message_handler, boost::system::error_code const& ec, size_t read_bytes);
+ void receive(MessageHandler message_handler);
void on_done(OnDoneFT f);
};
diff --git a/network-handler/nodeclient.cpp b/network-handler/nodeclient.cpp
index 8486f4b..9b026ba 100644
--- a/network-handler/nodeclient.cpp
+++ b/network-handler/nodeclient.cpp
@@ -3,10 +3,20 @@
#include <iostream>
NodeClient::NodeClient(boost::asio::ip::tcp::socket &&socket)
-: Client(std::move(socket))
+: client(std::move(socket))
{}
void NodeClient::handle_message(std::vector<uint8_t> message)
{
std::cout << std::string(message.begin(), message.end()) << std::endl;
}
+
+void NodeClient::receive()
+{
+ client.receive(std::bind(&NodeClient::handle_message, this, std::placeholders::_1));
+}
+
+void NodeClient::on_done(Client::OnDoneFT done) {
+ client.on_done(done);
+}
+
diff --git a/network-handler/nodeclient.hpp b/network-handler/nodeclient.hpp
index 00d8450..9a3799a 100644
--- a/network-handler/nodeclient.hpp
+++ b/network-handler/nodeclient.hpp
@@ -6,11 +6,15 @@
#include <vector>
-class NodeClient : public Client
+class NodeClient
{
- virtual void handle_message(std::vector<uint8_t> message) override final;
+ Client client;
+ void handle_message(std::vector<uint8_t> message);
public:
NodeClient(boost::asio::ip::tcp::socket&& socket);
virtual ~NodeClient() = default;
+
+ void receive();
+ void on_done(Client::OnDoneFT done);
};
diff --git a/network-handler/userclient.cpp b/network-handler/userclient.cpp
index b35a544..bf4eaa4 100644
--- a/network-handler/userclient.cpp
+++ b/network-handler/userclient.cpp
@@ -8,5 +8,14 @@ void UserClient::handle_message(std::vector<uint8_t> message)
}
UserClient::UserClient(boost::asio::ip::tcp::socket&& socket)
-: Client(std::move(socket))
+: client(std::move(socket))
{}
+
+void UserClient::receive()
+{
+ client.receive(std::bind(&UserClient::handle_message, this, std::placeholders::_1));
+}
+
+void UserClient::on_done(Client::OnDoneFT done) {
+ client.on_done(done);
+}
diff --git a/network-handler/userclient.hpp b/network-handler/userclient.hpp
index 94d5ec0..5734dd2 100644
--- a/network-handler/userclient.hpp
+++ b/network-handler/userclient.hpp
@@ -4,12 +4,17 @@
#include "client.hpp"
-class UserClient : public Client
+class UserClient
{
- virtual void handle_message(std::vector<uint8_t> message) override final;
+ Client client;
+ void handle_message(std::vector<uint8_t> message);
public:
UserClient(boost::asio::ip::tcp::socket&& socket);
virtual ~UserClient() = default;
+ void receive();
+
+ void on_done(Client::OnDoneFT done);
+
};