aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDennis Brentjes <d.brentjes@gmail.com>2016-10-13 10:27:47 +0200
committerDennis Brentjes <d.brentjes@gmail.com>2016-10-13 10:27:47 +0200
commitad1a9858cd0d15b1090a0977098b98307875f07c (patch)
treeebc47df56b6198dad000bc7147354b7912c9fbf7
parent7bca48bc5b5e37a3a8b0b23e57b88d069fa50589 (diff)
downloadcmix-ad1a9858cd0d15b1090a0977098b98307875f07c.tar.gz
cmix-ad1a9858cd0d15b1090a0977098b98307875f07c.tar.bz2
cmix-ad1a9858cd0d15b1090a0977098b98307875f07c.zip
Added a stop condition for the client,
When all the nodes have send a bye to the client, the client will shut down.
-rw-r--r--client/cmixclient.cpp11
-rw-r--r--libcmix-network/client.cpp5
-rw-r--r--libcmix-network/client.hpp2
-rw-r--r--libcmix-network/protobufclient.hpp4
4 files changed, 19 insertions, 3 deletions
diff --git a/client/cmixclient.cpp b/client/cmixclient.cpp
index 1ffd904..933ad0e 100644
--- a/client/cmixclient.cpp
+++ b/client/cmixclient.cpp
@@ -43,14 +43,19 @@ void CMixClient::handle_message(int node_id, cmix_proto::CMixMessage message)
handle_key_exchange(node_id, *message.mutable_keyexchange());
return;
}
+ case cmix_proto::CMixMessage::ContentsCase::kBye: {
+ network_connections.at(node_id).close();
+ if(std::all_of(network_connections.begin(), network_connections.end(), [](SenderReceiver const& c) { return c.is_open(); })) {
+ break;
+ } else {
+ return;
+ }
+ }
default: {
BOOST_LOG_TRIVIAL(error) << "Received unknown message";
}
}
- for(auto&& connection : network_connections) {
- connection.close();
- }
io_service.stop();
}
diff --git a/libcmix-network/client.cpp b/libcmix-network/client.cpp
index 755989b..09ea98c 100644
--- a/libcmix-network/client.cpp
+++ b/libcmix-network/client.cpp
@@ -84,3 +84,8 @@ void Client::close()
void Client::on_done(Client::OnDoneFT f) {
done = f;
}
+
+bool Client::is_open() const
+{
+ return socket.is_open();
+}
diff --git a/libcmix-network/client.hpp b/libcmix-network/client.hpp
index 7bfea7d..7b88282 100644
--- a/libcmix-network/client.hpp
+++ b/libcmix-network/client.hpp
@@ -125,5 +125,7 @@ public:
*/
void on_done(OnDoneFT f);
+ bool is_open() const;
+
};
diff --git a/libcmix-network/protobufclient.hpp b/libcmix-network/protobufclient.hpp
index 1c97cfa..077ce62 100644
--- a/libcmix-network/protobufclient.hpp
+++ b/libcmix-network/protobufclient.hpp
@@ -128,6 +128,10 @@ public:
client.on_done(f);
}
+ bool is_open() const{
+ return client.is_open();
+ }
+
friend Receiver make_receiver(Receiver&& r);
friend SenderReceiver make_sender_receiver(SenderReceiver&& r);