From 90bd600c5025ede4db99122f13dfb07b27de46ae Mon Sep 17 00:00:00 2001 From: Egor Tensin Date: Sat, 30 Nov 2019 01:38:08 +0300 Subject: initial commit --- client/client.hpp | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 client/client.hpp (limited to 'client/client.hpp') diff --git a/client/client.hpp b/client/client.hpp new file mode 100644 index 0000000..139ebb2 --- /dev/null +++ b/client/client.hpp @@ -0,0 +1,52 @@ +#pragma once + +#include "input.hpp" +#include "settings.hpp" +#include "transport.hpp" + +#include +#include +#include + +namespace math::client { + +class Client { +public: + explicit Client(const Settings& settings) + : Client{make_input_reader(settings), make_transport(settings)} + { } + + Client(input::ReaderPtr&& input_reader, TransportPtr&& transport) + : m_input_reader{std::move(input_reader)} + , m_transport{std::move(transport)} + { } + + void run() { + m_input_reader->for_each_input([this] (const std::string& input) { + m_transport->send_query(input, [] (const std::string& reply) { + std::cout << reply << '\n'; + }); + return true; + }); + } + +private: + static input::ReaderPtr make_input_reader(const Settings& settings) { + if (settings.input_from_string()) { + return input::make_string_reader(settings.m_input); + } + if (settings.input_from_files()) { + return input::make_file_reader(settings.m_files); + } + return input::make_console_reader(); + } + + static TransportPtr make_transport(const Settings& settings) { + return make_blocking_network_transport(settings.m_host, settings.m_port); + } + + const input::ReaderPtr m_input_reader; + TransportPtr m_transport; +}; + +} -- cgit v1.2.3