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 <array>
12 #include <atomic>
13 #include <shared_mutex>
14 
15 #include "logger/logger_fwd.hpp"
16 
17 namespace iroha {
18  namespace ordering {
19 
24  public:
32 
34  template <typename T>
35  using PeerCollectionType = std::array<T, kCount>;
36 
41  struct CurrentPeers {
44  };
45 
47  std::shared_ptr<transport::OdOsNotificationFactory> factory,
48  logger::LoggerPtr log);
49 
51  std::shared_ptr<transport::OdOsNotificationFactory> factory,
52  CurrentPeers initial_peers,
53  logger::LoggerPtr log);
54 
55  ~OnDemandConnectionManager() override;
56 
57  void onBatches(CollectionType batches) override;
58 
59  void onRequestProposal(consensus::Round round) override;
60 
66 
67  private:
72  struct CurrentConnections {
74  std::optional<std::unique_ptr<transport::OdOsNotification>>>
75  peers;
76  };
77 
78  logger::LoggerPtr log_;
79  std::shared_ptr<transport::OdOsNotificationFactory> factory_;
80 
81  CurrentConnections connections_;
82 
83  std::shared_timed_mutex mutex_;
84  std::atomic_bool stop_requested_{false};
85  };
86 
87  } // namespace ordering
88 } // namespace iroha
89 
90 #endif // IROHA_ON_DEMAND_CONNECTION_MANAGER_HPP
Definition: on_demand_connection_manager.hpp:41
Definition: on_demand_connection_manager.hpp:31
~OnDemandConnectionManager() override
Definition: on_demand_connection_manager.cpp:29
PeerType
Definition: on_demand_connection_manager.hpp:31
void onBatches(CollectionType batches) override
Definition: on_demand_connection_manager.cpp:34
Definition: on_demand_connection_manager.hpp:31
std::shared_ptr< Logger > LoggerPtr
Definition: logger_fwd.hpp:22
Definition: on_demand_connection_manager.hpp:23
void initializeConnections(const CurrentPeers &peers)
Definition: on_demand_connection_manager.cpp:73
std::array< T, kCount > PeerCollectionType
Collection with value types which represent peers.
Definition: on_demand_connection_manager.hpp:35
Definition: block_query.hpp:15
PeerCollectionType< std::shared_ptr< shared_model::interface::Peer > > peers
Definition: on_demand_connection_manager.hpp:43
OnDemandConnectionManager(std::shared_ptr< transport::OdOsNotificationFactory > factory, logger::LoggerPtr log)
Definition: on_demand_connection_manager.cpp:16
Definition: on_demand_os_transport.hpp:32
Definition: on_demand_connection_manager.hpp:31
Definition: on_demand_connection_manager.hpp:31
Definition: round.hpp:31
std::vector< TransactionBatchType > CollectionType
Definition: on_demand_os_transport.hpp:43
void onRequestProposal(consensus::Round round) override
Definition: on_demand_connection_manager.cpp:60