summaryrefslogtreecommitdiff
path: root/ext/librethinkdbxx/src/connection.h
diff options
context:
space:
mode:
Diffstat (limited to 'ext/librethinkdbxx/src/connection.h')
-rw-r--r--ext/librethinkdbxx/src/connection.h59
1 files changed, 59 insertions, 0 deletions
diff --git a/ext/librethinkdbxx/src/connection.h b/ext/librethinkdbxx/src/connection.h
new file mode 100644
index 00000000..d3882857
--- /dev/null
+++ b/ext/librethinkdbxx/src/connection.h
@@ -0,0 +1,59 @@
+#pragma once
+
+#include <string>
+#include <queue>
+#include <mutex>
+#include <memory>
+#include <condition_variable>
+
+#include "protocol_defs.h"
+#include "datum.h"
+#include "error.h"
+
+#define FOREVER (-1)
+#define SECOND 1
+#define MICROSECOND 0.000001
+
+namespace RethinkDB {
+
+class Term;
+using OptArgs = std::map<std::string, Term>;
+
+// A connection to a RethinkDB server
+// It contains:
+// * A socket
+// * Read and write locks
+// * A cache of responses that have not been read by the corresponding Cursor
+class ConnectionPrivate;
+class Connection {
+public:
+ Connection() = delete;
+ Connection(const Connection&) noexcept = delete;
+ Connection(Connection&&) noexcept = delete;
+ Connection& operator=(Connection&&) noexcept = delete;
+ Connection& operator=(const Connection&) noexcept = delete;
+ ~Connection();
+
+ void close();
+
+private:
+ explicit Connection(ConnectionPrivate *dd);
+ std::unique_ptr<ConnectionPrivate> d;
+
+ Cursor start_query(Term *term, OptArgs&& args);
+ void stop_query(uint64_t);
+ void continue_query(uint64_t);
+
+ friend class Cursor;
+ friend class CursorPrivate;
+ friend class Token;
+ friend class Term;
+ friend std::unique_ptr<Connection>
+ connect(std::string host, int port, std::string auth_key);
+
+};
+
+// $doc(connect)
+std::unique_ptr<Connection> connect(std::string host = "localhost", int port = 28015, std::string auth_key = "");
+
+}