summaryrefslogtreecommitdiff
path: root/src/connection.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/connection.h')
-rw-r--r--src/connection.h53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/connection.h b/src/connection.h
new file mode 100644
index 0000000..b51a67f
--- /dev/null
+++ b/src/connection.h
@@ -0,0 +1,53 @@
+#ifndef CONNECTION_H
+#define CONNECTION_H
+
+#include <boost/asio.hpp>
+#include <boost/enable_shared_from_this.hpp>
+#include <boost/function.hpp>
+
+#include "../common/connectionbase.h"
+
+class Connection : public ConnectionBase, public boost::enable_shared_from_this<Connection> {
+ private:
+ friend class TCPServer;
+ friend class Client;
+
+ boost::asio::ip::tcp::socket socket;
+
+ boost::function<void (Message::p)> recv_callback;
+ boost::function<void (const std::string&)> error_callback;
+
+ Connection(boost::asio::io_service& io_service);
+
+ //! Callback for when data is read.
+ void handle_read(uint8_t* data, std::size_t bytes, const boost::system::error_code& error_code);
+
+ //! Callback for when data is written.
+ void handle_write();
+
+ protected:
+ //! Implements request_data().
+ virtual void request_data(std::size_t bytes);
+
+ //! Implements write_data().
+ virtual void write_data(uint8_t* data, std::size_t bytes);
+
+ //! Implements got_message().
+ virtual void got_message(const Message::p& msg);
+
+ //! Implements error().
+ virtual void error(const std::string& msg);
+
+ public:
+ typedef boost::shared_ptr<Connection> p;
+
+ //! Constructs a new instance and returns a shared pointer.
+ static p create(boost::asio::io_service& io_service);
+
+ //! Initiates an asynchronous message receive.
+ //! \param callback Callback for received message.
+ //! \param error Callback for error.
+ void recv(boost::function<void (Message::p)> callback, boost::function<void (const std::string&)> error = 0);
+};
+
+#endif