aboutsummaryrefslogtreecommitdiff
path: root/node
diff options
context:
space:
mode:
authorDennis Brentjes <d.brentjes@gmail.com>2016-10-13 14:35:32 +0200
committerDennis Brentjes <d.brentjes@gmail.com>2016-10-13 14:35:32 +0200
commit366bae00016bfbfdd354ab010555c2927505b2b2 (patch)
treee329c2ff179f62f093c6c53f84fb8faf4f5fccce /node
parentd9587cfd27aa5ef26170ec1983b47f1e26dc8136 (diff)
downloadcmix-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.txt1
-rw-r--r--node/node.cpp24
-rw-r--r--node/node.hpp6
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:
/*!