Skip to content

Commit 37c3981

Browse files
committed
grpc/cpp: align CallbackService codegen with gRPC callback API; add client compile test
Signed-off-by: shankeleven <[email protected]>
1 parent 7aa060d commit 37c3981

File tree

4 files changed

+87
-77
lines changed

4 files changed

+87
-77
lines changed

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,7 @@ set(FlatBuffers_GRPCTest_SRCS
279279
grpc/tests/grpctest.cpp
280280
grpc/tests/message_builder_test.cpp
281281
grpc/tests/grpctest_callback_compile.cpp
282+
grpc/tests/grpctest_callback_client_compile.cpp
282283
)
283284

284285
# TODO(dbaileychess): Figure out how this would now work. I posted a question on

grpc/src/compiler/cpp_generator.cc

Lines changed: 58 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1117,10 +1117,10 @@ static void PrintHeaderService(grpc_generator::Printer *printer,
11171117
if ((*vars)["generate_callback_api"] == "1") {
11181118
(*vars)["Service"] = service->name();
11191119
printer->Print("\n#if defined(GRPC_CALLBACK_API_NONEXPERIMENTAL)\n");
1120-
printer->Print(*vars,
1121-
"class $Service$::CallbackService : public ::grpc::Service "
1122-
"{\n public:\n CallbackService();\n virtual "
1123-
"~$Service$::CallbackService();\n");
1120+
printer->Print(*vars,
1121+
"class $Service$::CallbackService : public ::grpc::Service "
1122+
"{\n public:\n CallbackService();\n virtual "
1123+
"~CallbackService();\n");
11241124
printer->Indent();
11251125
for (int i = 0; i < service->method_count(); ++i) {
11261126
auto m = service->method(i);
@@ -1312,20 +1312,20 @@ static void PrintSourceClientMethod(
13121312
"void $ns$$Service$::Stub::async_$Method$(::grpc::ClientContext* "
13131313
"context, const $Request$& request, $Response$* response, "
13141314
"std::function<void(::grpc::Status)> on_done) {\n");
1315-
printer->Print(*vars,
1316-
" ::grpc::internal::CallbackUnaryCall(channel_.get(), "
1317-
"rpcmethod_$Method$_, context, request, response, "
1318-
"std::move(on_done));\n}\n\n");
1315+
printer->Print(*vars,
1316+
" ::grpc::internal::CallbackUnaryCall(channel_.get(), "
1317+
"rpcmethod_$Method$_, context, &request, response, "
1318+
"std::move(on_done));\n}\n\n");
13191319
printer->Print(
13201320
*vars,
13211321
"void $ns$$Service$::Stub::async_$Method$(::grpc::ClientContext* "
13221322
"context, const $Request$& request, $Response$* response, "
13231323
"::grpc::ClientUnaryReactor* reactor) {\n");
1324-
printer->Print(
1325-
*vars,
1326-
" "
1327-
"::grpc::internal::ClientCallbackUnaryFactory::Create(channel_.get(),"
1328-
" rpcmethod_$Method$_, context, request, response, reactor);\n}\n\n");
1324+
printer->Print(
1325+
*vars,
1326+
" "
1327+
"::grpc::internal::ClientCallbackUnaryFactory::Create(channel_.get(),"
1328+
" rpcmethod_$Method$_, context, &request, response, reactor);\n}\n\n");
13291329
}
13301330
for (size_t i = 0; i < sizeof(async_prefixes) / sizeof(async_prefixes[0]);
13311331
i++) {
@@ -1409,10 +1409,10 @@ static void PrintSourceClientMethod(
14091409
"void $ns$$Service$::Stub::async_$Method$(::grpc::ClientContext* "
14101410
"context, const $Request$& request, ::grpc::ClientReadReactor< "
14111411
"$Response$ >* reactor) {\n");
1412-
printer->Print(*vars,
1413-
" ::grpc::internal::ClientCallbackReaderFactory< "
1414-
"$Response$ >::Create(channel_.get(), "
1415-
"rpcmethod_$Method$_, context, request, reactor);\n}\n\n");
1412+
printer->Print(*vars,
1413+
" ::grpc::internal::ClientCallbackReaderFactory< "
1414+
"$Response$ >::Create(channel_.get(), "
1415+
"rpcmethod_$Method$_, context, &request, reactor);\n}\n\n");
14161416
}
14171417
for (size_t i = 0; i < sizeof(async_prefixes) / sizeof(async_prefixes[0]);
14181418
i++) {
@@ -1660,46 +1660,47 @@ static void PrintSourceService(grpc_generator::Printer *printer,
16601660
(*vars)["Method"] = method->name();
16611661
(*vars)["Request"] = method->input_type_name();
16621662
(*vars)["Response"] = method->output_type_name();
1663-
if (method->NoStreaming()) {
1664-
printer->Print(
1665-
*vars,
1666-
"AddMethod(new ::grpc::internal::CallbackUnaryHandler< "
1667-
"$ns$$Service$::CallbackService, $Request$, $Response$>(\n"
1668-
" $prefix$$Service$_method_names[$Idx$],\n"
1669-
" [this](::grpc::CallbackServerContext* ctx, const $Request$* "
1670-
"req, $Response$* resp) {\n"
1671-
" return this->$Method$(ctx, req, resp);\n"
1672-
" }));\n");
1673-
} else if (ClientOnlyStreaming(method.get())) {
1674-
printer->Print(
1675-
*vars,
1676-
"AddMethod(new ::grpc::internal::CallbackClientStreamingHandler< "
1677-
"$ns$$Service$::CallbackService, $Request$, $Response$>(\n"
1678-
" $prefix$$Service$_method_names[$Idx$],\n"
1679-
" [this](::grpc::CallbackServerContext* ctx, $Response$* resp) "
1680-
"{\n"
1681-
" return this->$Method$(ctx, resp);\n"
1682-
" }));\n");
1683-
} else if (ServerOnlyStreaming(method.get())) {
1684-
printer->Print(
1685-
*vars,
1686-
"AddMethod(new ::grpc::internal::CallbackServerStreamingHandler< "
1687-
"$ns$$Service$::CallbackService, $Request$, $Response$>(\n"
1688-
" $prefix$$Service$_method_names[$Idx$],\n"
1689-
" [this](::grpc::CallbackServerContext* ctx, const $Request$* "
1690-
"req) {\n"
1691-
" return this->$Method$(ctx, req);\n"
1692-
" }));\n");
1693-
} else if (method->BidiStreaming()) {
1694-
printer->Print(
1695-
*vars,
1696-
"AddMethod(new ::grpc::internal::CallbackBidiHandler< "
1697-
"$ns$$Service$::CallbackService, $Request$, $Response$>(\n"
1698-
" $prefix$$Service$_method_names[$Idx$],\n"
1699-
" [this](::grpc::CallbackServerContext* ctx) {\n"
1700-
" return this->$Method$(ctx);\n"
1701-
" }));\n");
1702-
}
1663+
if (method->NoStreaming()) {
1664+
printer->Print(
1665+
*vars,
1666+
"AddMethod(new ::grpc::internal::RpcServiceMethod(\n"
1667+
" $prefix$$Service$_method_names[$Idx$],\n"
1668+
" ::grpc::internal::RpcMethod::NORMAL_RPC,\n"
1669+
" new ::grpc::internal::CallbackUnaryHandler<$Request$, $Response$>(\n"
1670+
" [this](::grpc::CallbackServerContext* ctx, const $Request$* req, $Response$* resp) {\n"
1671+
" return this->$Method$(ctx, req, resp);\n"
1672+
" })));\n");
1673+
} else if (ClientOnlyStreaming(method.get())) {
1674+
printer->Print(
1675+
*vars,
1676+
"AddMethod(new ::grpc::internal::RpcServiceMethod(\n"
1677+
" $prefix$$Service$_method_names[$Idx$],\n"
1678+
" ::grpc::internal::RpcMethod::CLIENT_STREAMING,\n"
1679+
" new ::grpc::internal::CallbackClientStreamingHandler<$Request$, $Response$>(\n"
1680+
" [this](::grpc::CallbackServerContext* ctx, $Response$* resp) {\n"
1681+
" return this->$Method$(ctx, resp);\n"
1682+
" })));\n");
1683+
} else if (ServerOnlyStreaming(method.get())) {
1684+
printer->Print(
1685+
*vars,
1686+
"AddMethod(new ::grpc::internal::RpcServiceMethod(\n"
1687+
" $prefix$$Service$_method_names[$Idx$],\n"
1688+
" ::grpc::internal::RpcMethod::SERVER_STREAMING,\n"
1689+
" new ::grpc::internal::CallbackServerStreamingHandler<$Request$, $Response$>(\n"
1690+
" [this](::grpc::CallbackServerContext* ctx, const $Request$* req) {\n"
1691+
" return this->$Method$(ctx, req);\n"
1692+
" })));\n");
1693+
} else if (method->BidiStreaming()) {
1694+
printer->Print(
1695+
*vars,
1696+
"AddMethod(new ::grpc::internal::RpcServiceMethod(\n"
1697+
" $prefix$$Service$_method_names[$Idx$],\n"
1698+
" ::grpc::internal::RpcMethod::BIDI_STREAMING,\n"
1699+
" new ::grpc::internal::CallbackBidiHandler<$Request$, $Response$>(\n"
1700+
" [this](::grpc::CallbackServerContext* ctx) {\n"
1701+
" return this->$Method$(ctx);\n"
1702+
" })));\n");
1703+
}
17031704
}
17041705
printer->Outdent();
17051706
printer->Print("}\n\n");

tests/monster_test.grpc.fb.cc

Lines changed: 27 additions & 19 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/monster_test.grpc.fb.h

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)