diff --git a/grpc/src/compiler/cpp_generator.cc b/grpc/src/compiler/cpp_generator.cc index e8ad49e70..da58ee006 100644 --- a/grpc/src/compiler/cpp_generator.cc +++ b/grpc/src/compiler/cpp_generator.cc @@ -107,6 +107,7 @@ grpc::string GetHeaderPrologue(grpc_generator::File *file, const Parameters & /* printer->Print(vars, "#define GRPC_$filename_identifier$__INCLUDED\n"); printer->Print(vars, "\n"); printer->Print(vars, "#include \"$filename_base$$message_header_ext$\"\n"); + printer->Print(vars, file->additional_headers().c_str()); printer->Print(vars, "\n"); } return output; @@ -123,7 +124,6 @@ grpc::string GetHeaderIncludes(grpc_generator::File *file, static const char *headers_strs[] = { "grpc++/impl/codegen/async_stream.h", "grpc++/impl/codegen/async_unary_call.h", - "grpc++/impl/codegen/proto_utils.h", "grpc++/impl/codegen/rpc_method.h", "grpc++/impl/codegen/service_type.h", "grpc++/impl/codegen/status.h", @@ -840,8 +840,7 @@ grpc::string GetSourcePrologue(grpc_generator::File *file, const Parameters & /* printer->Print(vars, "// source: $filename$\n\n"); printer->Print(vars, "#include \"$filename_base$$message_header_ext$\"\n"); printer->Print(vars, "#include \"$filename_base$$service_header_ext$\"\n"); - printer->Print(vars, file->additional_headers().c_str()); - printer->Print(vars, "\n"); + printer->Print("\n"); } return output; } @@ -868,6 +867,7 @@ grpc::string GetSourceIncludes(grpc_generator::File *file, PrintIncludes(printer.get(), headers, params); if (!file->package().empty()) { + printer->Print("\n"); std::vector parts = file->package_parts(); for (auto part = parts.begin(); part != parts.end(); part++) { diff --git a/grpc/tests/grpctest.cpp b/grpc/tests/grpctest.cpp index d1b53776b..77b79fcb5 100644 --- a/grpc/tests/grpctest.cpp +++ b/grpc/tests/grpctest.cpp @@ -44,7 +44,7 @@ class ServiceImpl final : public MyGame::Example::MonsterStorage::Service { } virtual ::grpc::Status Retrieve(::grpc::ServerContext *context, const flatbuffers::BufferRef *request, - flatbuffers::BufferRef *response) + ::grpc::ServerWriter< flatbuffers::BufferRef>* writer) override { assert(false); // We're not actually using this RPC. return grpc::Status::CANCELLED; diff --git a/tests/monster_test.fbs b/tests/monster_test.fbs index d1946a39a..050bcea57 100755 --- a/tests/monster_test.fbs +++ b/tests/monster_test.fbs @@ -71,7 +71,7 @@ table Monster { rpc_service MonsterStorage { Store(Monster):Stat (streaming: "none"); - Retrieve(Stat):Monster (idempotent); + Retrieve(Stat):Monster (streaming: "server", idempotent); } root_type Monster; diff --git a/tests/monster_test.grpc.fb.cc b/tests/monster_test.grpc.fb.cc index 71dbd2d4f..95f22fc2f 100644 --- a/tests/monster_test.grpc.fb.cc +++ b/tests/monster_test.grpc.fb.cc @@ -4,8 +4,6 @@ #include "monster_test_generated.h" #include "monster_test.grpc.fb.h" -#include "flatbuffers/grpc.h" - #include #include #include @@ -29,7 +27,7 @@ std::unique_ptr< MonsterStorage::Stub> MonsterStorage::NewStub(const std::shared MonsterStorage::Stub::Stub(const std::shared_ptr< ::grpc::ChannelInterface>& channel) : channel_(channel) , rpcmethod_Store_(MonsterStorage_method_names[0], ::grpc::RpcMethod::NORMAL_RPC, channel) - , rpcmethod_Retrieve_(MonsterStorage_method_names[1], ::grpc::RpcMethod::NORMAL_RPC, channel) + , rpcmethod_Retrieve_(MonsterStorage_method_names[1], ::grpc::RpcMethod::SERVER_STREAMING, channel) {} ::grpc::Status MonsterStorage::Stub::Store(::grpc::ClientContext* context, const flatbuffers::BufferRef& request, flatbuffers::BufferRef* response) { @@ -40,12 +38,12 @@ MonsterStorage::Stub::Stub(const std::shared_ptr< ::grpc::ChannelInterface>& cha return new ::grpc::ClientAsyncResponseReader< flatbuffers::BufferRef>(channel_.get(), cq, rpcmethod_Store_, context, request); } -::grpc::Status MonsterStorage::Stub::Retrieve(::grpc::ClientContext* context, const flatbuffers::BufferRef& request, flatbuffers::BufferRef* response) { - return ::grpc::BlockingUnaryCall(channel_.get(), rpcmethod_Retrieve_, context, request, response); +::grpc::ClientReader< flatbuffers::BufferRef>* MonsterStorage::Stub::RetrieveRaw(::grpc::ClientContext* context, const flatbuffers::BufferRef& request) { + return new ::grpc::ClientReader< flatbuffers::BufferRef>(channel_.get(), rpcmethod_Retrieve_, context, request); } -::grpc::ClientAsyncResponseReader< flatbuffers::BufferRef>* MonsterStorage::Stub::AsyncRetrieveRaw(::grpc::ClientContext* context, const flatbuffers::BufferRef& request, ::grpc::CompletionQueue* cq) { - return new ::grpc::ClientAsyncResponseReader< flatbuffers::BufferRef>(channel_.get(), cq, rpcmethod_Retrieve_, context, request); +::grpc::ClientAsyncReader< flatbuffers::BufferRef>* MonsterStorage::Stub::AsyncRetrieveRaw(::grpc::ClientContext* context, const flatbuffers::BufferRef& request, ::grpc::CompletionQueue* cq, void* tag) { + return new ::grpc::ClientAsyncReader< flatbuffers::BufferRef>(channel_.get(), cq, rpcmethod_Retrieve_, context, request, tag); } MonsterStorage::Service::Service() { @@ -57,8 +55,8 @@ MonsterStorage::Service::Service() { std::mem_fn(&MonsterStorage::Service::Store), this))); AddMethod(new ::grpc::RpcServiceMethod( MonsterStorage_method_names[1], - ::grpc::RpcMethod::NORMAL_RPC, - new ::grpc::RpcMethodHandler< MonsterStorage::Service, flatbuffers::BufferRef, flatbuffers::BufferRef>( + ::grpc::RpcMethod::SERVER_STREAMING, + new ::grpc::ServerStreamingHandler< MonsterStorage::Service, flatbuffers::BufferRef, flatbuffers::BufferRef>( std::mem_fn(&MonsterStorage::Service::Retrieve), this))); } @@ -72,10 +70,10 @@ MonsterStorage::Service::~Service() { return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); } -::grpc::Status MonsterStorage::Service::Retrieve(::grpc::ServerContext* context, const flatbuffers::BufferRef* request, flatbuffers::BufferRef* response) { +::grpc::Status MonsterStorage::Service::Retrieve(::grpc::ServerContext* context, const flatbuffers::BufferRef* request, ::grpc::ServerWriter< flatbuffers::BufferRef>* writer) { (void) context; (void) request; - (void) response; + (void) writer; return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); } diff --git a/tests/monster_test.grpc.fb.h b/tests/monster_test.grpc.fb.h index 4269234f3..0bd3d8925 100644 --- a/tests/monster_test.grpc.fb.h +++ b/tests/monster_test.grpc.fb.h @@ -5,10 +5,11 @@ #define GRPC_monster_5ftest__INCLUDED #include "monster_test_generated.h" +#include "flatbuffers/grpc.h" + #include #include -#include #include #include #include @@ -35,13 +36,16 @@ class MonsterStorage GRPC_FINAL { std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< flatbuffers::BufferRef>> AsyncStore(::grpc::ClientContext* context, const flatbuffers::BufferRef& request, ::grpc::CompletionQueue* cq) { return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< flatbuffers::BufferRef>>(AsyncStoreRaw(context, request, cq)); } - virtual ::grpc::Status Retrieve(::grpc::ClientContext* context, const flatbuffers::BufferRef& request, flatbuffers::BufferRef* response) = 0; - std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< flatbuffers::BufferRef>> AsyncRetrieve(::grpc::ClientContext* context, const flatbuffers::BufferRef& request, ::grpc::CompletionQueue* cq) { - return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< flatbuffers::BufferRef>>(AsyncRetrieveRaw(context, request, cq)); + std::unique_ptr< ::grpc::ClientReaderInterface< flatbuffers::BufferRef>> Retrieve(::grpc::ClientContext* context, const flatbuffers::BufferRef& request) { + return std::unique_ptr< ::grpc::ClientReaderInterface< flatbuffers::BufferRef>>(RetrieveRaw(context, request)); + } + std::unique_ptr< ::grpc::ClientAsyncReaderInterface< flatbuffers::BufferRef>> AsyncRetrieve(::grpc::ClientContext* context, const flatbuffers::BufferRef& request, ::grpc::CompletionQueue* cq, void* tag) { + return std::unique_ptr< ::grpc::ClientAsyncReaderInterface< flatbuffers::BufferRef>>(AsyncRetrieveRaw(context, request, cq, tag)); } private: virtual ::grpc::ClientAsyncResponseReaderInterface< flatbuffers::BufferRef>* AsyncStoreRaw(::grpc::ClientContext* context, const flatbuffers::BufferRef& request, ::grpc::CompletionQueue* cq) = 0; - virtual ::grpc::ClientAsyncResponseReaderInterface< flatbuffers::BufferRef>* AsyncRetrieveRaw(::grpc::ClientContext* context, const flatbuffers::BufferRef& request, ::grpc::CompletionQueue* cq) = 0; + virtual ::grpc::ClientReaderInterface< flatbuffers::BufferRef>* RetrieveRaw(::grpc::ClientContext* context, const flatbuffers::BufferRef& request) = 0; + virtual ::grpc::ClientAsyncReaderInterface< flatbuffers::BufferRef>* AsyncRetrieveRaw(::grpc::ClientContext* context, const flatbuffers::BufferRef& request, ::grpc::CompletionQueue* cq, void* tag) = 0; }; class Stub GRPC_FINAL : public StubInterface { public: @@ -50,15 +54,18 @@ class MonsterStorage GRPC_FINAL { std::unique_ptr< ::grpc::ClientAsyncResponseReader< flatbuffers::BufferRef>> AsyncStore(::grpc::ClientContext* context, const flatbuffers::BufferRef& request, ::grpc::CompletionQueue* cq) { return std::unique_ptr< ::grpc::ClientAsyncResponseReader< flatbuffers::BufferRef>>(AsyncStoreRaw(context, request, cq)); } - ::grpc::Status Retrieve(::grpc::ClientContext* context, const flatbuffers::BufferRef& request, flatbuffers::BufferRef* response) GRPC_OVERRIDE; - std::unique_ptr< ::grpc::ClientAsyncResponseReader< flatbuffers::BufferRef>> AsyncRetrieve(::grpc::ClientContext* context, const flatbuffers::BufferRef& request, ::grpc::CompletionQueue* cq) { - return std::unique_ptr< ::grpc::ClientAsyncResponseReader< flatbuffers::BufferRef>>(AsyncRetrieveRaw(context, request, cq)); + std::unique_ptr< ::grpc::ClientReader< flatbuffers::BufferRef>> Retrieve(::grpc::ClientContext* context, const flatbuffers::BufferRef& request) { + return std::unique_ptr< ::grpc::ClientReader< flatbuffers::BufferRef>>(RetrieveRaw(context, request)); + } + std::unique_ptr< ::grpc::ClientAsyncReader< flatbuffers::BufferRef>> AsyncRetrieve(::grpc::ClientContext* context, const flatbuffers::BufferRef& request, ::grpc::CompletionQueue* cq, void* tag) { + return std::unique_ptr< ::grpc::ClientAsyncReader< flatbuffers::BufferRef>>(AsyncRetrieveRaw(context, request, cq, tag)); } private: std::shared_ptr< ::grpc::ChannelInterface> channel_; ::grpc::ClientAsyncResponseReader< flatbuffers::BufferRef>* AsyncStoreRaw(::grpc::ClientContext* context, const flatbuffers::BufferRef& request, ::grpc::CompletionQueue* cq) GRPC_OVERRIDE; - ::grpc::ClientAsyncResponseReader< flatbuffers::BufferRef>* AsyncRetrieveRaw(::grpc::ClientContext* context, const flatbuffers::BufferRef& request, ::grpc::CompletionQueue* cq) GRPC_OVERRIDE; + ::grpc::ClientReader< flatbuffers::BufferRef>* RetrieveRaw(::grpc::ClientContext* context, const flatbuffers::BufferRef& request) GRPC_OVERRIDE; + ::grpc::ClientAsyncReader< flatbuffers::BufferRef>* AsyncRetrieveRaw(::grpc::ClientContext* context, const flatbuffers::BufferRef& request, ::grpc::CompletionQueue* cq, void* tag) GRPC_OVERRIDE; const ::grpc::RpcMethod rpcmethod_Store_; const ::grpc::RpcMethod rpcmethod_Retrieve_; }; @@ -69,7 +76,7 @@ class MonsterStorage GRPC_FINAL { Service(); virtual ~Service(); virtual ::grpc::Status Store(::grpc::ServerContext* context, const flatbuffers::BufferRef* request, flatbuffers::BufferRef* response); - virtual ::grpc::Status Retrieve(::grpc::ServerContext* context, const flatbuffers::BufferRef* request, flatbuffers::BufferRef* response); + virtual ::grpc::Status Retrieve(::grpc::ServerContext* context, const flatbuffers::BufferRef* request, ::grpc::ServerWriter< flatbuffers::BufferRef>* writer); }; template class WithAsyncMethod_Store : public BaseClass { @@ -103,12 +110,12 @@ class MonsterStorage GRPC_FINAL { BaseClassMustBeDerivedFromService(this); } // disable synchronous version of this method - ::grpc::Status Retrieve(::grpc::ServerContext* context, const flatbuffers::BufferRef* request, flatbuffers::BufferRef* response) GRPC_FINAL GRPC_OVERRIDE { + ::grpc::Status Retrieve(::grpc::ServerContext* context, const flatbuffers::BufferRef* request, ::grpc::ServerWriter< flatbuffers::BufferRef>* writer) GRPC_FINAL GRPC_OVERRIDE { abort(); return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); } - void RequestRetrieve(::grpc::ServerContext* context, flatbuffers::BufferRef* request, ::grpc::ServerAsyncResponseWriter< flatbuffers::BufferRef>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) { - ::grpc::Service::RequestAsyncUnary(1, context, request, response, new_call_cq, notification_cq, tag); + void RequestRetrieve(::grpc::ServerContext* context, flatbuffers::BufferRef* request, ::grpc::ServerAsyncWriter< flatbuffers::BufferRef>* writer, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) { + ::grpc::Service::RequestAsyncServerStreaming(1, context, request, writer, new_call_cq, notification_cq, tag); } }; typedef WithAsyncMethod_Store< WithAsyncMethod_Retrieve< Service > > AsyncService; @@ -141,7 +148,7 @@ class MonsterStorage GRPC_FINAL { BaseClassMustBeDerivedFromService(this); } // disable synchronous version of this method - ::grpc::Status Retrieve(::grpc::ServerContext* context, const flatbuffers::BufferRef* request, flatbuffers::BufferRef* response) GRPC_FINAL GRPC_OVERRIDE { + ::grpc::Status Retrieve(::grpc::ServerContext* context, const flatbuffers::BufferRef* request, ::grpc::ServerWriter< flatbuffers::BufferRef>* writer) GRPC_FINAL GRPC_OVERRIDE { abort(); return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); }