aboutsummaryrefslogtreecommitdiff
path: root/node/node.cpp
diff options
context:
space:
mode:
authorDennis Brentjes <d.brentjes@gmail.com>2016-11-27 10:08:19 +0100
committerDennis Brentjes <d.brentjes@gmail.com>2016-11-27 10:08:19 +0100
commit74cea534fd189a2db423ae60997447e66265922b (patch)
treedecc06fa5da1f3f42612d527462d22ee487bf2db /node/node.cpp
parentfa7a48172a3c9d9c2f96d6f9c05d80f497bc304d (diff)
downloadcmix-74cea534fd189a2db423ae60997447e66265922b.tar.gz
cmix-74cea534fd189a2db423ae60997447e66265922b.tar.bz2
cmix-74cea534fd189a2db423ae60997447e66265922b.zip
Implements message delivery.
Adds a minimum number of messages per mix. Embeds the destination in the message. Clients now send messages to themselves.
Diffstat (limited to 'node/node.cpp')
-rw-r--r--node/node.cpp22
1 files changed, 21 insertions, 1 deletions
diff --git a/node/node.cpp b/node/node.cpp
index 2310bc1..84ea179 100644
--- a/node/node.cpp
+++ b/node/node.cpp
@@ -156,8 +156,14 @@ void Node::handle_message(Purgatory::iterator handle, cmix_proto::CMixMessage me
}
void Node::start_precomputation() {
- BOOST_LOG_TRIVIAL(trace) << "Starting precomputation for " << clients.size() << " clients.";
+ BOOST_LOG_TRIVIAL(trace) << "Starting precomputation for " << messages.size() << " clients.";
index_map.clear();
+
+ if(messages.size() < network_settings.minimum_nr_messages) {
+ start_timer_delayed_mix();
+ return;
+ }
+
if(start_mix(&cmix_ctx, messages.size()) != no_error) {
exit(-1);
}
@@ -278,3 +284,17 @@ bool Node::send_bye(bool got_bye)
return false;
}
}
+
+void Node::start_timer_delayed_mix()
+{
+ timer.expires_from_now(boost::posix_time::millisec(500));
+ timer.async_wait([this](boost::system::error_code const& ec) {
+ if(ec == boost::system::errc::operation_canceled) {
+ return;
+ }
+ if(ec) {
+ throw std::runtime_error(ec.message());
+ }
+ start_precomputation();
+ });
+}