~singpolyma/biboumi

8c34576ea0d97a22760a68aec228c76ecf25ab60 — Florent Le Coz 9 years ago 04d9991
Move some members of TCPSocketHandler into the SocketHandler class
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.
   *