~singpolyma/biboumi

ref: 87aaacdb420341bf3619922332d58b95249971bc biboumi/src/irc/irc_client.hpp -rw-r--r-- 1.5 KiB
87aaacdb — Florent Le Coz Rename libirc and libxmpp to irc and xmpp 10 years ago
                                                                                
7869ef2a Florent Le Coz
87aaacdb Florent Le Coz
4027ef8c Florent Le Coz
7869ef2a Florent Le Coz
4027ef8c Florent Le Coz
7869ef2a Florent Le Coz
4027ef8c Florent Le Coz
7869ef2a Florent Le Coz
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#ifndef IRC_CLIENT_INCLUDED
# define IRC_CLIENT_INCLUDED

#include <irc/irc_message.hpp>

#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();
  /**
   * Called when successfully connected to the server
   */
  void on_connected();
  /**
   * 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();
  /**
   * 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);

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

#endif // IRC_CLIENT_INCLUDED