rpc_method.h 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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. #ifndef GRPCPP_IMPL_RPC_METHOD_H
  19. #define GRPCPP_IMPL_RPC_METHOD_H
  20. #include <memory>
  21. #include <grpcpp/impl/codegen/channel_interface.h>
  22. namespace grpc {
  23. namespace internal {
  24. /// Descriptor of an RPC method
  25. class RpcMethod {
  26. public:
  27. enum RpcType {
  28. NORMAL_RPC = 0,
  29. CLIENT_STREAMING, // request streaming
  30. SERVER_STREAMING, // response streaming
  31. BIDI_STREAMING
  32. };
  33. RpcMethod(const char* name, RpcType type)
  34. : name_(name),
  35. suffix_for_stats_(nullptr),
  36. method_type_(type),
  37. channel_tag_(nullptr) {}
  38. RpcMethod(const char* name, const char* suffix_for_stats, RpcType type)
  39. : name_(name),
  40. suffix_for_stats_(suffix_for_stats),
  41. method_type_(type),
  42. channel_tag_(nullptr) {}
  43. RpcMethod(const char* name, RpcType type,
  44. const std::shared_ptr<ChannelInterface>& channel)
  45. : name_(name),
  46. suffix_for_stats_(nullptr),
  47. method_type_(type),
  48. channel_tag_(channel->RegisterMethod(name)) {}
  49. RpcMethod(const char* name, const char* suffix_for_stats, RpcType type,
  50. const std::shared_ptr<ChannelInterface>& channel)
  51. : name_(name),
  52. suffix_for_stats_(suffix_for_stats),
  53. method_type_(type),
  54. channel_tag_(channel->RegisterMethod(name)) {}
  55. const char* name() const { return name_; }
  56. const char* suffix_for_stats() const { return suffix_for_stats_; }
  57. RpcType method_type() const { return method_type_; }
  58. void SetMethodType(RpcType type) { method_type_ = type; }
  59. void* channel_tag() const { return channel_tag_; }
  60. private:
  61. const char* const name_;
  62. const char* const suffix_for_stats_;
  63. RpcType method_type_;
  64. void* const channel_tag_;
  65. };
  66. } // namespace internal
  67. } // namespace grpc
  68. #endif // GRPCPP_IMPL_RPC_METHOD_H