• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *
3  * Copyright 2015 gRPC authors.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 
19 #ifndef GRPCPP_IMPL_CODEGEN_RPC_METHOD_H
20 #define GRPCPP_IMPL_CODEGEN_RPC_METHOD_H
21 
22 #include <memory>
23 
24 #include <grpcpp/impl/codegen/channel_interface.h>
25 
26 namespace grpc {
27 namespace internal {
28 /// Descriptor of an RPC method
29 class RpcMethod {
30  public:
31   enum RpcType {
32     NORMAL_RPC = 0,
33     CLIENT_STREAMING,  // request streaming
34     SERVER_STREAMING,  // response streaming
35     BIDI_STREAMING
36   };
37 
RpcMethod(const char * name,RpcType type)38   RpcMethod(const char* name, RpcType type)
39       : name_(name), method_type_(type), channel_tag_(NULL) {}
40 
RpcMethod(const char * name,RpcType type,const std::shared_ptr<ChannelInterface> & channel)41   RpcMethod(const char* name, RpcType type,
42             const std::shared_ptr<ChannelInterface>& channel)
43       : name_(name),
44         method_type_(type),
45         channel_tag_(channel->RegisterMethod(name)) {}
46 
name()47   const char* name() const { return name_; }
method_type()48   RpcType method_type() const { return method_type_; }
SetMethodType(RpcType type)49   void SetMethodType(RpcType type) { method_type_ = type; }
channel_tag()50   void* channel_tag() const { return channel_tag_; }
51 
52  private:
53   const char* const name_;
54   RpcType method_type_;
55   void* const channel_tag_;
56 };
57 
58 }  // namespace internal
59 }  // namespace grpc
60 
61 #endif  // GRPCPP_IMPL_CODEGEN_RPC_METHOD_H
62