Go to the documentation of this file.
19 #ifndef GRPCPP_IMPL_SERVICE_TYPE_H
20 #define GRPCPP_IMPL_SERVICE_TYPE_H
28 #include "absl/log/absl_check.h"
32 class CompletionQueue;
34 class ServerInterface;
37 namespace experimental {
40 template <
class RequestType>
41 class CallbackSessionHandler;
61 virtual void BindCall(
Call* call) = 0;
72 for (
const auto& method : methods_) {
73 if (method && method->handler() ==
nullptr) {
81 for (
const auto& method : methods_) {
91 for (
const auto& method : methods_) {
92 if (method && (method->api_type() ==
103 for (
const auto& method : methods_) {
104 if (method ==
nullptr) {
112 template <
class Message>
122 size_t idx =
static_cast<size_t>(index);
124 notification_cq, tag, request);
131 size_t idx =
static_cast<size_t>(index);
133 notification_cq, tag);
135 template <
class Message>
141 size_t idx =
static_cast<size_t>(index);
143 notification_cq, tag, request);
150 size_t idx =
static_cast<size_t>(index);
152 notification_cq, tag);
156 methods_.emplace_back(method);
162 size_t idx =
static_cast<size_t>(index);
163 ABSL_CHECK_NE(methods_[idx].get(),
nullptr)
164 <<
"Cannot mark the method as 'async' because it has already been "
165 "marked as 'generic'.";
172 size_t idx =
static_cast<size_t>(index);
173 ABSL_CHECK_NE(methods_[idx].get(),
nullptr)
174 <<
"Cannot mark the method as 'raw' because it has already "
175 "been marked as 'generic'.";
182 size_t idx =
static_cast<size_t>(index);
183 ABSL_CHECK_NE(methods_[idx]->handler(),
nullptr)
184 <<
"Cannot mark the method as 'generic' because it has already been "
185 "marked as 'async' or 'raw'.";
186 methods_[idx].reset();
192 size_t idx =
static_cast<size_t>(index);
193 ABSL_CHECK(methods_[idx] && methods_[idx]->handler())
194 <<
"Cannot mark an async or generic method Streamed";
195 methods_[idx]->SetHandler(streamed_method);
207 size_t idx =
static_cast<size_t>(index);
208 ABSL_CHECK_NE(methods_[idx].get(),
nullptr)
209 <<
"Cannot mark the method as 'callback' because it has already been "
210 "marked as 'generic'.";
211 methods_[idx]->SetHandler(handler);
212 methods_[idx]->SetServerApiType(
219 size_t idx =
static_cast<size_t>(index);
220 ABSL_CHECK_NE(methods_[idx].get(),
nullptr)
221 <<
"Cannot mark the method as 'raw callback' because it has already "
222 "been marked as 'generic'.";
223 methods_[idx]->SetHandler(handler);
224 methods_[idx]->SetServerApiType(
229 size_t idx =
static_cast<size_t>(index);
230 return methods_[idx]->handler();
236 template <
class RequestType>
240 bool is_virtual_service_ =
false;
241 std::vector<std::unique_ptr<internal::RpcServiceMethod>> methods_;
244 namespace experimental {
246 service->is_virtual_service_ =
true;
252 #endif // GRPCPP_IMPL_SERVICE_TYPE_H
void RequestAsyncUnary(int index, grpc::ServerContext *context, Message *request, internal::ServerAsyncStreamingInterface *stream, grpc::CompletionQueue *call_cq, grpc::ServerCompletionQueue *notification_cq, void *tag)
Definition: service_type.h:113
bool has_callback_methods() const
Definition: service_type.h:90
Definition: service_type.h:47
void MarkMethodRaw(int index)
Definition: service_type.h:169
void MarkMethodAsync(int index)
Definition: service_type.h:159
A ServerContext or CallbackServerContext allows the code implementing a service handler to:
Definition: server_context.h:592
Represents a gRPC server.
Definition: server.h:58
An Alarm posts the user-provided tag to its associated completion queue or invokes the user-provided ...
Definition: alarm.h:33
virtual ~Service()
Definition: service_type.h:69
internal::MethodHandler * GetHandler(int index)
Definition: service_type.h:228
bool has_generic_methods() const
Definition: service_type.h:102
void RequestAsyncBidiStreaming(int index, grpc::ServerContext *context, internal::ServerAsyncStreamingInterface *stream, grpc::CompletionQueue *call_cq, grpc::ServerCompletionQueue *notification_cq, void *tag)
Definition: service_type.h:145
Straightforward wrapping of the C call object.
Definition: call.h:34
Descriptor of an RPC service and its various RPC methods.
Definition: service_type.h:66
void MarkMethodCallback(int index, internal::MethodHandler *handler)
Definition: service_type.h:204
@ BIDI_STREAMING
Definition: rpc_method.h:35
void MarkMethodGeneric(int index)
Definition: service_type.h:179
void AddMethod(internal::RpcServiceMethod *method)
Definition: service_type.h:155
bool has_synchronous_methods() const
Definition: service_type.h:80
void MarkMethodStreamed(int index, internal::MethodHandler *streamed_method)
Definition: service_type.h:189
virtual void SendInitialMetadata(void *tag)=0
Request notification of the sending of initial metadata to the client.
void RequestAsyncServerStreaming(int index, grpc::ServerContext *context, Message *request, internal::ServerAsyncStreamingInterface *stream, grpc::CompletionQueue *call_cq, grpc::ServerCompletionQueue *notification_cq, void *tag)
Definition: service_type.h:136
Base class for running an RPC handler.
Definition: rpc_service_method.h:40
Definition: server_callback_handlers.h:911
void RequestAsyncCall(internal::RpcServiceMethod *method, grpc::ServerContext *context, internal::ServerAsyncStreamingInterface *stream, grpc::CompletionQueue *call_cq, grpc::ServerCompletionQueue *notification_cq, void *tag, Message *message)
Definition: server_interface.h:314
A specific type of completion queue used by the processing of notifications by servers.
Definition: completion_queue.h:426
A thin wrapper around grpc_completion_queue (see src/core/lib/surface/completion_queue....
Definition: completion_queue.h:104
void SetVirtualService(Service *service)
Definition: service_type.h:245
Server side rpc method class.
Definition: rpc_service_method.h:86
bool has_async_methods() const
Definition: service_type.h:71
void MarkMethodRawCallback(int index, internal::MethodHandler *handler)
Definition: service_type.h:216
Definition: server_interface.h:59
::google::protobuf::Message Message
Definition: config_protobuf.h:89
void RequestAsyncClientStreaming(int index, grpc::ServerContext *context, internal::ServerAsyncStreamingInterface *stream, grpc::CompletionQueue *call_cq, grpc::ServerCompletionQueue *notification_cq, void *tag)
Definition: service_type.h:126
virtual ~ServerAsyncStreamingInterface()
Definition: service_type.h:49
Service()
Definition: service_type.h:68