From 9e635d9b19e72eefef082dd8071d3e4c9d6cfab1 Mon Sep 17 00:00:00 2001 From: Roland Reichwein Date: Thu, 7 May 2020 19:24:45 +0200 Subject: Separated out TCP socket class --- plugins/fcgi/socket.h | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 plugins/fcgi/socket.h (limited to 'plugins/fcgi/socket.h') diff --git a/plugins/fcgi/socket.h b/plugins/fcgi/socket.h new file mode 100644 index 0000000..b4ec54b --- /dev/null +++ b/plugins/fcgi/socket.h @@ -0,0 +1,70 @@ +#pragma once + +#include "fcgiid.h" + +#include + +#include +#include +#include +#include + +class fcgi_eof_error: public std::runtime_error +{ +public: + fcgi_eof_error(const std::string& what_arg): std::runtime_error(what_arg) {} +}; + +class Socket +{ + std::mutex m_mutex; // guard socket use in different threads + FCGI_ID m_fcgi_id; + +public: + virtual ~Socket() {} + + std::mutex& getMutex(); + + FCGI_ID& fcgi_id(); + + virtual void open() = 0; + virtual void close() = 0; + virtual bool is_open() = 0; + virtual size_t write(const std::vector& data) = 0; + virtual size_t read(std::vector& data) = 0; +}; + +class SocketFactory +{ + boost::asio::io_context m_io_context; + +public: + SocketFactory(); + std::shared_ptr create(const std::string& name); +}; + +class TCPSocket: public Socket +{ + boost::asio::io_context& m_io_context; + std::string m_host; + std::string m_port; + boost::asio::ip::tcp::socket m_socket; + +public: + TCPSocket(const std::string& host, const std::string& port, boost::asio::io_context& io_context); + ~TCPSocket() override; + + void open() override; + void close() override; + bool is_open() override; + size_t write(const std::vector& data) override; + size_t read(std::vector& data) override; +}; + +#if 0 +class FileSocket: public Socket +{ + ~FileSocket() override; +}; +#endif + -- cgit v1.2.3