34 #ifndef GRPCXX_IMPL_RPC_SERVICE_METHOD_H
35 #define GRPCXX_IMPL_RPC_SERVICE_METHOD_H
49 class StreamContextInterface;
74 template <
class ServiceType,
class RequestType,
class ResponseType>
81 : func_(func), service_(service) {}
86 param.request, &req, param.max_message_size);
89 status = func_(service_, param.server_context, &req, &rsp);
92 GPR_ASSERT(!param.server_context->sent_initial_metadata_);
95 ops.SendInitialMetadata(param.server_context->initial_metadata_);
97 status = ops.SendMessage(rsp);
99 ops.ServerSendStatus(param.server_context->trailing_metadata_, status);
100 param.call->PerformOps(&ops);
101 param.call->cq()->Pluck(&ops);
107 ResponseType*)> func_;
109 ServiceType* service_;
113 template <
class ServiceType,
class RequestType,
class ResponseType>
114 class ClientStreamingHandler :
public MethodHandler {
119 ServiceType* service)
120 : func_(func), service_(service) {}
125 Status status = func_(service_, param.server_context, &reader, &rsp);
127 GPR_ASSERT(!param.server_context->sent_initial_metadata_);
130 ops.SendInitialMetadata(param.server_context->initial_metadata_);
132 status = ops.SendMessage(rsp);
134 ops.ServerSendStatus(param.server_context->trailing_metadata_, status);
135 param.call->PerformOps(&ops);
136 param.call->cq()->Pluck(&ops);
140 std::function<Status(ServiceType*, ServerContext*, ServerReader<RequestType>*,
141 ResponseType*)> func_;
142 ServiceType* service_;
146 template <
class ServiceType,
class RequestType,
class ResponseType>
147 class ServerStreamingHandler :
public MethodHandler {
152 ServiceType* service)
153 : func_(func), service_(service) {}
158 param.request, &req, param.max_message_size);
162 status = func_(service_, param.server_context, &req, &writer);
166 if (!param.server_context->sent_initial_metadata_) {
167 ops.SendInitialMetadata(param.server_context->initial_metadata_);
169 ops.ServerSendStatus(param.server_context->trailing_metadata_, status);
170 param.call->PerformOps(&ops);
171 param.call->cq()->Pluck(&ops);
177 ServiceType* service_;
181 template <
class ServiceType,
class RequestType,
class ResponseType>
182 class BidiStreamingHandler :
public MethodHandler {
188 ServiceType* service)
189 : func_(func), service_(service) {}
193 param.server_context);
194 Status status = func_(service_, param.server_context, &stream);
197 if (!param.server_context->sent_initial_metadata_) {
198 ops.SendInitialMetadata(param.server_context->initial_metadata_);
200 ops.ServerSendStatus(param.server_context->trailing_metadata_, status);
201 param.call->PerformOps(&ops);
202 param.call->cq()->Pluck(&ops);
208 ServiceType* service_;
217 if (!context->sent_initial_metadata_) {
218 ops->SendInitialMetadata(context->initial_metadata_);
219 context->sent_initial_metadata_ =
true;
221 ops->ServerSendStatus(context->trailing_metadata_, status);
226 FillOps(param.server_context, &ops);
227 param.call->PerformOps(&ops);
228 param.call->cq()->Pluck(&ops);
238 :
RpcMethod(name, type), handler_(handler) {}
243 std::unique_ptr<MethodHandler> handler_;
257 std::vector<std::unique_ptr<RpcServiceMethod>> methods_;
262 #endif // GRPCXX_IMPL_RPC_SERVICE_METHOD_H
Definition: rpc_service_method.h:54
void AddMethod(RpcServiceMethod *method)
Definition: rpc_service_method.h:251
RpcServiceMethod * GetMethod(int i)
Definition: rpc_service_method.h:253
ClientStreamingHandler(std::function< Status(ServiceType *, ServerContext *, ServerReader< RequestType > *, ResponseType *)> func, ServiceType *service)
Definition: rpc_service_method.h:116
void RunHandler(const HandlerParameter ¶m)
Definition: rpc_service_method.h:224
ServerStreamingHandler(std::function< Status(ServiceType *, ServerContext *, const RequestType *, ServerWriter< ResponseType > *)> func, ServiceType *service)
Definition: rpc_service_method.h:149
int max_message_size
Definition: rpc_service_method.h:68
static void FillOps(ServerContext *context, T *ops)
Definition: rpc_service_method.h:215
ServerContext * server_context
Definition: rpc_service_method.h:65
RpcType
Definition: rpc_method.h:45
Call * call
Definition: rpc_service_method.h:64
void RunHandler(const HandlerParameter ¶m)
Definition: rpc_service_method.h:155
#define GRPC_FINAL
Definition: config.h:71
void RunHandler(const HandlerParameter ¶m)
Definition: rpc_service_method.h:122
Definition: completion_queue.h:55
Definition: rpc_service_method.h:233
Defines how to serialize and deserialize some type.
Definition: serialization_traits.h:64
Definition: rpc_service_method.h:212
Definition: rpc_service_method.h:248
virtual void RunHandler(const HandlerParameter ¶m)=0
void RunHandler(const HandlerParameter ¶m)
Definition: rpc_service_method.h:191
Definition: completion_queue.h:61
RpcMethodHandler(std::function< Status(ServiceType *, ServerContext *, const RequestType *, ResponseType *)> func, ServiceType *service)
Definition: rpc_service_method.h:77
virtual ~MethodHandler()
Definition: rpc_service_method.h:56
Primary implementaiton of CallOpSetInterface.
Definition: call.h:502
Definition: server_context.h:89
void RunHandler(const HandlerParameter ¶m)
Definition: rpc_service_method.h:83
Definition: completion_queue.h:57
Definition: rpc_method.h:43
BidiStreamingHandler(std::function< Status(ServiceType *, ServerContext *, ServerReaderWriter< ResponseType, RequestType > *)> func, ServiceType *service)
Definition: rpc_service_method.h:184
Server-side interface for bi-directional streaming.
Definition: completion_queue.h:59
bool ok() const
Is the status OK?
Definition: status.h:67
Definition: rpc_service_method.h:57
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
HandlerParameter(Call *c, ServerContext *context, grpc_byte_buffer *req, int max_size)
Definition: rpc_service_method.h:58
const char * name() const
Definition: rpc_method.h:61
MethodHandler * handler()
Definition: rpc_service_method.h:240
int GetMethodCount() const
Definition: rpc_service_method.h:254
grpc_byte_buffer * request
Definition: rpc_service_method.h:67
RpcServiceMethod(const char *name, RpcMethod::RpcType type, MethodHandler *handler)
Definition: rpc_service_method.h:236