summaryrefslogtreecommitdiff
path: root/src/libirc/irc_client.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libirc/irc_client.hpp')
-rw-r--r--src/libirc/irc_client.hpp67
1 files changed, 67 insertions, 0 deletions
diff --git a/src/libirc/irc_client.hpp b/src/libirc/irc_client.hpp
new file mode 100644
index 0000000..73e7efd
--- /dev/null
+++ b/src/libirc/irc_client.hpp
@@ -0,0 +1,67 @@
+#ifndef IRC_CLIENT_INCLUDED
+# define IRC_CLIENT_INCLUDED
+
+#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();
+ /**
+ * We read the data, try to parse it and generate some event if
+ * one or more full message is available.
+ */
+ void on_recv();
+ /**
+ * Just write as much data as possible on the socket.
+ */
+ void on_send();
+ socket_t get_socket() const;
+ /**
+ * Connect to the remote server
+ */
+ void connect(const std::string& address, const std::string& port);
+ /**
+ * Close the connection, remove us from the poller
+ */
+ void close();
+ /**
+ * Called when we detect an orderly close by the remote endpoint.
+ */
+ 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();
+
+private:
+ socket_t socket;
+ /**
+ * Where data read from the socket is added, until we can parse a whole
+ * IRC message, the used data is then removed from that buffer.
+ *
+ * TODO: something more efficient than a string.
+ */
+ std::string in_buf;
+ /**
+ * Where data is added, when we want to send something to the client.
+ */
+ std::string out_buf;
+
+ IrcClient(const IrcClient&) = delete;
+ IrcClient(IrcClient&&) = delete;
+ IrcClient& operator=(const IrcClient&) = delete;
+ IrcClient& operator=(IrcClient&&) = delete;
+};
+
+#endif // IRC_CLIENT_INCLUDED