From 7097015fa3d2737b2e9438fdba9ec7b8f5630421 Mon Sep 17 00:00:00 2001 From: Dennis Brentjes Date: Mon, 29 Aug 2016 15:35:26 +0200 Subject: Refactored Client to be more reusable. Added UserClient and NodeClient classes to handle communication from and to Clients and Nodes respectively. --- network-handler/CMakeLists.txt | 3 +++ network-handler/client.cpp | 2 +- network-handler/client.hpp | 9 +++++++++ network-handler/networkhandler.hpp | 4 ++-- network-handler/nodeclient.cpp | 12 ++++++++++++ network-handler/nodeclient.hpp | 16 ++++++++++++++++ network-handler/nodemanager.cpp | 6 ++++++ network-handler/nodemanager.hpp | 12 ++++++++++++ network-handler/userclient.cpp | 12 ++++++++++++ network-handler/userclient.hpp | 15 +++++++++++++++ 10 files changed, 88 insertions(+), 3 deletions(-) create mode 100644 network-handler/nodeclient.cpp create mode 100644 network-handler/nodeclient.hpp create mode 100644 network-handler/nodemanager.cpp create mode 100644 network-handler/nodemanager.hpp create mode 100644 network-handler/userclient.cpp create mode 100644 network-handler/userclient.hpp diff --git a/network-handler/CMakeLists.txt b/network-handler/CMakeLists.txt index 02e02c1..9fe6e99 100644 --- a/network-handler/CMakeLists.txt +++ b/network-handler/CMakeLists.txt @@ -6,6 +6,9 @@ add_executable(network-handler networkhandler.hpp networkhandler.cpp acceptor.hpp acceptor.cpp client.hpp client.cpp + userclient.hpp userclient.cpp + nodeclient.hpp nodeclient.cpp + nodemanager.hpp nodemanager.cpp ) target_compile_options(network-handler diff --git a/network-handler/client.cpp b/network-handler/client.cpp index f767f6d..19b6f34 100644 --- a/network-handler/client.cpp +++ b/network-handler/client.cpp @@ -20,7 +20,7 @@ void Client::handle_receive(const error_code &ec, size_t read_bytes) if(!ec) { std::vector data(std::istream_iterator(is), {}); - std::cout << "Received: " << std::string(data.begin(), data.end()) << std::endl; + handle_message(data); receive(); } else { done(); diff --git a/network-handler/client.hpp b/network-handler/client.hpp index 716e2cf..fa0c6d6 100644 --- a/network-handler/client.hpp +++ b/network-handler/client.hpp @@ -14,6 +14,15 @@ private: 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 message) = 0; public: Client(boost::asio::ip::tcp::socket&& socket); diff --git a/network-handler/networkhandler.hpp b/network-handler/networkhandler.hpp index 99eb4f9..058f6a9 100644 --- a/network-handler/networkhandler.hpp +++ b/network-handler/networkhandler.hpp @@ -1,7 +1,7 @@ #pragma once #include "acceptor.hpp" -#include "client.hpp" +#include "userclient.hpp" #include #include @@ -26,7 +26,7 @@ class NetworkHandler Acceptor v4_acceptor; Acceptor v6_acceptor; - std::list clients; + std::list clients; public: NetworkHandler(ListenSettings const& listen_settings); diff --git a/network-handler/nodeclient.cpp b/network-handler/nodeclient.cpp new file mode 100644 index 0000000..8486f4b --- /dev/null +++ b/network-handler/nodeclient.cpp @@ -0,0 +1,12 @@ +#include "nodeclient.hpp" + +#include + +NodeClient::NodeClient(boost::asio::ip::tcp::socket &&socket) +: Client(std::move(socket)) +{} + +void NodeClient::handle_message(std::vector message) +{ + std::cout << std::string(message.begin(), message.end()) << std::endl; +} diff --git a/network-handler/nodeclient.hpp b/network-handler/nodeclient.hpp new file mode 100644 index 0000000..00d8450 --- /dev/null +++ b/network-handler/nodeclient.hpp @@ -0,0 +1,16 @@ +#pragma once + +#include "client.hpp" + +#include + +#include + +class NodeClient : public Client +{ + virtual void handle_message(std::vector message) override final; + +public: + NodeClient(boost::asio::ip::tcp::socket&& socket); + virtual ~NodeClient() = default; +}; diff --git a/network-handler/nodemanager.cpp b/network-handler/nodemanager.cpp new file mode 100644 index 0000000..198a459 --- /dev/null +++ b/network-handler/nodemanager.cpp @@ -0,0 +1,6 @@ +#include "nodemanager.hpp" + +NodeManager::NodeManager() +{ + +} diff --git a/network-handler/nodemanager.hpp b/network-handler/nodemanager.hpp new file mode 100644 index 0000000..e6a42c5 --- /dev/null +++ b/network-handler/nodemanager.hpp @@ -0,0 +1,12 @@ +#pragma once + +#include "nodeclient.hpp" + +#include + +class NodeManager +{ + std::vector clients; +public: + NodeManager(); +}; diff --git a/network-handler/userclient.cpp b/network-handler/userclient.cpp new file mode 100644 index 0000000..b35a544 --- /dev/null +++ b/network-handler/userclient.cpp @@ -0,0 +1,12 @@ +#include "userclient.hpp" + +#include + +void UserClient::handle_message(std::vector message) +{ + std::cout << std::string(message.begin(), message.end()); +} + +UserClient::UserClient(boost::asio::ip::tcp::socket&& socket) +: Client(std::move(socket)) +{} diff --git a/network-handler/userclient.hpp b/network-handler/userclient.hpp new file mode 100644 index 0000000..94d5ec0 --- /dev/null +++ b/network-handler/userclient.hpp @@ -0,0 +1,15 @@ +#pragma once + +#include + +#include "client.hpp" + +class UserClient : public Client +{ + virtual void handle_message(std::vector message) override final; + +public: + UserClient(boost::asio::ip::tcp::socket&& socket); + virtual ~UserClient() = default; + +}; -- cgit v1.2.3-70-g09d2