hyperledger/iroha
Iroha - A simple, decentralized ledger http://iroha.tech
mst_transport_grpc.hpp
Go to the documentation of this file.
1 
6 #ifndef IROHA_MST_TRANSPORT_GRPC_HPP
7 #define IROHA_MST_TRANSPORT_GRPC_HPP
8 
9 #include "mst.grpc.pb.h"
11 
17 #include "logger/logger_fwd.hpp"
20 
21 namespace iroha {
22 
23  namespace ametsuchi {
24  class TxPresenceCache;
25  }
26 
27  namespace network {
29  public transport::MstTransportGrpc::Service {
30  public:
31  using SenderFactory = std::function<
32  std::unique_ptr<transport::MstTransportGrpc::StubInterface>(
34  using TransportFactoryType =
38 
41  async_call,
42  std::shared_ptr<TransportFactoryType> transaction_factory,
43  std::shared_ptr<shared_model::interface::TransactionBatchParser>
44  batch_parser,
45  std::shared_ptr<shared_model::interface::TransactionBatchFactory>
46  transaction_batch_factory,
47  std::shared_ptr<iroha::ametsuchi::TxPresenceCache> tx_presence_cache,
48  std::shared_ptr<Completer> mst_completer,
49  shared_model::interface::types::PublicKeyHexStringView my_key,
50  logger::LoggerPtr mst_state_logger,
52  boost::optional<SenderFactory> = boost::none);
53 
61  grpc::Status SendState(
62  ::grpc::ServerContext *context,
63  const ::iroha::network::transport::MstState *request,
64  ::google::protobuf::Empty *response) override;
65 
66  void subscribe(
67  std::shared_ptr<MstTransportNotification> notification) override;
68 
69  rxcpp::observable<bool> sendState(
70  std::shared_ptr<shared_model::interface::Peer const> to,
71  MstState const &providing_state) override;
72 
73  private:
74  std::weak_ptr<MstTransportNotification> subscriber_;
75  std::shared_ptr<network::AsyncGrpcClient<google::protobuf::Empty>>
76  async_call_;
77  std::shared_ptr<TransportFactoryType> transaction_factory_;
78  std::shared_ptr<shared_model::interface::TransactionBatchParser>
79  batch_parser_;
80  std::shared_ptr<shared_model::interface::TransactionBatchFactory>
81  batch_factory_;
82  std::shared_ptr<iroha::ametsuchi::TxPresenceCache> tx_presence_cache_;
84  std::shared_ptr<Completer> mst_completer_;
85  std::string const my_key_;
86 
87  logger::LoggerPtr mst_state_logger_;
88  logger::LoggerPtr log_;
90 
91  boost::optional<SenderFactory> sender_factory_;
92  };
93 
94  void sendStateAsync(
96  MstState const &state,
97  shared_model::interface::types::PublicKeyHexStringView sender_key,
99  std::function<void(grpc::Status &, google::protobuf::Empty &)>
100  on_response = {});
101 
102  } // namespace network
103 } // namespace iroha
104 
105 #endif // IROHA_MST_TRANSPORT_GRPC_HPP
std::function< std::unique_ptr< transport::MstTransportGrpc::StubInterface >(const shared_model::interface::Peer &)> SenderFactory
Definition: mst_transport_grpc.hpp:33
Definition: peer.hpp:20
Definition: mst_state.hpp:76
std::shared_ptr< Logger > LoggerPtr
Definition: logger_fwd.hpp:22
Definition: mst_transport_grpc.hpp:28
Definition: block_query.hpp:15
void sendStateAsync(shared_model::interface::Peer const &to, MstState const &state, shared_model::interface::types::PublicKeyHexStringView sender_key, AsyncGrpcClient< google::protobuf::Empty > &async_call, std::function< void(grpc::Status &, google::protobuf::Empty &)> on_response={})
Definition: mst_transport.hpp:42
Definition: async_grpc_client.hpp:25
Status
Definition: status.hpp:12
Definition: transaction.hpp:23