hyperledger/iroha
Iroha - A simple, decentralized ledger http://iroha.tech
channel_factory.hpp
Go to the documentation of this file.
1 
6 #ifndef IROHA_CHANNEL_FACTORY_HPP
7 #define IROHA_CHANNEL_FACTORY_HPP
8 
10 
11 #include <memory>
12 #include <set>
13 #include <string>
14 
15 #include <grpc++/grpc++.h>
16 
17 #include "common/result.hpp"
20 
21 namespace iroha {
22  namespace network {
23  namespace detail {
24  grpc::ChannelArguments makeChannelArguments(
25  const std::set<std::string> &services,
26  const GrpcChannelParams &params);
27 
28  grpc::ChannelArguments makeInterPeerChannelArguments(
29  const std::set<std::string> &services,
30  const GrpcChannelParams &params);
31  } // namespace detail
32 
37  std::unique_ptr<GrpcChannelParams> getDefaultChannelParams();
38 
45  template <typename Service>
46  grpc::ChannelArguments makeInterPeerChannelArguments(
47  const GrpcChannelParams &params) {
49  {Service::service_full_name()}, params);
50  }
51 
59  template <typename Service>
60  std::shared_ptr<grpc::Channel> createInsecureChannel(
62  const GrpcChannelParams &params) {
63  return createInsecureChannel(
64  address, Service::service_full_name(), params);
65  }
66 
75  std::shared_ptr<grpc::Channel> createInsecureChannel(
77  const std::string &service_full_name,
78  const GrpcChannelParams &params);
79 
87  template <typename Service>
88  std::unique_ptr<typename Service::StubInterface> createInsecureClient(
89  const std::string &address, const GrpcChannelParams &params) {
90  return Service::NewStub(createInsecureChannel<Service>(address, params));
91  }
92 
101  template <typename Service>
102  std::unique_ptr<typename Service::StubInterface> createInsecureClient(
103  const std::string &ip, size_t port, const GrpcChannelParams &params) {
104  return createInsecureClient<Service>(ip + ":" + std::to_string(port),
105  params);
106  }
107 
109  public:
111  ChannelFactory(std::shared_ptr<const GrpcChannelParams> params);
112 
113  ~ChannelFactory() override;
114 
116  getChannel(const std::string &service_full_name,
117  const shared_model::interface::Peer &peer) override;
118 
119  protected:
121  std::string>
122  getChannelCredentials(const shared_model::interface::Peer &) const;
123 
124  private:
126  std::unique_ptr<ChannelArgumentsProvider> args_;
127  };
128 
129  } // namespace network
130 } // namespace iroha
131 
132 #endif
std::unique_ptr< GrpcChannelParams > getDefaultChannelParams()
Definition: channel_factory.cpp:26
std::string AddressType
Type of peer address.
Definition: types.hpp:50
Definition: peer.hpp:20
Definition: result_fwd.hpp:27
Definition: grpc_channel_params.hpp:17
grpc::ChannelArguments makeChannelArguments(const std::set< std::string > &services, const GrpcChannelParams &params)
Definition: channel_factory.cpp:49
std::unique_ptr< typename Service::StubInterface > createInsecureClient(const std::string &address, const GrpcChannelParams &params)
Definition: channel_factory.hpp:88
Definition: block_query.hpp:15
Definition: channel_factory.hpp:108
Definition: channel_provider.hpp:24
grpc::ChannelArguments makeInterPeerChannelArguments(const std::set< std::string > &services, const GrpcChannelParams &params)
Definition: channel_factory.cpp:44
std::shared_ptr< grpc::Channel > createInsecureChannel(const shared_model::interface::types::AddressType &address, const GrpcChannelParams &params)
Definition: channel_factory.hpp:60