From 7e743b73433475df086fcec81be7b10c1d695a42 Mon Sep 17 00:00:00 2001 From: Evgeny Zinoviev Date: Fri, 7 May 2021 02:18:07 +0300 Subject: initial --- src/server/server.h | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 src/server/server.h (limited to 'src/server/server.h') diff --git a/src/server/server.h b/src/server/server.h new file mode 100644 index 0000000..76b2a1b --- /dev/null +++ b/src/server/server.h @@ -0,0 +1,79 @@ +// SPDX-License-Identifier: BSD-3-Clause + +#ifndef INVERTER_TOOLS_SERVER_TCP_SERVER_H +#define INVERTER_TOOLS_SERVER_TCP_SERVER_H + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "connection.h" +#include "../numeric_types.h" +#include "../formatter/formatter.h" +#include "../p18/client.h" +#include "../p18/types.h" +#include "../voltronic/device.h" +#include "../voltronic/time.h" + +namespace server { + +typedef std::lock_guard LockGuard; + +class Connection; + +struct CachedResponse { + u64 time; + std::shared_ptr response; +}; + +class Server { +private: + int sock_; + std::string host_; + int port_; + bool verbose_; + p18::Client client_; + std::shared_ptr device_; + + u64 cacheTimeout_; + std::map cache_; + + std::mutex threads_mutex_; + std::mutex client_mutex_; + + std::vector connections_; + +public: + static const u64 CACHE_TIMEOUT = 1000; + + volatile std::atomic sigCaught = 0; + + explicit Server(std::shared_ptr device); + ~Server(); + + void setVerbose(bool verbose); + void setCacheTimeout(u64 timeout); + void start(std::string& host, int port); + + bool verbose() const { return verbose_; } + void addConnection(Connection* conn); + void removeConnection(Connection* conn); + size_t getConnectionsCount() const; + + std::shared_ptr executeCommand(p18::CommandType commandType, std::vector& arguments); +}; + + +class ServerError : public std::runtime_error { +public: + using std::runtime_error::runtime_error; +}; + +} + +#endif //INVERTER_TOOLS_SERVER_TCP_SERVER_H -- cgit v1.2.3