diff options
| author | Dennis Brentjes <d.brentjes@gmail.com> | 2016-10-13 14:35:32 +0200 |
|---|---|---|
| committer | Dennis Brentjes <d.brentjes@gmail.com> | 2016-10-13 14:35:32 +0200 |
| commit | 366bae00016bfbfdd354ab010555c2927505b2b2 (patch) | |
| tree | e329c2ff179f62f093c6c53f84fb8faf4f5fccce /node | |
| parent | d9587cfd27aa5ef26170ec1983b47f1e26dc8136 (diff) | |
| download | cmix-366bae00016bfbfdd354ab010555c2927505b2b2.tar.gz cmix-366bae00016bfbfdd354ab010555c2927505b2b2.tar.bz2 cmix-366bae00016bfbfdd354ab010555c2927505b2b2.zip | |
Second big network rewrite.
This time without the ugly SFINAE hack to restrict sending and receiving
on Senders and Receivers respectively. Replaced this hack with private
inheritance and using declerations.
Also renamed receive to async_receive to better reflect the behaviour.
Diffstat (limited to 'node')
| -rw-r--r-- | node/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | node/node.cpp | 24 | ||||
| -rw-r--r-- | node/node.hpp | 6 |
3 files changed, 17 insertions, 14 deletions
diff --git a/node/CMakeLists.txt b/node/CMakeLists.txt index c5ec53f..05468bd 100644 --- a/node/CMakeLists.txt +++ b/node/CMakeLists.txt @@ -25,4 +25,5 @@ target_link_libraries(node PRIVATE cmix-bignum PRIVATE cmix-network PRIVATE cmix-protobuf + PRIVATE cmix-common ) diff --git a/node/node.cpp b/node/node.cpp index f06e389..5487299 100644 --- a/node/node.cpp +++ b/node/node.cpp @@ -13,8 +13,8 @@ Node::Node(ListenSettings const& listen_settings, NodeNetworkSettings network_se , server(io_service, listen_settings, [this](boost::asio::ip::tcp::socket&& socket){accept_handler(std::move(socket));}) , clients() , network_settings(network_settings) -, prev_node(ProtobufClient<Receive>(tcp::socket(io_service))) -, next_node(ProtobufClient<Send>(tcp::socket(io_service))) +, prev_node(Receiver(tcp::socket(io_service))) +, next_node(Sender(tcp::socket(io_service))) , api(get_implementation()) , keypair(api.create_key_pair()) , network_pub_key() @@ -42,14 +42,14 @@ void Node::run() { void Node::accept_handler(boost::asio::ip::tcp::socket&& socket) { - std::list<ProtobufClient<Receive>>::iterator it = purgatory.emplace(purgatory.end(), std::move(socket)); + std::list<Receiver>::iterator it = purgatory.emplace(purgatory.end(), std::move(socket)); purgatory.back().on_done( [this, it]() { purgatory.erase(it); } ); - it->receive([this, it](cmix_proto::CMixMessage message) { + it->async_receive([this, it](cmix_proto::CMixMessage message) { handle_message(it, message); }); } @@ -109,7 +109,7 @@ void Node::handle_node_message(cmix_proto::CMixMessage message) prev_node.close(); if (!shutting_down) { send_bye(); - prev_node.receive([this](cmix_proto::CMixMessage message){ + prev_node.async_receive([this](cmix_proto::CMixMessage message){ handle_node_message(message); }); } @@ -119,7 +119,7 @@ void Node::handle_node_message(cmix_proto::CMixMessage message) BOOST_LOG_TRIVIAL(error) << "handle_node_message: CMixMessage contains unknown contents."; } } - prev_node.receive([this](cmix_proto::CMixMessage message) { + prev_node.async_receive([this](cmix_proto::CMixMessage message) { handle_node_message(message); }); } @@ -131,7 +131,7 @@ void Node::handle_client_message(ClientMap::key_type handle, cmix_proto::CMixMes BOOST_LOG_TRIVIAL(trace) << "Deriving shared key"; api.derive_shared_key(keypair, reinterpret_cast<uint8_t const*>(message.keyexchange().public_key().c_str()), true); - clients.at(handle).receive([this, handle](cmix_proto::CMixMessage message){ + clients.at(handle).async_receive([this, handle](cmix_proto::CMixMessage message){ handle_client_message(handle, message); }); return; @@ -154,9 +154,9 @@ void Node::handle_client_message(ClientMap::key_type handle, cmix_proto::CMixMes void Node::handle_imanode(std::list<Receiver>::iterator handle) { handle->on_done([]{}); - prev_node = make_receiver(std::move(*handle)); + prev_node = Receiver(std::move(*handle)); purgatory.erase(handle); - prev_node.receive([this](cmix_proto::CMixMessage message){ + prev_node.async_receive([this](cmix_proto::CMixMessage message){ handle_node_message(message); }); } @@ -164,17 +164,17 @@ void Node::handle_imanode(std::list<Receiver>::iterator handle) { void Node::handle_imaclient(std::list<Receiver>::iterator handle, cmix_proto::ImAClient c) { BOOST_LOG_TRIVIAL(trace) << "Handling imaclient"; std::string client_id = c.id(); - clients.emplace(c.id(), make_sender_receiver(std::move(*handle))); + clients.emplace(c.id(), SenderReceiver(std::move(*handle))); clients.at(c.id()).on_done([this, client_id]{ clients.erase(client_id); }); purgatory.erase(handle); - clients.at(c.id()).receive([this, client_id](cmix_proto::CMixMessage message) { + clients.at(c.id()).async_receive([this, client_id](cmix_proto::CMixMessage message) { handle_client_message(client_id, message); }); } -void Node::handle_message(std::list<ProtobufClient<Receive>>::iterator handle, cmix_proto::CMixMessage message) +void Node::handle_message(std::list<Receiver>::iterator handle, cmix_proto::CMixMessage message) { switch(message.contents_case()) { case cmix_proto::CMixMessage::ContentsCase::kImanode: { diff --git a/node/node.hpp b/node/node.hpp index 868c4b8..9423860 100644 --- a/node/node.hpp +++ b/node/node.hpp @@ -1,7 +1,9 @@ #pragma once #include "server.hpp" -#include "protobufclient.hpp" +#include "receiver.hpp" +#include "senderreceiver.hpp" +#include "sender.hpp" #include "api.h" @@ -61,7 +63,7 @@ class Node void handle_imanode(std::list<Receiver>::iterator handle); void handle_imaclient(std::list<Receiver>::iterator handle, cmix_proto::ImAClient c); - void handle_message(std::list<ProtobufClient<Receive>>::iterator handle, cmix_proto::CMixMessage message); + void handle_message(std::list<Receiver>::iterator handle, cmix_proto::CMixMessage message); public: /*! |
