34 #ifndef GRPCXX_IMPL_CODEGEN_METHOD_HANDLER_IMPL_H
35 #define GRPCXX_IMPL_CODEGEN_METHOD_HANDLER_IMPL_H
44 template <
class ServiceType,
class RequestType,
class ResponseType>
45 class RpcMethodHandler :
public MethodHandler {
48 const RequestType*, ResponseType*)>
51 : func_(func), service_(service) {}
59 status = func_(service_, param.server_context, &req, &rsp);
66 ops.SendInitialMetadata(param.server_context->initial_metadata_,
67 param.server_context->initial_metadata_flags());
68 if (param.server_context->compression_level_set()) {
69 ops.set_compression_level(param.server_context->compression_level());
72 status = ops.SendMessage(rsp);
74 ops.ServerSendStatus(param.server_context->trailing_metadata_, status);
75 param.call->PerformOps(&ops);
76 param.call->cq()->Pluck(&ops);
85 ServiceType* service_;
89 template <
class ServiceType,
class RequestType,
class ResponseType>
90 class ClientStreamingHandler :
public MethodHandler {
97 : func_(func), service_(service) {}
102 Status status = func_(service_, param.server_context, &reader, &rsp);
108 ops.SendInitialMetadata(param.server_context->initial_metadata_,
109 param.server_context->initial_metadata_flags());
110 if (param.server_context->compression_level_set()) {
111 ops.set_compression_level(param.server_context->compression_level());
114 status = ops.SendMessage(rsp);
116 ops.ServerSendStatus(param.server_context->trailing_metadata_, status);
117 param.call->PerformOps(&ops);
118 param.call->cq()->Pluck(&ops);
122 std::function<Status(ServiceType*, ServerContext*, ServerReader<RequestType>*,
125 ServiceType* service_;
129 template <
class ServiceType,
class RequestType,
class ResponseType>
130 class ServerStreamingHandler :
public MethodHandler {
136 ServiceType* service)
137 : func_(func), service_(service) {}
146 status = func_(service_, param.server_context, &req, &writer);
150 if (!param.server_context->sent_initial_metadata_) {
151 ops.SendInitialMetadata(param.server_context->initial_metadata_,
152 param.server_context->initial_metadata_flags());
153 if (param.server_context->compression_level_set()) {
154 ops.set_compression_level(param.server_context->compression_level());
157 ops.ServerSendStatus(param.server_context->trailing_metadata_, status);
158 param.call->PerformOps(&ops);
159 param.call->cq()->Pluck(&ops);
166 ServiceType* service_;
176 template <
class Streamer,
bool WriteNeeded>
181 : func_(func), write_needed_(WriteNeeded) {}
184 Streamer stream(param.call, param.server_context);
185 Status status = func_(param.server_context, &stream);
188 if (!param.server_context->sent_initial_metadata_) {
189 ops.SendInitialMetadata(param.server_context->initial_metadata_,
190 param.server_context->initial_metadata_flags());
191 if (param.server_context->compression_level_set()) {
192 ops.set_compression_level(param.server_context->compression_level());
194 if (write_needed_ && status.
ok()) {
198 "Service did not provide response message");
201 ops.ServerSendStatus(param.server_context->trailing_metadata_, status);
202 param.call->PerformOps(&ops);
203 param.call->cq()->Pluck(&ops);
207 std::function<Status(ServerContext*, Streamer*)> func_;
208 const bool write_needed_;
211 template <
class ServiceType,
class RequestType,
class ResponseType>
212 class BidiStreamingHandler
213 :
public TemplatedBidiStreamingHandler<
214 ServerReaderWriter<ResponseType, RequestType>, false> {
220 ServiceType* service)
223 func, service, std::placeholders::_1, std::placeholders::_2)) {}
226 template <
class RequestType,
class ResponseType>
229 ServerUnaryStreamer<RequestType, ResponseType>, true> {
239 template <
class RequestType,
class ResponseType>
242 ServerSplitStreamer<RequestType, ResponseType>, false> {
258 if (!context->sent_initial_metadata_) {
259 ops->SendInitialMetadata(context->initial_metadata_,
260 context->initial_metadata_flags());
264 context->sent_initial_metadata_ =
true;
266 ops->ServerSendStatus(context->trailing_metadata_, status);
271 FillOps(param.server_context, &ops);
272 param.call->PerformOps(&ops);
273 param.call->cq()->Pluck(&ops);
279 #endif // GRPCXX_IMPL_CODEGEN_METHOD_HANDLER_IMPL_H
SplitServerStreamingHandler(std::function< Status(ServerContext *, ServerSplitStreamer< RequestType, ResponseType > *)> func)
Definition: method_handler_impl.h:244
grpc_compression_level compression_level() const
Definition: server_context.h:131
void RunHandler(const HandlerParameter ¶m) final
Definition: method_handler_impl.h:99
Definition: rpc_service_method.h:56
Definition: method_handler_impl.h:240
A class to represent a flow-controlled server-side streaming call.
Definition: sync_stream.h:641
#define GPR_CODEGEN_ASSERT(x)
Codegen specific version of GPR_ASSERT.
Definition: core_codegen_interface.h:122
ClientStreamingHandler(std::function< Status(ServiceType *, ServerContext *, ServerReader< RequestType > *, ResponseType *)> func, ServiceType *service)
Definition: method_handler_impl.h:92
A class to represent a flow-controlled unary call.
Definition: sync_stream.h:600
StreamedUnaryHandler(std::function< Status(ServerContext *, ServerUnaryStreamer< RequestType, ResponseType > *)> func)
Definition: method_handler_impl.h:231
ServerStreamingHandler(std::function< Status(ServiceType *, ServerContext *, const RequestType *, ServerWriter< ResponseType > *)> func, ServiceType *service)
Definition: method_handler_impl.h:132
static void FillOps(ServerContext *context, T *ops)
Definition: method_handler_impl.h:256
Definition: method_handler_impl.h:227
Definition: completion_queue.h:68
void RunHandler(const HandlerParameter ¶m) final
Definition: method_handler_impl.h:269
Defines how to serialize and deserialize some type.
Definition: serialization_traits.h:64
Definition: method_handler_impl.h:253
void RunHandler(const HandlerParameter ¶m) final
Definition: method_handler_impl.h:53
Definition: method_handler_impl.h:177
void RunHandler(const HandlerParameter ¶m) final
Definition: method_handler_impl.h:183
RpcMethodHandler(std::function< Status(ServiceType *, ServerContext *, const RequestType *, ResponseType *)> func, ServiceType *service)
Definition: method_handler_impl.h:47
Primary implementaiton of CallOpSetInterface.
Definition: call.h:623
void RunHandler(const HandlerParameter ¶m) final
Definition: method_handler_impl.h:139
Definition: server_context.h:94
Definition: completion_queue.h:70
BidiStreamingHandler(std::function< Status(ServiceType *, ServerContext *, ServerReaderWriter< ResponseType, RequestType > *)> func, ServiceType *service)
Definition: method_handler_impl.h:216
Definition: sync_stream.h:569
bool ok() const
Is the status OK?
Definition: status.h:76
Definition: rpc_service_method.h:59
Did it work? If it didn't, why?
Definition: status.h:45
Operation is not implemented or not supported/enabled in this service.
Definition: status_code_enum.h:130
bool compression_level_set() const
Definition: server_context.h:140
Internal errors.
Definition: status_code_enum.h:134
TemplatedBidiStreamingHandler(std::function< Status(ServerContext *, Streamer *)> func)
Definition: method_handler_impl.h:179