irc_client.hpp 1.52 KB
Newer Older
1 2 3
#ifndef IRC_CLIENT_INCLUDED
# define IRC_CLIENT_INCLUDED

louiz’'s avatar
louiz’ committed
4 5
#include <libirc/irc_message.hpp>

6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
#include <network/socket_handler.hpp>

#include <string>

/**
 * Represent one IRC client, i.e. an endpoint connected to a single IRC
 * server, through a TCP socket, receiving and sending commands to it.
 *
 * TODO: TLS support, maybe, but that's not high priority
 */
class IrcClient: public SocketHandler
{
public:
  explicit IrcClient();
  ~IrcClient();
louiz’'s avatar
louiz’ committed
21 22 23 24
  /**
   * Called when successfully connected to the server
   */
  void on_connected();
25 26 27 28 29 30 31 32 33
  /**
   * Close the connection, remove us from the poller
   */
  void on_connection_close();
  /**
   * Parse the data we have received so far and try to get one or more
   * complete messages from it.
   */
  void parse_in_buffer();
louiz’'s avatar
louiz’ committed
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
  /**
   * Serialize the given message into a line, and send that into the socket
   * (actually, into our out_buf and signal the poller that we want to wach
   * for send events to be ready)
   */
  void send_message(IrcMessage&& message);
  /**
   * Send the USER irc command
   */
  void send_user_command(const std::string& username, const std::string& realname);
  /**
   * Send the NICK irc command
   */
  void send_nick_command(const std::string& username);
  /**
   * Send the JOIN irc command
   */
  void send_join_command(const std::string& chan_name);
52 53 54 55 56 57 58 59 60

private:
  IrcClient(const IrcClient&) = delete;
  IrcClient(IrcClient&&) = delete;
  IrcClient& operator=(const IrcClient&) = delete;
  IrcClient& operator=(IrcClient&&) = delete;
};

#endif // IRC_CLIENT_INCLUDED