|
1 | 1 | #pragma once |
2 | 2 |
|
| 3 | +#include <grpcpp/support/async_stream.h> |
| 4 | +#include <grpcpp/support/async_unary_call.h> |
| 5 | + |
3 | 6 | #include <userver/ugrpc/impl/async_service.hpp> |
4 | | -#include <userver/ugrpc/server/impl/call_traits.hpp> |
5 | 7 |
|
6 | 8 | USERVER_NAMESPACE_BEGIN |
7 | 9 |
|
8 | 10 | namespace ugrpc::server::impl { |
9 | 11 |
|
10 | | -template <typename CallTraits, typename Service> |
| 12 | +template <typename GrpcppService, typename Request, typename Response> |
11 | 13 | void RequestAsyncCall( |
12 | | - ugrpc::impl::AsyncService<Service>& async_service, |
| 14 | + ugrpc::impl::AsyncService<GrpcppService>& async_service, |
13 | 15 | int method_id, |
14 | | - grpc::ServerContext& server_context, |
15 | | - typename CallTraits::InitialRequest& initial_request, |
16 | | - typename CallTraits::RawResponder& stream, |
17 | | - grpc::CompletionQueue& call_cq, |
18 | | - grpc::ServerCompletionQueue& notification_cq, |
| 16 | + grpc::ServerContext* server_context, |
| 17 | + Request* request, |
| 18 | + grpc::ServerAsyncResponseWriter<Response>* stream, |
| 19 | + grpc::CompletionQueue* call_cq, |
| 20 | + grpc::ServerCompletionQueue* notification_cq, |
19 | 21 | void* tag |
20 | 22 | ) { |
21 | | - if constexpr (CallTraits::kRpcType == RpcType::kUnary) { |
22 | | - async_service |
23 | | - .RequestAsyncUnary(method_id, &server_context, &initial_request, &stream, &call_cq, ¬ification_cq, tag); |
24 | | - } else if constexpr (CallTraits::kRpcType == RpcType::kClientStreaming) { |
25 | | - async_service.RequestAsyncClientStreaming(method_id, &server_context, &stream, &call_cq, ¬ification_cq, tag); |
26 | | - } else if constexpr (CallTraits::kRpcType == RpcType::kServerStreaming) { |
27 | | - async_service.RequestAsyncServerStreaming( |
28 | | - method_id, |
29 | | - &server_context, |
30 | | - &initial_request, |
31 | | - &stream, |
32 | | - &call_cq, |
33 | | - ¬ification_cq, |
34 | | - tag |
35 | | - ); |
36 | | - } else if constexpr (CallTraits::kRpcType == RpcType::kBidiStreaming) { |
37 | | - async_service.RequestAsyncBidiStreaming(method_id, &server_context, &stream, &call_cq, ¬ification_cq, tag); |
38 | | - } else { |
39 | | - static_assert(!sizeof(CallTraits), "Invalid kCallCategory"); |
40 | | - } |
| 23 | + async_service.RequestAsyncUnary(method_id, server_context, request, stream, call_cq, notification_cq, tag); |
41 | 24 | } |
42 | 25 |
|
43 | | -template <typename CallTraits> |
| 26 | +template <typename GrpcppService, typename Request, typename Response> |
44 | 27 | void RequestAsyncCall( |
45 | | - ugrpc::impl::AsyncGenericService& async_generic_service, |
46 | | - int /*method_id*/, |
47 | | - grpc::GenericServerContext& server_context, |
48 | | - NoInitialRequest& /*initial_request*/, |
49 | | - grpc::GenericServerAsyncReaderWriter& stream, |
50 | | - grpc::CompletionQueue& call_cq, |
51 | | - grpc::ServerCompletionQueue& notification_cq, |
| 28 | + ugrpc::impl::AsyncService<GrpcppService>& async_service, |
| 29 | + int method_id, |
| 30 | + grpc::ServerContext* server_context, |
| 31 | + grpc::ServerAsyncReader<Response, Request>* stream, |
| 32 | + grpc::CompletionQueue* call_cq, |
| 33 | + grpc::ServerCompletionQueue* notification_cq, |
| 34 | + void* tag |
| 35 | +) { |
| 36 | + async_service.RequestAsyncClientStreaming(method_id, server_context, stream, call_cq, notification_cq, tag); |
| 37 | +} |
| 38 | + |
| 39 | +template <typename GrpcppService, typename Request, typename Response> |
| 40 | +void RequestAsyncCall( |
| 41 | + ugrpc::impl::AsyncService<GrpcppService>& async_service, |
| 42 | + int method_id, |
| 43 | + grpc::ServerContext* server_context, |
| 44 | + Request* request, |
| 45 | + grpc::ServerAsyncWriter<Response>* stream, |
| 46 | + grpc::CompletionQueue* call_cq, |
| 47 | + grpc::ServerCompletionQueue* notification_cq, |
52 | 48 | void* tag |
53 | 49 | ) { |
54 | | - async_generic_service.GetAsyncGenericService() |
55 | | - .RequestCall(&server_context, &stream, &call_cq, ¬ification_cq, tag); |
| 50 | + async_service |
| 51 | + .RequestAsyncServerStreaming(method_id, server_context, request, stream, call_cq, notification_cq, tag); |
56 | 52 | } |
57 | 53 |
|
| 54 | +template <typename GrpcppService, typename Request, typename Response> |
| 55 | +void RequestAsyncCall( |
| 56 | + ugrpc::impl::AsyncService<GrpcppService>& async_service, |
| 57 | + int method_id, |
| 58 | + grpc::ServerContext* server_context, |
| 59 | + grpc::ServerAsyncReaderWriter<Response, Request>* stream, |
| 60 | + grpc::CompletionQueue* call_cq, |
| 61 | + grpc::ServerCompletionQueue* notification_cq, |
| 62 | + void* tag |
| 63 | +) { |
| 64 | + async_service.RequestAsyncBidiStreaming(method_id, server_context, stream, call_cq, notification_cq, tag); |
| 65 | +} |
| 66 | + |
| 67 | +void RequestAsyncCall( |
| 68 | + ugrpc::impl::AsyncGenericService& async_generic_service, |
| 69 | + grpc::GenericServerContext* server_context, |
| 70 | + grpc::GenericServerAsyncReaderWriter* stream, |
| 71 | + grpc::CompletionQueue* call_cq, |
| 72 | + grpc::ServerCompletionQueue* notification_cq, |
| 73 | + void* tag |
| 74 | +); |
| 75 | + |
58 | 76 | } // namespace ugrpc::server::impl |
59 | 77 |
|
60 | 78 | USERVER_NAMESPACE_END |
0 commit comments