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_RPC_METHOD_H 20 #define GRPCPP_IMPL_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), 40 suffix_for_stats_(nullptr), 41 method_type_(type), 42 channel_tag_(nullptr) {} 43 RpcMethod(const char * name,const char * suffix_for_stats,RpcType type)44 RpcMethod(const char* name, const char* suffix_for_stats, RpcType type) 45 : name_(name), 46 suffix_for_stats_(suffix_for_stats), 47 method_type_(type), 48 channel_tag_(nullptr) {} 49 RpcMethod(const char * name,RpcType type,const std::shared_ptr<ChannelInterface> & channel)50 RpcMethod(const char* name, RpcType type, 51 const std::shared_ptr<ChannelInterface>& channel) 52 : name_(name), 53 suffix_for_stats_(nullptr), 54 method_type_(type), 55 channel_tag_(channel->RegisterMethod(name)) {} 56 RpcMethod(const char * name,const char * suffix_for_stats,RpcType type,const std::shared_ptr<ChannelInterface> & channel)57 RpcMethod(const char* name, const char* suffix_for_stats, RpcType type, 58 const std::shared_ptr<ChannelInterface>& channel) 59 : name_(name), 60 suffix_for_stats_(suffix_for_stats), 61 method_type_(type), 62 channel_tag_(channel->RegisterMethod(name)) {} 63 name()64 const char* name() const { return name_; } suffix_for_stats()65 const char* suffix_for_stats() const { return suffix_for_stats_; } method_type()66 RpcType method_type() const { return method_type_; } SetMethodType(RpcType type)67 void SetMethodType(RpcType type) { method_type_ = type; } channel_tag()68 void* channel_tag() const { return channel_tag_; } 69 70 private: 71 const char* const name_; 72 const char* const suffix_for_stats_; 73 RpcType method_type_; 74 void* const channel_tag_; 75 }; 76 77 } // namespace internal 78 } // namespace grpc 79 80 #endif // GRPCPP_IMPL_RPC_METHOD_H 81