M src/network/socket_handler.hpp => src/network/socket_handler.hpp +25 -5
@@ 1,18 1,38 @@
-#ifndef SOCKET_HANDLER_INTERFACE_HPP
-# define SOCKET_HANDLER_INTERFACE_HPP
+#ifndef SOCKET_HANDLER_HPP
+# define SOCKET_HANDLER_HPP
+
+#include <memory>
+
+class Poller;
typedef int socket_t;
class SocketHandler
{
public:
- SocketHandler() {}
+ explicit SocketHandler(std::shared_ptr<Poller> poller, const socket_t socket):
+ poller(poller),
+ socket(socket)
+ {}
virtual ~SocketHandler() {}
- virtual socket_t get_socket() const = 0;
virtual void on_recv() = 0;
virtual void on_send() = 0;
virtual void connect() = 0;
virtual bool is_connected() const = 0;
+ socket_t get_socket() const
+ { return this->socket; }
+
+protected:
+ /**
+ * A pointer to the poller that manages us, because we need to communicate
+ * with it.
+ */
+ std::shared_ptr<Poller> poller;
+ /**
+ * The handled socket.
+ */
+ socket_t socket;
+
private:
SocketHandler(const SocketHandler&) = delete;
SocketHandler(SocketHandler&&) = delete;
@@ 20,4 40,4 @@ private:
SocketHandler& operator=(SocketHandler&&) = delete;
};
-#endif // SOCKET_HANDLER_INTERFACE_HPP
+#endif // SOCKET_HANDLER_HPP
M src/network/tcp_socket_handler.cpp => src/network/tcp_socket_handler.cpp +1 -7
@@ 38,8 38,7 @@ using namespace std::chrono_literals;
namespace ph = std::placeholders;
TCPSocketHandler::TCPSocketHandler(std::shared_ptr<Poller> poller):
- socket(-1),
- poller(poller),
+ SocketHandler(poller, -1),
use_tls(false),
connected(false),
connecting(false)
@@ 292,11 291,6 @@ void TCPSocketHandler::close()
this->port.clear();
}
-socket_t TCPSocketHandler::get_socket() const
-{
- return this->socket;
-}
-
void TCPSocketHandler::send_data(std::string&& data)
{
#ifdef BOTAN_FOUND
M src/network/tcp_socket_handler.hpp => src/network/tcp_socket_handler.hpp +1 -20
@@ 34,15 34,13 @@ public:
};
#endif // BOTAN_FOUND
-class Poller;
-
/**
* An interface, with a series of callbacks that should be implemented in
* subclasses that deal with a socket. These callbacks are called on various events
* (read/write/timeout, etc) when they are notified to a poller
* (select/poll/epoll etc)
*/
-class TCPSocketHandler: SocketHandler
+class TCPSocketHandler: public SocketHandler
{
protected:
~TCPSocketHandler() {}
@@ 78,10 76,6 @@ public:
*/
void send_pending_data();
/**
- * Returns the socket that should be handled by the poller.
- */
- socket_t get_socket() const;
- /**
* Close the connection, remove us from the poller
*/
void close();
@@ 186,10 180,6 @@ private:
void on_tls_activated();
#endif // BOTAN_FOUND
/**
- * The handled socket.
- */
- socket_t socket;
- /**
* Where data is added, when we want to send something to the client.
*/
std::list<std::string> out_buf;
@@ 204,15 194,6 @@ private:
protected:
/**
- * A pointer to the poller that manages us, because we need to communicate
- * with it, sometimes (for example to tell it that he now needs to watch
- * write events for us). Do not ever try to delete it.
- *
- * And a raw pointer because we are not owning it, it is owning us
- * (actually it is sharing our ownership with a Bridge).
- */
- std::shared_ptr<Poller> poller;
- /**
* Where data read from the socket is added until we can extract a full
* and meaningful “message” from it.
*