hyperledger/iroha
Iroha - A simple, decentralized ledger http://iroha.tech
on_demand_connection_manager.hpp
Go to the documentation of this file.
1 
6 #ifndef IROHA_ON_DEMAND_CONNECTION_MANAGER_HPP
7 #define IROHA_ON_DEMAND_CONNECTION_MANAGER_HPP
8 
10 
11 #include <atomic>
12 #include <shared_mutex>
13 
14 #include <rxcpp/rx-lite.hpp>
15 #include "logger/logger_fwd.hpp"
16 
17 namespace iroha {
18  namespace ordering {
19 
24  public:
32  enum PeerType {
39  };
40 
42  template <typename T>
43  using PeerCollectionType = std::array<T, kCount>;
44 
49  struct CurrentPeers {
52  };
53 
55  std::shared_ptr<transport::OdOsNotificationFactory> factory,
56  rxcpp::observable<CurrentPeers> peers,
57  logger::LoggerPtr log);
58 
60  std::shared_ptr<transport::OdOsNotificationFactory> factory,
61  rxcpp::observable<CurrentPeers> peers,
62  CurrentPeers initial_peers,
63  logger::LoggerPtr log);
64 
65  ~OnDemandConnectionManager() override;
66 
67  void onBatches(CollectionType batches) override;
68 
69  boost::optional<std::shared_ptr<const ProposalType>> onRequestProposal(
70  consensus::Round round) override;
71 
72  private:
77  struct CurrentConnections {
79  };
80 
85  void initializeConnections(const CurrentPeers &peers);
86 
87  logger::LoggerPtr log_;
88  std::shared_ptr<transport::OdOsNotificationFactory> factory_;
89  rxcpp::composite_subscription subscription_;
90 
91  CurrentConnections connections_;
92 
93  std::shared_timed_mutex mutex_;
94  std::atomic_bool stop_requested_{false};
95  };
96 
97  } // namespace ordering
98 } // namespace iroha
99 
100 #endif // IROHA_ON_DEMAND_CONNECTION_MANAGER_HPP
Definition: on_demand_connection_manager.hpp:49
Definition: on_demand_connection_manager.hpp:38
~OnDemandConnectionManager() override
Definition: on_demand_connection_manager.cpp:40
PeerType
Definition: on_demand_connection_manager.hpp:32
void onBatches(CollectionType batches) override
Definition: on_demand_connection_manager.cpp:46
Definition: on_demand_connection_manager.hpp:34
boost::optional< std::shared_ptr< const ProposalType > > onRequestProposal(consensus::Round round) override
Definition: on_demand_connection_manager.cpp:74
std::shared_ptr< Logger > LoggerPtr
Definition: logger_fwd.hpp:22
Definition: on_demand_connection_manager.hpp:23
std::array< T, kCount > PeerCollectionType
Collection with value types which represent peers.
Definition: on_demand_connection_manager.hpp:43
Definition: block_query.hpp:15
PeerCollectionType< std::shared_ptr< shared_model::interface::Peer > > peers
Definition: on_demand_connection_manager.hpp:51
Definition: on_demand_connection_manager.hpp:36
Definition: on_demand_connection_manager.hpp:33
Definition: on_demand_os_transport.hpp:31
OnDemandConnectionManager(std::shared_ptr< transport::OdOsNotificationFactory > factory, rxcpp::observable< CurrentPeers > peers, logger::LoggerPtr log)
Definition: on_demand_connection_manager.cpp:16
Definition: on_demand_connection_manager.hpp:37
Definition: round.hpp:31
std::vector< TransactionBatchType > CollectionType
Definition: on_demand_os_transport.hpp:47
Definition: on_demand_connection_manager.hpp:35