aboutsummaryrefslogtreecommitdiff
path: root/libcmix-common/senderreceiver.hpp
diff options
context:
space:
mode:
authorDennis Brentjes <d.brentjes@gmail.com>2016-12-01 14:34:18 +0100
committerDennis Brentjes <d.brentjes@gmail.com>2016-12-01 14:43:00 +0100
commitbc39d05453340257fff986edfdd728f2a89d13ad (patch)
tree34fe208d1ccba0ae891dc23851352d3af6f7ee0f /libcmix-common/senderreceiver.hpp
parent95283582a0392633974d1f3f67d5510a16eb104c (diff)
downloadcmix-bc39d05453340257fff986edfdd728f2a89d13ad.tar.gz
cmix-bc39d05453340257fff986edfdd728f2a89d13ad.tar.bz2
cmix-bc39d05453340257fff986edfdd728f2a89d13ad.zip
Removed a large chunk of code duplication in the network code.
Diffstat (limited to 'libcmix-common/senderreceiver.hpp')
-rw-r--r--libcmix-common/senderreceiver.hpp80
1 files changed, 29 insertions, 51 deletions
diff --git a/libcmix-common/senderreceiver.hpp b/libcmix-common/senderreceiver.hpp
index 6654809..3514c7e 100644
--- a/libcmix-common/senderreceiver.hpp
+++ b/libcmix-common/senderreceiver.hpp
@@ -9,76 +9,54 @@
/*!
* \file
*/
-
+
/*!
- * \brief The SenderReciever struct is a shim around ProtobufClient and only exposes things needed
- * for Sending and Receiving messages.
+ * \brief BaseSenderReceiver
*/
-struct SenderReceiver : private ProtobufClient<CMixProtoFunctor>
-{
- /*!
+template<template <typename T1> class C>
+struct BaseSenderReceiver : private C<CMixProtoFunctor> {
+/*!
* \brief SenderReceiver Explicit conversion to SenderReceiver
* \param r The Receiver to upgrade
*/
- explicit SenderReceiver(Receiver&& r)
- : ProtobufClient(std::move(r))
+ explicit BaseSenderReceiver(BaseReceiver<C, BaseSenderReceiver<C>>&& r)
+ : C<CMixProtoFunctor>(std::move(r))
{}
- /*!
- * \brief SenderReceiver Explicit conversion to SenderReceiver
- * \param s The Sender to upgrade
- */
- explicit SenderReceiver(Sender&& s)
- : ProtobufClient(std::move(s))
- {}
-
- using ProtobufClient::ProtobufClient;
- using ProtobufClient::operator=;
-
- using ProtobufClient::async_receive;
-
- using ProtobufClient::async_send;
-
- using ProtobufClient::async_connect;
-
- using ProtobufClient::close;
-
- using ProtobufClient::on_done;
-
- using ProtobufClient::is_open;
-};
-
-struct SSLSenderReceiver : private SSLProtobufClient<CMixProtoFunctor>
-{
- /*!
- * \brief SenderReceiver Explicit conversion to SenderReceiver
- * \param r The Receiver to upgrade
- */
- explicit SSLSenderReceiver(SSLReceiver&& r)
- : SSLProtobufClient(std::move(r))
- {}
/*!
* \brief SenderReceiver Explicit conversion to SenderReceiver
* \param s The Sender to upgrade
*/
- explicit SSLSenderReceiver(SSLSender&& s)
- : SSLProtobufClient(std::move(s))
+ explicit BaseSenderReceiver(BaseSender<C, BaseSenderReceiver<C>> && s)
+ : C<CMixProtoFunctor>(std::move(s))
{}
- using SSLProtobufClient::SSLProtobufClient;
- using SSLProtobufClient::operator=;
- using SSLProtobufClient::async_receive;
+ using C<CMixProtoFunctor>::C;
+ using C<CMixProtoFunctor>::operator=;
+
+ using C<CMixProtoFunctor>::async_receive;
- using SSLProtobufClient::async_send;
+ using C<CMixProtoFunctor>::async_send;
- using SSLProtobufClient::async_connect;
+ using C<CMixProtoFunctor>::async_connect;
- using SSLProtobufClient::close;
+ using C<CMixProtoFunctor>::close;
- using SSLProtobufClient::on_done;
+ using C<CMixProtoFunctor>::on_done;
- using SSLProtobufClient::is_open;
+ using C<CMixProtoFunctor>::is_open;
};
+/*!
+ * \brief Conveniance typedef for SenderReceiver
+ */
+using SenderReceiver = BaseSenderReceiver<ProtobufClient>;
+
+/*!
+ * \brief Conveniance typedef for SSLSenderReceiver
+ */
+
+using SSLSenderReceiver = BaseSenderReceiver<SSLProtobufClient>;
+