aboutsummaryrefslogtreecommitdiff
path: root/node/node.cpp
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/node.cpp
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/node.cpp')
-rw-r--r--node/node.cpp24
1 files changed, 12 insertions, 12 deletions
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: {