xref: /aosp_15_r20/external/grpc-grpc/include/grpcpp/impl/delegating_channel.h (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1*cc02d7e2SAndroid Build Coastguard Worker //
2*cc02d7e2SAndroid Build Coastguard Worker //
3*cc02d7e2SAndroid Build Coastguard Worker // Copyright 2019 gRPC authors.
4*cc02d7e2SAndroid Build Coastguard Worker //
5*cc02d7e2SAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License");
6*cc02d7e2SAndroid Build Coastguard Worker // you may not use this file except in compliance with the License.
7*cc02d7e2SAndroid Build Coastguard Worker // You may obtain a copy of the License at
8*cc02d7e2SAndroid Build Coastguard Worker //
9*cc02d7e2SAndroid Build Coastguard Worker //     http://www.apache.org/licenses/LICENSE-2.0
10*cc02d7e2SAndroid Build Coastguard Worker //
11*cc02d7e2SAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
12*cc02d7e2SAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS,
13*cc02d7e2SAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*cc02d7e2SAndroid Build Coastguard Worker // See the License for the specific language governing permissions and
15*cc02d7e2SAndroid Build Coastguard Worker // limitations under the License.
16*cc02d7e2SAndroid Build Coastguard Worker //
17*cc02d7e2SAndroid Build Coastguard Worker //
18*cc02d7e2SAndroid Build Coastguard Worker 
19*cc02d7e2SAndroid Build Coastguard Worker #ifndef GRPCPP_IMPL_DELEGATING_CHANNEL_H
20*cc02d7e2SAndroid Build Coastguard Worker #define GRPCPP_IMPL_DELEGATING_CHANNEL_H
21*cc02d7e2SAndroid Build Coastguard Worker 
22*cc02d7e2SAndroid Build Coastguard Worker #include <memory>
23*cc02d7e2SAndroid Build Coastguard Worker 
24*cc02d7e2SAndroid Build Coastguard Worker #include <grpcpp/impl/channel_interface.h>
25*cc02d7e2SAndroid Build Coastguard Worker 
26*cc02d7e2SAndroid Build Coastguard Worker namespace grpc {
27*cc02d7e2SAndroid Build Coastguard Worker namespace experimental {
28*cc02d7e2SAndroid Build Coastguard Worker 
29*cc02d7e2SAndroid Build Coastguard Worker class DelegatingChannel : public grpc::ChannelInterface {
30*cc02d7e2SAndroid Build Coastguard Worker  public:
~DelegatingChannel()31*cc02d7e2SAndroid Build Coastguard Worker   ~DelegatingChannel() override {}
32*cc02d7e2SAndroid Build Coastguard Worker 
DelegatingChannel(std::shared_ptr<grpc::ChannelInterface> delegate_channel)33*cc02d7e2SAndroid Build Coastguard Worker   explicit DelegatingChannel(
34*cc02d7e2SAndroid Build Coastguard Worker       std::shared_ptr<grpc::ChannelInterface> delegate_channel)
35*cc02d7e2SAndroid Build Coastguard Worker       : delegate_channel_(delegate_channel) {}
36*cc02d7e2SAndroid Build Coastguard Worker 
GetState(bool try_to_connect)37*cc02d7e2SAndroid Build Coastguard Worker   grpc_connectivity_state GetState(bool try_to_connect) override {
38*cc02d7e2SAndroid Build Coastguard Worker     return delegate_channel()->GetState(try_to_connect);
39*cc02d7e2SAndroid Build Coastguard Worker   }
40*cc02d7e2SAndroid Build Coastguard Worker 
delegate_channel()41*cc02d7e2SAndroid Build Coastguard Worker   std::shared_ptr<grpc::ChannelInterface> delegate_channel() {
42*cc02d7e2SAndroid Build Coastguard Worker     return delegate_channel_;
43*cc02d7e2SAndroid Build Coastguard Worker   }
44*cc02d7e2SAndroid Build Coastguard Worker 
45*cc02d7e2SAndroid Build Coastguard Worker  private:
CreateCall(const internal::RpcMethod & method,ClientContext * context,grpc::CompletionQueue * cq)46*cc02d7e2SAndroid Build Coastguard Worker   internal::Call CreateCall(const internal::RpcMethod& method,
47*cc02d7e2SAndroid Build Coastguard Worker                             ClientContext* context,
48*cc02d7e2SAndroid Build Coastguard Worker                             grpc::CompletionQueue* cq) final {
49*cc02d7e2SAndroid Build Coastguard Worker     return delegate_channel()->CreateCall(method, context, cq);
50*cc02d7e2SAndroid Build Coastguard Worker   }
51*cc02d7e2SAndroid Build Coastguard Worker 
PerformOpsOnCall(internal::CallOpSetInterface * ops,internal::Call * call)52*cc02d7e2SAndroid Build Coastguard Worker   void PerformOpsOnCall(internal::CallOpSetInterface* ops,
53*cc02d7e2SAndroid Build Coastguard Worker                         internal::Call* call) final {
54*cc02d7e2SAndroid Build Coastguard Worker     delegate_channel()->PerformOpsOnCall(ops, call);
55*cc02d7e2SAndroid Build Coastguard Worker   }
56*cc02d7e2SAndroid Build Coastguard Worker 
RegisterMethod(const char * method)57*cc02d7e2SAndroid Build Coastguard Worker   void* RegisterMethod(const char* method) final {
58*cc02d7e2SAndroid Build Coastguard Worker     return delegate_channel()->RegisterMethod(method);
59*cc02d7e2SAndroid Build Coastguard Worker   }
60*cc02d7e2SAndroid Build Coastguard Worker 
NotifyOnStateChangeImpl(grpc_connectivity_state last_observed,gpr_timespec deadline,grpc::CompletionQueue * cq,void * tag)61*cc02d7e2SAndroid Build Coastguard Worker   void NotifyOnStateChangeImpl(grpc_connectivity_state last_observed,
62*cc02d7e2SAndroid Build Coastguard Worker                                gpr_timespec deadline, grpc::CompletionQueue* cq,
63*cc02d7e2SAndroid Build Coastguard Worker                                void* tag) override {
64*cc02d7e2SAndroid Build Coastguard Worker     delegate_channel()->NotifyOnStateChangeImpl(last_observed, deadline, cq,
65*cc02d7e2SAndroid Build Coastguard Worker                                                 tag);
66*cc02d7e2SAndroid Build Coastguard Worker   }
67*cc02d7e2SAndroid Build Coastguard Worker 
WaitForStateChangeImpl(grpc_connectivity_state last_observed,gpr_timespec deadline)68*cc02d7e2SAndroid Build Coastguard Worker   bool WaitForStateChangeImpl(grpc_connectivity_state last_observed,
69*cc02d7e2SAndroid Build Coastguard Worker                               gpr_timespec deadline) override {
70*cc02d7e2SAndroid Build Coastguard Worker     return delegate_channel()->WaitForStateChangeImpl(last_observed, deadline);
71*cc02d7e2SAndroid Build Coastguard Worker   }
72*cc02d7e2SAndroid Build Coastguard Worker 
CreateCallInternal(const internal::RpcMethod & method,ClientContext * context,grpc::CompletionQueue * cq,size_t interceptor_pos)73*cc02d7e2SAndroid Build Coastguard Worker   internal::Call CreateCallInternal(const internal::RpcMethod& method,
74*cc02d7e2SAndroid Build Coastguard Worker                                     ClientContext* context,
75*cc02d7e2SAndroid Build Coastguard Worker                                     grpc::CompletionQueue* cq,
76*cc02d7e2SAndroid Build Coastguard Worker                                     size_t interceptor_pos) final {
77*cc02d7e2SAndroid Build Coastguard Worker     return delegate_channel()->CreateCallInternal(method, context, cq,
78*cc02d7e2SAndroid Build Coastguard Worker                                                   interceptor_pos);
79*cc02d7e2SAndroid Build Coastguard Worker   }
80*cc02d7e2SAndroid Build Coastguard Worker 
CallbackCQ()81*cc02d7e2SAndroid Build Coastguard Worker   grpc::CompletionQueue* CallbackCQ() final {
82*cc02d7e2SAndroid Build Coastguard Worker     return delegate_channel()->CallbackCQ();
83*cc02d7e2SAndroid Build Coastguard Worker   }
84*cc02d7e2SAndroid Build Coastguard Worker 
85*cc02d7e2SAndroid Build Coastguard Worker   std::shared_ptr<grpc::ChannelInterface> delegate_channel_;
86*cc02d7e2SAndroid Build Coastguard Worker };
87*cc02d7e2SAndroid Build Coastguard Worker 
88*cc02d7e2SAndroid Build Coastguard Worker }  // namespace experimental
89*cc02d7e2SAndroid Build Coastguard Worker }  // namespace grpc
90*cc02d7e2SAndroid Build Coastguard Worker 
91*cc02d7e2SAndroid Build Coastguard Worker #endif  // GRPCPP_IMPL_DELEGATING_CHANNEL_H
92