aboutsummaryrefslogtreecommitdiff
path: root/node
diff options
context:
space:
mode:
Diffstat (limited to 'node')
-rw-r--r--node/CMakeLists.txt18
-rw-r--r--node/main.cpp4
-rw-r--r--node/node.cpp21
-rw-r--r--node/node.hpp21
4 files changed, 64 insertions, 0 deletions
diff --git a/node/CMakeLists.txt b/node/CMakeLists.txt
new file mode 100644
index 0000000..895cfb2
--- /dev/null
+++ b/node/CMakeLists.txt
@@ -0,0 +1,18 @@
+find_package(Boost COMPONENTS system program_options REQUIRED)
+
+add_executable(node
+ main.cpp
+ node.hpp node.cpp
+)
+
+target_compile_options(node
+ PRIVATE "-std=c++11"
+)
+
+target_link_libraries(node
+ PRIVATE Boost::boost
+ PRIVATE Boost::program_options
+ PRIVATE Boost::system
+ PRIVATE cmix
+ PRIVATE cmix-network
+)
diff --git a/node/main.cpp b/node/main.cpp
new file mode 100644
index 0000000..970e150
--- /dev/null
+++ b/node/main.cpp
@@ -0,0 +1,4 @@
+
+int main() {
+
+}
diff --git a/node/node.cpp b/node/node.cpp
new file mode 100644
index 0000000..497a920
--- /dev/null
+++ b/node/node.cpp
@@ -0,0 +1,21 @@
+#include "node.hpp"
+
+Node::Node(ListenSettings const& listen_settings)
+: io_service()
+, server(io_service, listen_settings, [this](boost::asio::ip::tcp::socket&& socket){accept_handler(std::move(socket));})
+, clients()
+{}
+
+void Node::accept_handler(boost::asio::ip::tcp::socket&& socket)
+{
+ clients.emplace_back(std::move(socket));
+
+ auto it = --clients.end();
+ clients.back().on_done(
+ [this, it]() {
+ clients.erase(it);
+ }
+ );
+
+ clients.back().receive();
+}
diff --git a/node/node.hpp b/node/node.hpp
new file mode 100644
index 0000000..7d30188
--- /dev/null
+++ b/node/node.hpp
@@ -0,0 +1,21 @@
+#pragma once
+
+#include "server.hpp"
+#include "nodeclient.hpp"
+
+#include <boost/asio/io_service.hpp>
+
+#include <list>
+
+class Node
+{
+ boost::asio::io_service io_service;
+ Server server;
+ std::list<NodeClient> clients;
+
+ void accept_handler(boost::asio::ip::tcp::socket&& socket);
+
+public:
+ Node(ListenSettings const& listen_settings);
+};
+