DONE!!1one
This commit is contained in:
parent
e1300deb87
commit
6bd7b97dc6
21
BUILD
21
BUILD
|
|
@ -849,15 +849,21 @@ cc_library(
|
|||
"include/grpc++/support/sync_stream.h",
|
||||
"include/grpc++/support/time.h",
|
||||
"include/grpc++/impl/codegen/async_stream.h",
|
||||
"include/grpc++/impl/codegen/async_unary_call.h",
|
||||
"include/grpc++/impl/codegen/call.h",
|
||||
"include/grpc++/impl/codegen/call_hook.h",
|
||||
"include/grpc++/impl/codegen/channel_interface.h",
|
||||
"include/grpc++/impl/codegen/client_context.h",
|
||||
"include/grpc++/impl/codegen/client_unary_call.h",
|
||||
"include/grpc++/impl/codegen/completion_queue.h",
|
||||
"include/grpc++/impl/codegen/completion_queue_tag.h",
|
||||
"include/grpc++/impl/codegen/config.h",
|
||||
"include/grpc++/impl/codegen/config_protobuf.h",
|
||||
"include/grpc++/impl/codegen/grpc_library.h",
|
||||
"include/grpc++/impl/codegen/method_handler_impl.h",
|
||||
"include/grpc++/impl/codegen/proto_utils.h",
|
||||
"include/grpc++/impl/codegen/rpc_method.h",
|
||||
"include/grpc++/impl/codegen/rpc_service_method.h",
|
||||
"include/grpc++/impl/codegen/security/auth_context.h",
|
||||
"include/grpc++/impl/codegen/serialization_traits.h",
|
||||
"include/grpc++/impl/codegen/server_context.h",
|
||||
|
|
@ -870,6 +876,7 @@ cc_library(
|
|||
"include/grpc++/impl/codegen/sync.h",
|
||||
"include/grpc++/impl/codegen/sync_cxx11.h",
|
||||
"include/grpc++/impl/codegen/sync_no_cxx11.h",
|
||||
"include/grpc++/impl/codegen/sync_stream.h",
|
||||
"include/grpc++/impl/codegen/time.h",
|
||||
],
|
||||
includes = [
|
||||
|
|
@ -968,15 +975,21 @@ cc_library(
|
|||
"include/grpc++/support/sync_stream.h",
|
||||
"include/grpc++/support/time.h",
|
||||
"include/grpc++/impl/codegen/async_stream.h",
|
||||
"include/grpc++/impl/codegen/async_unary_call.h",
|
||||
"include/grpc++/impl/codegen/call.h",
|
||||
"include/grpc++/impl/codegen/call_hook.h",
|
||||
"include/grpc++/impl/codegen/channel_interface.h",
|
||||
"include/grpc++/impl/codegen/client_context.h",
|
||||
"include/grpc++/impl/codegen/client_unary_call.h",
|
||||
"include/grpc++/impl/codegen/completion_queue.h",
|
||||
"include/grpc++/impl/codegen/completion_queue_tag.h",
|
||||
"include/grpc++/impl/codegen/config.h",
|
||||
"include/grpc++/impl/codegen/config_protobuf.h",
|
||||
"include/grpc++/impl/codegen/grpc_library.h",
|
||||
"include/grpc++/impl/codegen/method_handler_impl.h",
|
||||
"include/grpc++/impl/codegen/proto_utils.h",
|
||||
"include/grpc++/impl/codegen/rpc_method.h",
|
||||
"include/grpc++/impl/codegen/rpc_service_method.h",
|
||||
"include/grpc++/impl/codegen/security/auth_context.h",
|
||||
"include/grpc++/impl/codegen/serialization_traits.h",
|
||||
"include/grpc++/impl/codegen/server_context.h",
|
||||
|
|
@ -989,6 +1002,7 @@ cc_library(
|
|||
"include/grpc++/impl/codegen/sync.h",
|
||||
"include/grpc++/impl/codegen/sync_cxx11.h",
|
||||
"include/grpc++/impl/codegen/sync_no_cxx11.h",
|
||||
"include/grpc++/impl/codegen/sync_stream.h",
|
||||
"include/grpc++/impl/codegen/time.h",
|
||||
],
|
||||
includes = [
|
||||
|
|
@ -1030,15 +1044,21 @@ cc_library(
|
|||
],
|
||||
hdrs = [
|
||||
"include/grpc++/impl/codegen/async_stream.h",
|
||||
"include/grpc++/impl/codegen/async_unary_call.h",
|
||||
"include/grpc++/impl/codegen/call.h",
|
||||
"include/grpc++/impl/codegen/call_hook.h",
|
||||
"include/grpc++/impl/codegen/channel_interface.h",
|
||||
"include/grpc++/impl/codegen/client_context.h",
|
||||
"include/grpc++/impl/codegen/client_unary_call.h",
|
||||
"include/grpc++/impl/codegen/completion_queue.h",
|
||||
"include/grpc++/impl/codegen/completion_queue_tag.h",
|
||||
"include/grpc++/impl/codegen/config.h",
|
||||
"include/grpc++/impl/codegen/config_protobuf.h",
|
||||
"include/grpc++/impl/codegen/grpc_library.h",
|
||||
"include/grpc++/impl/codegen/method_handler_impl.h",
|
||||
"include/grpc++/impl/codegen/proto_utils.h",
|
||||
"include/grpc++/impl/codegen/rpc_method.h",
|
||||
"include/grpc++/impl/codegen/rpc_service_method.h",
|
||||
"include/grpc++/impl/codegen/security/auth_context.h",
|
||||
"include/grpc++/impl/codegen/serialization_traits.h",
|
||||
"include/grpc++/impl/codegen/server_context.h",
|
||||
|
|
@ -1051,6 +1071,7 @@ cc_library(
|
|||
"include/grpc++/impl/codegen/sync.h",
|
||||
"include/grpc++/impl/codegen/sync_cxx11.h",
|
||||
"include/grpc++/impl/codegen/sync_no_cxx11.h",
|
||||
"include/grpc++/impl/codegen/sync_stream.h",
|
||||
"include/grpc++/impl/codegen/time.h",
|
||||
"include/grpc/impl/codegen/alloc.h",
|
||||
"include/grpc/impl/codegen/atm.h",
|
||||
|
|
|
|||
21
Makefile
21
Makefile
|
|
@ -3074,15 +3074,21 @@ PUBLIC_HEADERS_CXX += \
|
|||
include/grpc++/support/sync_stream.h \
|
||||
include/grpc++/support/time.h \
|
||||
include/grpc++/impl/codegen/async_stream.h \
|
||||
include/grpc++/impl/codegen/async_unary_call.h \
|
||||
include/grpc++/impl/codegen/call.h \
|
||||
include/grpc++/impl/codegen/call_hook.h \
|
||||
include/grpc++/impl/codegen/channel_interface.h \
|
||||
include/grpc++/impl/codegen/client_context.h \
|
||||
include/grpc++/impl/codegen/client_unary_call.h \
|
||||
include/grpc++/impl/codegen/completion_queue.h \
|
||||
include/grpc++/impl/codegen/completion_queue_tag.h \
|
||||
include/grpc++/impl/codegen/config.h \
|
||||
include/grpc++/impl/codegen/config_protobuf.h \
|
||||
include/grpc++/impl/codegen/grpc_library.h \
|
||||
include/grpc++/impl/codegen/method_handler_impl.h \
|
||||
include/grpc++/impl/codegen/proto_utils.h \
|
||||
include/grpc++/impl/codegen/rpc_method.h \
|
||||
include/grpc++/impl/codegen/rpc_service_method.h \
|
||||
include/grpc++/impl/codegen/security/auth_context.h \
|
||||
include/grpc++/impl/codegen/serialization_traits.h \
|
||||
include/grpc++/impl/codegen/server_context.h \
|
||||
|
|
@ -3095,6 +3101,7 @@ PUBLIC_HEADERS_CXX += \
|
|||
include/grpc++/impl/codegen/sync.h \
|
||||
include/grpc++/impl/codegen/sync_cxx11.h \
|
||||
include/grpc++/impl/codegen/sync_no_cxx11.h \
|
||||
include/grpc++/impl/codegen/sync_stream.h \
|
||||
include/grpc++/impl/codegen/time.h \
|
||||
|
||||
LIBGRPC++_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC++_SRC))))
|
||||
|
|
@ -3369,15 +3376,21 @@ PUBLIC_HEADERS_CXX += \
|
|||
include/grpc++/support/sync_stream.h \
|
||||
include/grpc++/support/time.h \
|
||||
include/grpc++/impl/codegen/async_stream.h \
|
||||
include/grpc++/impl/codegen/async_unary_call.h \
|
||||
include/grpc++/impl/codegen/call.h \
|
||||
include/grpc++/impl/codegen/call_hook.h \
|
||||
include/grpc++/impl/codegen/channel_interface.h \
|
||||
include/grpc++/impl/codegen/client_context.h \
|
||||
include/grpc++/impl/codegen/client_unary_call.h \
|
||||
include/grpc++/impl/codegen/completion_queue.h \
|
||||
include/grpc++/impl/codegen/completion_queue_tag.h \
|
||||
include/grpc++/impl/codegen/config.h \
|
||||
include/grpc++/impl/codegen/config_protobuf.h \
|
||||
include/grpc++/impl/codegen/grpc_library.h \
|
||||
include/grpc++/impl/codegen/method_handler_impl.h \
|
||||
include/grpc++/impl/codegen/proto_utils.h \
|
||||
include/grpc++/impl/codegen/rpc_method.h \
|
||||
include/grpc++/impl/codegen/rpc_service_method.h \
|
||||
include/grpc++/impl/codegen/security/auth_context.h \
|
||||
include/grpc++/impl/codegen/serialization_traits.h \
|
||||
include/grpc++/impl/codegen/server_context.h \
|
||||
|
|
@ -3390,6 +3403,7 @@ PUBLIC_HEADERS_CXX += \
|
|||
include/grpc++/impl/codegen/sync.h \
|
||||
include/grpc++/impl/codegen/sync_cxx11.h \
|
||||
include/grpc++/impl/codegen/sync_no_cxx11.h \
|
||||
include/grpc++/impl/codegen/sync_stream.h \
|
||||
include/grpc++/impl/codegen/time.h \
|
||||
|
||||
LIBGRPC++_UNSECURE_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC++_UNSECURE_SRC))))
|
||||
|
|
@ -3470,15 +3484,21 @@ LIBGRPC_PLUGIN_SUPPORT_SRC = \
|
|||
|
||||
PUBLIC_HEADERS_CXX += \
|
||||
include/grpc++/impl/codegen/async_stream.h \
|
||||
include/grpc++/impl/codegen/async_unary_call.h \
|
||||
include/grpc++/impl/codegen/call.h \
|
||||
include/grpc++/impl/codegen/call_hook.h \
|
||||
include/grpc++/impl/codegen/channel_interface.h \
|
||||
include/grpc++/impl/codegen/client_context.h \
|
||||
include/grpc++/impl/codegen/client_unary_call.h \
|
||||
include/grpc++/impl/codegen/completion_queue.h \
|
||||
include/grpc++/impl/codegen/completion_queue_tag.h \
|
||||
include/grpc++/impl/codegen/config.h \
|
||||
include/grpc++/impl/codegen/config_protobuf.h \
|
||||
include/grpc++/impl/codegen/grpc_library.h \
|
||||
include/grpc++/impl/codegen/method_handler_impl.h \
|
||||
include/grpc++/impl/codegen/proto_utils.h \
|
||||
include/grpc++/impl/codegen/rpc_method.h \
|
||||
include/grpc++/impl/codegen/rpc_service_method.h \
|
||||
include/grpc++/impl/codegen/security/auth_context.h \
|
||||
include/grpc++/impl/codegen/serialization_traits.h \
|
||||
include/grpc++/impl/codegen/server_context.h \
|
||||
|
|
@ -3491,6 +3511,7 @@ PUBLIC_HEADERS_CXX += \
|
|||
include/grpc++/impl/codegen/sync.h \
|
||||
include/grpc++/impl/codegen/sync_cxx11.h \
|
||||
include/grpc++/impl/codegen/sync_no_cxx11.h \
|
||||
include/grpc++/impl/codegen/sync_stream.h \
|
||||
include/grpc++/impl/codegen/time.h \
|
||||
include/grpc/impl/codegen/alloc.h \
|
||||
include/grpc/impl/codegen/atm.h \
|
||||
|
|
|
|||
|
|
@ -104,15 +104,21 @@ filegroups:
|
|||
- name: grpc++_codegen
|
||||
public_headers:
|
||||
- include/grpc++/impl/codegen/async_stream.h
|
||||
- include/grpc++/impl/codegen/async_unary_call.h
|
||||
- include/grpc++/impl/codegen/call.h
|
||||
- include/grpc++/impl/codegen/call_hook.h
|
||||
- include/grpc++/impl/codegen/channel_interface.h
|
||||
- include/grpc++/impl/codegen/client_context.h
|
||||
- include/grpc++/impl/codegen/client_unary_call.h
|
||||
- include/grpc++/impl/codegen/completion_queue.h
|
||||
- include/grpc++/impl/codegen/completion_queue_tag.h
|
||||
- include/grpc++/impl/codegen/config.h
|
||||
- include/grpc++/impl/codegen/config_protobuf.h
|
||||
- include/grpc++/impl/codegen/grpc_library.h
|
||||
- include/grpc++/impl/codegen/method_handler_impl.h
|
||||
- include/grpc++/impl/codegen/proto_utils.h
|
||||
- include/grpc++/impl/codegen/rpc_method.h
|
||||
- include/grpc++/impl/codegen/rpc_service_method.h
|
||||
- include/grpc++/impl/codegen/security/auth_context.h
|
||||
- include/grpc++/impl/codegen/serialization_traits.h
|
||||
- include/grpc++/impl/codegen/server_context.h
|
||||
|
|
@ -125,6 +131,7 @@ filegroups:
|
|||
- include/grpc++/impl/codegen/sync.h
|
||||
- include/grpc++/impl/codegen/sync_cxx11.h
|
||||
- include/grpc++/impl/codegen/sync_no_cxx11.h
|
||||
- include/grpc++/impl/codegen/sync_stream.h
|
||||
- include/grpc++/impl/codegen/time.h
|
||||
src:
|
||||
- src/cpp/codegen/grpc_library.cc
|
||||
|
|
|
|||
|
|
@ -55,9 +55,11 @@ greeter_async_client: helloworld.pb.o helloworld.grpc.pb.o greeter_async_client.
|
|||
greeter_async_server: helloworld.pb.o helloworld.grpc.pb.o greeter_async_server.o
|
||||
$(CXX) $^ $(LDFLAGS) -o $@
|
||||
|
||||
.PRECIOUS: %.grpc.pb.cc
|
||||
%.grpc.pb.cc: %.proto
|
||||
$(PROTOC) -I $(PROTOS_PATH) --grpc_out=. --plugin=protoc-gen-grpc=$(GRPC_CPP_PLUGIN_PATH) $<
|
||||
|
||||
.PRECIOUS: %.pb.cc
|
||||
%.pb.cc: %.proto
|
||||
$(PROTOC) -I $(PROTOS_PATH) --cpp_out=. $<
|
||||
|
||||
|
|
|
|||
|
|
@ -31,172 +31,9 @@
|
|||
*
|
||||
*/
|
||||
|
||||
/// A completion queue implements a concurrent producer-consumer queue, with two
|
||||
/// main methods, \a Next and \a AsyncNext.
|
||||
#ifndef GRPCXX_COMPLETION_QUEUE_H
|
||||
#define GRPCXX_COMPLETION_QUEUE_H
|
||||
|
||||
#include <grpc++/impl/codegen/grpc_library.h>
|
||||
#include <grpc++/impl/codegen/status.h>
|
||||
#include <grpc++/impl/codegen/time.h>
|
||||
|
||||
struct grpc_completion_queue;
|
||||
|
||||
namespace grpc {
|
||||
|
||||
template <class R>
|
||||
class ClientReader;
|
||||
template <class W>
|
||||
class ClientWriter;
|
||||
template <class W, class R>
|
||||
class ClientReaderWriter;
|
||||
template <class R>
|
||||
class ServerReader;
|
||||
template <class W>
|
||||
class ServerWriter;
|
||||
template <class W, class R>
|
||||
class ServerReaderWriter;
|
||||
template <class ServiceType, class RequestType, class ResponseType>
|
||||
class RpcMethodHandler;
|
||||
template <class ServiceType, class RequestType, class ResponseType>
|
||||
class ClientStreamingHandler;
|
||||
template <class ServiceType, class RequestType, class ResponseType>
|
||||
class ServerStreamingHandler;
|
||||
template <class ServiceType, class RequestType, class ResponseType>
|
||||
class BidiStreamingHandler;
|
||||
class UnknownMethodHandler;
|
||||
|
||||
class Channel;
|
||||
class ChannelInterface;
|
||||
class ClientContext;
|
||||
class CompletionQueueTag;
|
||||
class CompletionQueue;
|
||||
class RpcMethod;
|
||||
class Server;
|
||||
class ServerBuilder;
|
||||
class ServerContext;
|
||||
|
||||
/// A thin wrapper around \a grpc_completion_queue (see / \a
|
||||
/// src/core/surface/completion_queue.h).
|
||||
class CompletionQueue : private GrpcLibrary {
|
||||
public:
|
||||
/// Default constructor. Implicitly creates a \a grpc_completion_queue
|
||||
/// instance.
|
||||
CompletionQueue();
|
||||
|
||||
/// Wrap \a take, taking ownership of the instance.
|
||||
///
|
||||
/// \param take The completion queue instance to wrap. Ownership is taken.
|
||||
explicit CompletionQueue(grpc_completion_queue* take);
|
||||
|
||||
/// Destructor. Destroys the owned wrapped completion queue / instance.
|
||||
~CompletionQueue();
|
||||
|
||||
/// Tri-state return for AsyncNext: SHUTDOWN, GOT_EVENT, TIMEOUT.
|
||||
enum NextStatus {
|
||||
SHUTDOWN, ///< The completion queue has been shutdown.
|
||||
GOT_EVENT, ///< Got a new event; \a tag will be filled in with its
|
||||
///< associated value; \a ok indicating its success.
|
||||
TIMEOUT ///< deadline was reached.
|
||||
};
|
||||
|
||||
/// Read from the queue, blocking up to \a deadline (or the queue's shutdown).
|
||||
/// Both \a tag and \a ok are updated upon success (if an event is available
|
||||
/// within the \a deadline). A \a tag points to an arbitrary location usually
|
||||
/// employed to uniquely identify an event.
|
||||
///
|
||||
/// \param tag[out] Upon sucess, updated to point to the event's tag.
|
||||
/// \param ok[out] Upon sucess, true if read a regular event, false otherwise.
|
||||
/// \param deadline[in] How long to block in wait for an event.
|
||||
///
|
||||
/// \return The type of event read.
|
||||
template <typename T>
|
||||
NextStatus AsyncNext(void** tag, bool* ok, const T& deadline) {
|
||||
TimePoint<T> deadline_tp(deadline);
|
||||
return AsyncNextInternal(tag, ok, deadline_tp.raw_time());
|
||||
}
|
||||
|
||||
/// Read from the queue, blocking until an event is available or the queue is
|
||||
/// shutting down.
|
||||
///
|
||||
/// \param tag[out] Updated to point to the read event's tag.
|
||||
/// \param ok[out] true if read a regular event, false otherwise.
|
||||
///
|
||||
/// \return true if read a regular event, false if the queue is shutting down.
|
||||
bool Next(void** tag, bool* ok) {
|
||||
return (AsyncNextInternal(tag, ok, gpr_inf_future(GPR_CLOCK_REALTIME)) !=
|
||||
SHUTDOWN);
|
||||
}
|
||||
|
||||
/// Request the shutdown of the queue.
|
||||
///
|
||||
/// \warning This method must be called at some point. Once invoked, \a Next
|
||||
/// will start to return false and \a AsyncNext will return \a
|
||||
/// NextStatus::SHUTDOWN. Only once either one of these methods does that
|
||||
/// (that is, once the queue has been \em drained) can an instance of this
|
||||
/// class be destroyed.
|
||||
void Shutdown();
|
||||
|
||||
/// Returns a \em raw pointer to the underlying \a grpc_completion_queue
|
||||
/// instance.
|
||||
///
|
||||
/// \warning Remember that the returned instance is owned. No transfer of
|
||||
/// owership is performed.
|
||||
grpc_completion_queue* cq() { return cq_; }
|
||||
|
||||
private:
|
||||
// Friend synchronous wrappers so that they can access Pluck(), which is
|
||||
// a semi-private API geared towards the synchronous implementation.
|
||||
template <class R>
|
||||
friend class ::grpc::ClientReader;
|
||||
template <class W>
|
||||
friend class ::grpc::ClientWriter;
|
||||
template <class W, class R>
|
||||
friend class ::grpc::ClientReaderWriter;
|
||||
template <class R>
|
||||
friend class ::grpc::ServerReader;
|
||||
template <class W>
|
||||
friend class ::grpc::ServerWriter;
|
||||
template <class W, class R>
|
||||
friend class ::grpc::ServerReaderWriter;
|
||||
template <class ServiceType, class RequestType, class ResponseType>
|
||||
friend class RpcMethodHandler;
|
||||
template <class ServiceType, class RequestType, class ResponseType>
|
||||
friend class ClientStreamingHandler;
|
||||
template <class ServiceType, class RequestType, class ResponseType>
|
||||
friend class ServerStreamingHandler;
|
||||
template <class ServiceType, class RequestType, class ResponseType>
|
||||
friend class BidiStreamingHandler;
|
||||
friend class UnknownMethodHandler;
|
||||
friend class ::grpc::Server;
|
||||
friend class ::grpc::ServerContext;
|
||||
template <class InputMessage, class OutputMessage>
|
||||
friend Status BlockingUnaryCall(ChannelInterface* channel,
|
||||
const RpcMethod& method,
|
||||
ClientContext* context,
|
||||
const InputMessage& request,
|
||||
OutputMessage* result);
|
||||
|
||||
NextStatus AsyncNextInternal(void** tag, bool* ok, gpr_timespec deadline);
|
||||
|
||||
/// Wraps \a grpc_completion_queue_pluck.
|
||||
/// \warning Must not be mixed with calls to \a Next.
|
||||
bool Pluck(CompletionQueueTag* tag);
|
||||
|
||||
/// Performs a single polling pluck on \a tag.
|
||||
void TryPluck(CompletionQueueTag* tag);
|
||||
|
||||
grpc_completion_queue* cq_; // owned
|
||||
};
|
||||
|
||||
/// A specific type of completion queue used by the processing of notifications
|
||||
/// by servers. Instantiated by \a ServerBuilder.
|
||||
class ServerCompletionQueue : public CompletionQueue {
|
||||
private:
|
||||
friend class ServerBuilder;
|
||||
ServerCompletionQueue() {}
|
||||
};
|
||||
|
||||
} // namespace grpc
|
||||
#include <grpc++/impl/codegen/completion_queue.h>
|
||||
|
||||
#endif // GRPCXX_COMPLETION_QUEUE_H
|
||||
|
|
|
|||
|
|
@ -34,42 +34,6 @@
|
|||
#ifndef GRPCXX_IMPL_CLIENT_UNARY_CALL_H
|
||||
#define GRPCXX_IMPL_CLIENT_UNARY_CALL_H
|
||||
|
||||
#include <grpc++/impl/codegen/call.h>
|
||||
#include <grpc++/impl/codegen/channel_interface.h>
|
||||
#include <grpc++/impl/codegen/config.h>
|
||||
#include <grpc++/impl/codegen/status.h>
|
||||
|
||||
namespace grpc {
|
||||
|
||||
class Channel;
|
||||
class ClientContext;
|
||||
class CompletionQueue;
|
||||
class RpcMethod;
|
||||
|
||||
// Wrapper that performs a blocking unary call
|
||||
template <class InputMessage, class OutputMessage>
|
||||
Status BlockingUnaryCall(ChannelInterface* channel, const RpcMethod& method,
|
||||
ClientContext* context, const InputMessage& request,
|
||||
OutputMessage* result) {
|
||||
CompletionQueue cq;
|
||||
Call call(channel->CreateCall(method, context, &cq));
|
||||
CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage,
|
||||
CallOpRecvInitialMetadata, CallOpRecvMessage<OutputMessage>,
|
||||
CallOpClientSendClose, CallOpClientRecvStatus> ops;
|
||||
Status status = ops.SendMessage(request);
|
||||
if (!status.ok()) {
|
||||
return status;
|
||||
}
|
||||
ops.SendInitialMetadata(context->send_initial_metadata_);
|
||||
ops.RecvInitialMetadata(context);
|
||||
ops.RecvMessage(result);
|
||||
ops.ClientSendClose();
|
||||
ops.ClientRecvStatus(context, &status);
|
||||
call.PerformOps(&ops);
|
||||
GPR_ASSERT((cq.Pluck(&ops) && ops.got_message) || !status.ok());
|
||||
return status;
|
||||
}
|
||||
|
||||
} // namespace grpc
|
||||
#include <grpc++/impl/codegen/client_unary_call.h>
|
||||
|
||||
#endif // GRPCXX_IMPL_CLIENT_UNARY_CALL_H
|
||||
|
|
|
|||
|
|
@ -0,0 +1,159 @@
|
|||
/*
|
||||
*
|
||||
* Copyright 2015-2016, Google Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following disclaimer
|
||||
* in the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
* * Neither the name of Google Inc. nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPCXX_IMPL_CODEGEN_ASYNC_UNARY_CALL_H
|
||||
#define GRPCXX_IMPL_CODEGEN_ASYNC_UNARY_CALL_H
|
||||
|
||||
#include <grpc++/impl/codegen/call.h>
|
||||
#include <grpc++/impl/codegen/channel_interface.h>
|
||||
#include <grpc++/impl/codegen/client_context.h>
|
||||
#include <grpc++/impl/codegen/server_context.h>
|
||||
#include <grpc++/impl/codegen/service_type.h>
|
||||
#include <grpc++/impl/codegen/status.h>
|
||||
#include <grpc/impl/codegen/log.h>
|
||||
|
||||
namespace grpc {
|
||||
|
||||
class CompletionQueue;
|
||||
|
||||
template <class R>
|
||||
class ClientAsyncResponseReaderInterface {
|
||||
public:
|
||||
virtual ~ClientAsyncResponseReaderInterface() {}
|
||||
virtual void ReadInitialMetadata(void* tag) = 0;
|
||||
virtual void Finish(R* msg, Status* status, void* tag) = 0;
|
||||
};
|
||||
|
||||
template <class R>
|
||||
class ClientAsyncResponseReader GRPC_FINAL
|
||||
: public ClientAsyncResponseReaderInterface<R> {
|
||||
public:
|
||||
template <class W>
|
||||
ClientAsyncResponseReader(ChannelInterface* channel, CompletionQueue* cq,
|
||||
const RpcMethod& method, ClientContext* context,
|
||||
const W& request)
|
||||
: context_(context), call_(channel->CreateCall(method, context, cq)) {
|
||||
init_buf_.SendInitialMetadata(context->send_initial_metadata_);
|
||||
// TODO(ctiller): don't assert
|
||||
GPR_ASSERT(init_buf_.SendMessage(request).ok());
|
||||
init_buf_.ClientSendClose();
|
||||
call_.PerformOps(&init_buf_);
|
||||
}
|
||||
|
||||
void ReadInitialMetadata(void* tag) {
|
||||
GPR_ASSERT(!context_->initial_metadata_received_);
|
||||
|
||||
meta_buf_.set_output_tag(tag);
|
||||
meta_buf_.RecvInitialMetadata(context_);
|
||||
call_.PerformOps(&meta_buf_);
|
||||
}
|
||||
|
||||
void Finish(R* msg, Status* status, void* tag) {
|
||||
finish_buf_.set_output_tag(tag);
|
||||
if (!context_->initial_metadata_received_) {
|
||||
finish_buf_.RecvInitialMetadata(context_);
|
||||
}
|
||||
finish_buf_.RecvMessage(msg);
|
||||
finish_buf_.ClientRecvStatus(context_, status);
|
||||
call_.PerformOps(&finish_buf_);
|
||||
}
|
||||
|
||||
private:
|
||||
ClientContext* context_;
|
||||
Call call_;
|
||||
SneakyCallOpSet<CallOpSendInitialMetadata, CallOpSendMessage,
|
||||
CallOpClientSendClose>
|
||||
init_buf_;
|
||||
CallOpSet<CallOpRecvInitialMetadata> meta_buf_;
|
||||
CallOpSet<CallOpRecvInitialMetadata, CallOpRecvMessage<R>,
|
||||
CallOpClientRecvStatus>
|
||||
finish_buf_;
|
||||
};
|
||||
|
||||
template <class W>
|
||||
class ServerAsyncResponseWriter GRPC_FINAL
|
||||
: public ServerAsyncStreamingInterface {
|
||||
public:
|
||||
explicit ServerAsyncResponseWriter(ServerContext* ctx)
|
||||
: call_(nullptr, nullptr, nullptr), ctx_(ctx) {}
|
||||
|
||||
void SendInitialMetadata(void* tag) GRPC_OVERRIDE {
|
||||
GPR_ASSERT(!ctx_->sent_initial_metadata_);
|
||||
|
||||
meta_buf_.set_output_tag(tag);
|
||||
meta_buf_.SendInitialMetadata(ctx_->initial_metadata_);
|
||||
ctx_->sent_initial_metadata_ = true;
|
||||
call_.PerformOps(&meta_buf_);
|
||||
}
|
||||
|
||||
void Finish(const W& msg, const Status& status, void* tag) {
|
||||
finish_buf_.set_output_tag(tag);
|
||||
if (!ctx_->sent_initial_metadata_) {
|
||||
finish_buf_.SendInitialMetadata(ctx_->initial_metadata_);
|
||||
ctx_->sent_initial_metadata_ = true;
|
||||
}
|
||||
// The response is dropped if the status is not OK.
|
||||
if (status.ok()) {
|
||||
finish_buf_.ServerSendStatus(ctx_->trailing_metadata_,
|
||||
finish_buf_.SendMessage(msg));
|
||||
} else {
|
||||
finish_buf_.ServerSendStatus(ctx_->trailing_metadata_, status);
|
||||
}
|
||||
call_.PerformOps(&finish_buf_);
|
||||
}
|
||||
|
||||
void FinishWithError(const Status& status, void* tag) {
|
||||
GPR_ASSERT(!status.ok());
|
||||
finish_buf_.set_output_tag(tag);
|
||||
if (!ctx_->sent_initial_metadata_) {
|
||||
finish_buf_.SendInitialMetadata(ctx_->initial_metadata_);
|
||||
ctx_->sent_initial_metadata_ = true;
|
||||
}
|
||||
finish_buf_.ServerSendStatus(ctx_->trailing_metadata_, status);
|
||||
call_.PerformOps(&finish_buf_);
|
||||
}
|
||||
|
||||
private:
|
||||
void BindCall(Call* call) GRPC_OVERRIDE { call_ = *call; }
|
||||
|
||||
Call call_;
|
||||
ServerContext* ctx_;
|
||||
CallOpSet<CallOpSendInitialMetadata> meta_buf_;
|
||||
CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage,
|
||||
CallOpServerSendStatus>
|
||||
finish_buf_;
|
||||
};
|
||||
|
||||
} // namespace grpc
|
||||
|
||||
#endif // GRPCXX_IMPL_CODEGEN_ASYNC_UNARY_CALL_H
|
||||
|
|
@ -0,0 +1,76 @@
|
|||
/*
|
||||
*
|
||||
* Copyright 2015-2016, Google Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following disclaimer
|
||||
* in the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
* * Neither the name of Google Inc. nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPCXX_IMPL_CODEGEN_CLIENT_UNARY_CALL_H
|
||||
#define GRPCXX_IMPL_CODEGEN_CLIENT_UNARY_CALL_H
|
||||
|
||||
#include <grpc++/impl/codegen/call.h>
|
||||
#include <grpc++/impl/codegen/channel_interface.h>
|
||||
#include <grpc++/impl/codegen/config.h>
|
||||
#include <grpc++/impl/codegen/status.h>
|
||||
|
||||
namespace grpc {
|
||||
|
||||
class Channel;
|
||||
class ClientContext;
|
||||
class CompletionQueue;
|
||||
class RpcMethod;
|
||||
|
||||
// Wrapper that performs a blocking unary call
|
||||
template <class InputMessage, class OutputMessage>
|
||||
Status BlockingUnaryCall(ChannelInterface* channel, const RpcMethod& method,
|
||||
ClientContext* context, const InputMessage& request,
|
||||
OutputMessage* result) {
|
||||
CompletionQueue cq;
|
||||
Call call(channel->CreateCall(method, context, &cq));
|
||||
CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage,
|
||||
CallOpRecvInitialMetadata, CallOpRecvMessage<OutputMessage>,
|
||||
CallOpClientSendClose, CallOpClientRecvStatus>
|
||||
ops;
|
||||
Status status = ops.SendMessage(request);
|
||||
if (!status.ok()) {
|
||||
return status;
|
||||
}
|
||||
ops.SendInitialMetadata(context->send_initial_metadata_);
|
||||
ops.RecvInitialMetadata(context);
|
||||
ops.RecvMessage(result);
|
||||
ops.ClientSendClose();
|
||||
ops.ClientRecvStatus(context, &status);
|
||||
call.PerformOps(&ops);
|
||||
GPR_ASSERT((cq.Pluck(&ops) && ops.got_message) || !status.ok());
|
||||
return status;
|
||||
}
|
||||
|
||||
} // namespace grpc
|
||||
|
||||
#endif // GRPCXX_IMPL_CODEGEN_CLIENT_UNARY_CALL_H
|
||||
|
|
@ -0,0 +1,202 @@
|
|||
/*
|
||||
*
|
||||
* Copyright 2015-2016, Google Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following disclaimer
|
||||
* in the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
* * Neither the name of Google Inc. nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
/// A completion queue implements a concurrent producer-consumer queue, with two
|
||||
/// main methods, \a Next and \a AsyncNext.
|
||||
#ifndef GRPCXX_IMPL_CODEGEN_COMPLETION_QUEUE_H
|
||||
#define GRPCXX_IMPL_CODEGEN_COMPLETION_QUEUE_H
|
||||
|
||||
#include <grpc++/impl/codegen/grpc_library.h>
|
||||
#include <grpc++/impl/codegen/status.h>
|
||||
#include <grpc++/impl/codegen/time.h>
|
||||
|
||||
struct grpc_completion_queue;
|
||||
|
||||
namespace grpc {
|
||||
|
||||
template <class R>
|
||||
class ClientReader;
|
||||
template <class W>
|
||||
class ClientWriter;
|
||||
template <class W, class R>
|
||||
class ClientReaderWriter;
|
||||
template <class R>
|
||||
class ServerReader;
|
||||
template <class W>
|
||||
class ServerWriter;
|
||||
template <class W, class R>
|
||||
class ServerReaderWriter;
|
||||
template <class ServiceType, class RequestType, class ResponseType>
|
||||
class RpcMethodHandler;
|
||||
template <class ServiceType, class RequestType, class ResponseType>
|
||||
class ClientStreamingHandler;
|
||||
template <class ServiceType, class RequestType, class ResponseType>
|
||||
class ServerStreamingHandler;
|
||||
template <class ServiceType, class RequestType, class ResponseType>
|
||||
class BidiStreamingHandler;
|
||||
class UnknownMethodHandler;
|
||||
|
||||
class Channel;
|
||||
class ChannelInterface;
|
||||
class ClientContext;
|
||||
class CompletionQueueTag;
|
||||
class CompletionQueue;
|
||||
class RpcMethod;
|
||||
class Server;
|
||||
class ServerBuilder;
|
||||
class ServerContext;
|
||||
|
||||
/// A thin wrapper around \a grpc_completion_queue (see / \a
|
||||
/// src/core/surface/completion_queue.h).
|
||||
class CompletionQueue : private GrpcLibrary {
|
||||
public:
|
||||
/// Default constructor. Implicitly creates a \a grpc_completion_queue
|
||||
/// instance.
|
||||
CompletionQueue();
|
||||
|
||||
/// Wrap \a take, taking ownership of the instance.
|
||||
///
|
||||
/// \param take The completion queue instance to wrap. Ownership is taken.
|
||||
explicit CompletionQueue(grpc_completion_queue* take);
|
||||
|
||||
/// Destructor. Destroys the owned wrapped completion queue / instance.
|
||||
~CompletionQueue();
|
||||
|
||||
/// Tri-state return for AsyncNext: SHUTDOWN, GOT_EVENT, TIMEOUT.
|
||||
enum NextStatus {
|
||||
SHUTDOWN, ///< The completion queue has been shutdown.
|
||||
GOT_EVENT, ///< Got a new event; \a tag will be filled in with its
|
||||
///< associated value; \a ok indicating its success.
|
||||
TIMEOUT ///< deadline was reached.
|
||||
};
|
||||
|
||||
/// Read from the queue, blocking up to \a deadline (or the queue's shutdown).
|
||||
/// Both \a tag and \a ok are updated upon success (if an event is available
|
||||
/// within the \a deadline). A \a tag points to an arbitrary location usually
|
||||
/// employed to uniquely identify an event.
|
||||
///
|
||||
/// \param tag[out] Upon sucess, updated to point to the event's tag.
|
||||
/// \param ok[out] Upon sucess, true if read a regular event, false otherwise.
|
||||
/// \param deadline[in] How long to block in wait for an event.
|
||||
///
|
||||
/// \return The type of event read.
|
||||
template <typename T>
|
||||
NextStatus AsyncNext(void** tag, bool* ok, const T& deadline) {
|
||||
TimePoint<T> deadline_tp(deadline);
|
||||
return AsyncNextInternal(tag, ok, deadline_tp.raw_time());
|
||||
}
|
||||
|
||||
/// Read from the queue, blocking until an event is available or the queue is
|
||||
/// shutting down.
|
||||
///
|
||||
/// \param tag[out] Updated to point to the read event's tag.
|
||||
/// \param ok[out] true if read a regular event, false otherwise.
|
||||
///
|
||||
/// \return true if read a regular event, false if the queue is shutting down.
|
||||
bool Next(void** tag, bool* ok) {
|
||||
return (AsyncNextInternal(tag, ok, gpr_inf_future(GPR_CLOCK_REALTIME)) !=
|
||||
SHUTDOWN);
|
||||
}
|
||||
|
||||
/// Request the shutdown of the queue.
|
||||
///
|
||||
/// \warning This method must be called at some point. Once invoked, \a Next
|
||||
/// will start to return false and \a AsyncNext will return \a
|
||||
/// NextStatus::SHUTDOWN. Only once either one of these methods does that
|
||||
/// (that is, once the queue has been \em drained) can an instance of this
|
||||
/// class be destroyed.
|
||||
void Shutdown();
|
||||
|
||||
/// Returns a \em raw pointer to the underlying \a grpc_completion_queue
|
||||
/// instance.
|
||||
///
|
||||
/// \warning Remember that the returned instance is owned. No transfer of
|
||||
/// owership is performed.
|
||||
grpc_completion_queue* cq() { return cq_; }
|
||||
|
||||
private:
|
||||
// Friend synchronous wrappers so that they can access Pluck(), which is
|
||||
// a semi-private API geared towards the synchronous implementation.
|
||||
template <class R>
|
||||
friend class ::grpc::ClientReader;
|
||||
template <class W>
|
||||
friend class ::grpc::ClientWriter;
|
||||
template <class W, class R>
|
||||
friend class ::grpc::ClientReaderWriter;
|
||||
template <class R>
|
||||
friend class ::grpc::ServerReader;
|
||||
template <class W>
|
||||
friend class ::grpc::ServerWriter;
|
||||
template <class W, class R>
|
||||
friend class ::grpc::ServerReaderWriter;
|
||||
template <class ServiceType, class RequestType, class ResponseType>
|
||||
friend class RpcMethodHandler;
|
||||
template <class ServiceType, class RequestType, class ResponseType>
|
||||
friend class ClientStreamingHandler;
|
||||
template <class ServiceType, class RequestType, class ResponseType>
|
||||
friend class ServerStreamingHandler;
|
||||
template <class ServiceType, class RequestType, class ResponseType>
|
||||
friend class BidiStreamingHandler;
|
||||
friend class UnknownMethodHandler;
|
||||
friend class ::grpc::Server;
|
||||
friend class ::grpc::ServerContext;
|
||||
template <class InputMessage, class OutputMessage>
|
||||
friend Status BlockingUnaryCall(ChannelInterface* channel,
|
||||
const RpcMethod& method,
|
||||
ClientContext* context,
|
||||
const InputMessage& request,
|
||||
OutputMessage* result);
|
||||
|
||||
NextStatus AsyncNextInternal(void** tag, bool* ok, gpr_timespec deadline);
|
||||
|
||||
/// Wraps \a grpc_completion_queue_pluck.
|
||||
/// \warning Must not be mixed with calls to \a Next.
|
||||
bool Pluck(CompletionQueueTag* tag);
|
||||
|
||||
/// Performs a single polling pluck on \a tag.
|
||||
void TryPluck(CompletionQueueTag* tag);
|
||||
|
||||
grpc_completion_queue* cq_; // owned
|
||||
};
|
||||
|
||||
/// A specific type of completion queue used by the processing of notifications
|
||||
/// by servers. Instantiated by \a ServerBuilder.
|
||||
class ServerCompletionQueue : public CompletionQueue {
|
||||
private:
|
||||
friend class ServerBuilder;
|
||||
ServerCompletionQueue() {}
|
||||
};
|
||||
|
||||
} // namespace grpc
|
||||
|
||||
#endif // GRPCXX_IMPL_CODEGEN_COMPLETION_QUEUE_H
|
||||
|
|
@ -0,0 +1,211 @@
|
|||
/*
|
||||
*
|
||||
* Copyright 2015-2016, Google Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following disclaimer
|
||||
* in the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
* * Neither the name of Google Inc. nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPCXX_IMPL_CODEGEN_METHOD_HANDLER_IMPL_H
|
||||
#define GRPCXX_IMPL_CODEGEN_METHOD_HANDLER_IMPL_H
|
||||
|
||||
#include <grpc++/impl/codegen/rpc_service_method.h>
|
||||
#include <grpc++/impl/codegen/sync_stream.h>
|
||||
|
||||
namespace grpc {
|
||||
|
||||
// A wrapper class of an application provided rpc method handler.
|
||||
template <class ServiceType, class RequestType, class ResponseType>
|
||||
class RpcMethodHandler : public MethodHandler {
|
||||
public:
|
||||
RpcMethodHandler(std::function<Status(ServiceType*, ServerContext*,
|
||||
const RequestType*, ResponseType*)>
|
||||
func,
|
||||
ServiceType* service)
|
||||
: func_(func), service_(service) {}
|
||||
|
||||
void RunHandler(const HandlerParameter& param) GRPC_FINAL {
|
||||
RequestType req;
|
||||
Status status = SerializationTraits<RequestType>::Deserialize(
|
||||
param.request, &req, param.max_message_size);
|
||||
ResponseType rsp;
|
||||
if (status.ok()) {
|
||||
status = func_(service_, param.server_context, &req, &rsp);
|
||||
}
|
||||
|
||||
GPR_ASSERT(!param.server_context->sent_initial_metadata_);
|
||||
CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage,
|
||||
CallOpServerSendStatus>
|
||||
ops;
|
||||
ops.SendInitialMetadata(param.server_context->initial_metadata_);
|
||||
if (status.ok()) {
|
||||
status = ops.SendMessage(rsp);
|
||||
}
|
||||
ops.ServerSendStatus(param.server_context->trailing_metadata_, status);
|
||||
param.call->PerformOps(&ops);
|
||||
param.call->cq()->Pluck(&ops);
|
||||
}
|
||||
|
||||
private:
|
||||
// Application provided rpc handler function.
|
||||
std::function<Status(ServiceType*, ServerContext*, const RequestType*,
|
||||
ResponseType*)>
|
||||
func_;
|
||||
// The class the above handler function lives in.
|
||||
ServiceType* service_;
|
||||
};
|
||||
|
||||
// A wrapper class of an application provided client streaming handler.
|
||||
template <class ServiceType, class RequestType, class ResponseType>
|
||||
class ClientStreamingHandler : public MethodHandler {
|
||||
public:
|
||||
ClientStreamingHandler(
|
||||
std::function<Status(ServiceType*, ServerContext*,
|
||||
ServerReader<RequestType>*, ResponseType*)>
|
||||
func,
|
||||
ServiceType* service)
|
||||
: func_(func), service_(service) {}
|
||||
|
||||
void RunHandler(const HandlerParameter& param) GRPC_FINAL {
|
||||
ServerReader<RequestType> reader(param.call, param.server_context);
|
||||
ResponseType rsp;
|
||||
Status status = func_(service_, param.server_context, &reader, &rsp);
|
||||
|
||||
GPR_ASSERT(!param.server_context->sent_initial_metadata_);
|
||||
CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage,
|
||||
CallOpServerSendStatus>
|
||||
ops;
|
||||
ops.SendInitialMetadata(param.server_context->initial_metadata_);
|
||||
if (status.ok()) {
|
||||
status = ops.SendMessage(rsp);
|
||||
}
|
||||
ops.ServerSendStatus(param.server_context->trailing_metadata_, status);
|
||||
param.call->PerformOps(&ops);
|
||||
param.call->cq()->Pluck(&ops);
|
||||
}
|
||||
|
||||
private:
|
||||
std::function<Status(ServiceType*, ServerContext*, ServerReader<RequestType>*,
|
||||
ResponseType*)>
|
||||
func_;
|
||||
ServiceType* service_;
|
||||
};
|
||||
|
||||
// A wrapper class of an application provided server streaming handler.
|
||||
template <class ServiceType, class RequestType, class ResponseType>
|
||||
class ServerStreamingHandler : public MethodHandler {
|
||||
public:
|
||||
ServerStreamingHandler(
|
||||
std::function<Status(ServiceType*, ServerContext*, const RequestType*,
|
||||
ServerWriter<ResponseType>*)>
|
||||
func,
|
||||
ServiceType* service)
|
||||
: func_(func), service_(service) {}
|
||||
|
||||
void RunHandler(const HandlerParameter& param) GRPC_FINAL {
|
||||
RequestType req;
|
||||
Status status = SerializationTraits<RequestType>::Deserialize(
|
||||
param.request, &req, param.max_message_size);
|
||||
|
||||
if (status.ok()) {
|
||||
ServerWriter<ResponseType> writer(param.call, param.server_context);
|
||||
status = func_(service_, param.server_context, &req, &writer);
|
||||
}
|
||||
|
||||
CallOpSet<CallOpSendInitialMetadata, CallOpServerSendStatus> ops;
|
||||
if (!param.server_context->sent_initial_metadata_) {
|
||||
ops.SendInitialMetadata(param.server_context->initial_metadata_);
|
||||
}
|
||||
ops.ServerSendStatus(param.server_context->trailing_metadata_, status);
|
||||
param.call->PerformOps(&ops);
|
||||
param.call->cq()->Pluck(&ops);
|
||||
}
|
||||
|
||||
private:
|
||||
std::function<Status(ServiceType*, ServerContext*, const RequestType*,
|
||||
ServerWriter<ResponseType>*)>
|
||||
func_;
|
||||
ServiceType* service_;
|
||||
};
|
||||
|
||||
// A wrapper class of an application provided bidi-streaming handler.
|
||||
template <class ServiceType, class RequestType, class ResponseType>
|
||||
class BidiStreamingHandler : public MethodHandler {
|
||||
public:
|
||||
BidiStreamingHandler(
|
||||
std::function<Status(ServiceType*, ServerContext*,
|
||||
ServerReaderWriter<ResponseType, RequestType>*)>
|
||||
func,
|
||||
ServiceType* service)
|
||||
: func_(func), service_(service) {}
|
||||
|
||||
void RunHandler(const HandlerParameter& param) GRPC_FINAL {
|
||||
ServerReaderWriter<ResponseType, RequestType> stream(param.call,
|
||||
param.server_context);
|
||||
Status status = func_(service_, param.server_context, &stream);
|
||||
|
||||
CallOpSet<CallOpSendInitialMetadata, CallOpServerSendStatus> ops;
|
||||
if (!param.server_context->sent_initial_metadata_) {
|
||||
ops.SendInitialMetadata(param.server_context->initial_metadata_);
|
||||
}
|
||||
ops.ServerSendStatus(param.server_context->trailing_metadata_, status);
|
||||
param.call->PerformOps(&ops);
|
||||
param.call->cq()->Pluck(&ops);
|
||||
}
|
||||
|
||||
private:
|
||||
std::function<Status(ServiceType*, ServerContext*,
|
||||
ServerReaderWriter<ResponseType, RequestType>*)>
|
||||
func_;
|
||||
ServiceType* service_;
|
||||
};
|
||||
|
||||
// Handle unknown method by returning UNIMPLEMENTED error.
|
||||
class UnknownMethodHandler : public MethodHandler {
|
||||
public:
|
||||
template <class T>
|
||||
static void FillOps(ServerContext* context, T* ops) {
|
||||
Status status(StatusCode::UNIMPLEMENTED, "");
|
||||
if (!context->sent_initial_metadata_) {
|
||||
ops->SendInitialMetadata(context->initial_metadata_);
|
||||
context->sent_initial_metadata_ = true;
|
||||
}
|
||||
ops->ServerSendStatus(context->trailing_metadata_, status);
|
||||
}
|
||||
|
||||
void RunHandler(const HandlerParameter& param) GRPC_FINAL {
|
||||
CallOpSet<CallOpSendInitialMetadata, CallOpServerSendStatus> ops;
|
||||
FillOps(param.server_context, &ops);
|
||||
param.call->PerformOps(&ops);
|
||||
param.call->cq()->Pluck(&ops);
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace grpc
|
||||
|
||||
#endif // GRPCXX_IMPL_CODEGEN_METHOD_HANDLER_IMPL_H
|
||||
|
|
@ -0,0 +1,73 @@
|
|||
/*
|
||||
*
|
||||
* Copyright 2015-2016, Google Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following disclaimer
|
||||
* in the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
* * Neither the name of Google Inc. nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPCXX_IMPL_CODEGEN_RPC_METHOD_H
|
||||
#define GRPCXX_IMPL_CODEGEN_RPC_METHOD_H
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include <grpc++/impl/codegen/channel_interface.h>
|
||||
|
||||
namespace grpc {
|
||||
|
||||
class RpcMethod {
|
||||
public:
|
||||
enum RpcType {
|
||||
NORMAL_RPC = 0,
|
||||
CLIENT_STREAMING, // request streaming
|
||||
SERVER_STREAMING, // response streaming
|
||||
BIDI_STREAMING
|
||||
};
|
||||
|
||||
RpcMethod(const char* name, RpcType type)
|
||||
: name_(name), method_type_(type), channel_tag_(NULL) {}
|
||||
|
||||
RpcMethod(const char* name, RpcType type,
|
||||
const std::shared_ptr<ChannelInterface>& channel)
|
||||
: name_(name),
|
||||
method_type_(type),
|
||||
channel_tag_(channel->RegisterMethod(name)) {}
|
||||
|
||||
const char* name() const { return name_; }
|
||||
RpcType method_type() const { return method_type_; }
|
||||
void* channel_tag() const { return channel_tag_; }
|
||||
|
||||
private:
|
||||
const char* const name_;
|
||||
const RpcType method_type_;
|
||||
void* const channel_tag_;
|
||||
};
|
||||
|
||||
} // namespace grpc
|
||||
|
||||
#endif // GRPCXX_IMPL_CODEGEN_RPC_METHOD_H
|
||||
|
|
@ -0,0 +1,92 @@
|
|||
/*
|
||||
*
|
||||
* Copyright 2016, Google Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following disclaimer
|
||||
* in the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
* * Neither the name of Google Inc. nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPCXX_IMPL_CODEGEN_RPC_SERVICE_METHOD_H
|
||||
#define GRPCXX_IMPL_CODEGEN_RPC_SERVICE_METHOD_H
|
||||
|
||||
#include <climits>
|
||||
#include <functional>
|
||||
#include <map>
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
#include <grpc++/impl/codegen/config.h>
|
||||
#include <grpc++/impl/codegen/rpc_method.h>
|
||||
#include <grpc++/impl/codegen/status.h>
|
||||
|
||||
namespace grpc {
|
||||
class ServerContext;
|
||||
class StreamContextInterface;
|
||||
|
||||
// Base class for running an RPC handler.
|
||||
class MethodHandler {
|
||||
public:
|
||||
virtual ~MethodHandler() {}
|
||||
struct HandlerParameter {
|
||||
HandlerParameter(Call* c, ServerContext* context, grpc_byte_buffer* req,
|
||||
int max_size)
|
||||
: call(c),
|
||||
server_context(context),
|
||||
request(req),
|
||||
max_message_size(max_size) {}
|
||||
Call* call;
|
||||
ServerContext* server_context;
|
||||
// Handler required to grpc_byte_buffer_destroy this
|
||||
grpc_byte_buffer* request;
|
||||
int max_message_size;
|
||||
};
|
||||
virtual void RunHandler(const HandlerParameter& param) = 0;
|
||||
};
|
||||
|
||||
// Server side rpc method class
|
||||
class RpcServiceMethod : public RpcMethod {
|
||||
public:
|
||||
// Takes ownership of the handler
|
||||
RpcServiceMethod(const char* name, RpcMethod::RpcType type,
|
||||
MethodHandler* handler)
|
||||
: RpcMethod(name, type), server_tag_(nullptr), handler_(handler) {}
|
||||
|
||||
void set_server_tag(void* tag) { server_tag_ = tag; }
|
||||
void* server_tag() const { return server_tag_; }
|
||||
// if MethodHandler is nullptr, then this is an async method
|
||||
MethodHandler* handler() const { return handler_.get(); }
|
||||
void ResetHandler() { handler_.reset(); }
|
||||
|
||||
private:
|
||||
void* server_tag_;
|
||||
std::unique_ptr<MethodHandler> handler_;
|
||||
};
|
||||
|
||||
} // namespace grpc
|
||||
|
||||
#endif // GRPCXX_IMPL_CODEGEN_RPC_SERVICE_METHOD_H
|
||||
|
|
@ -34,8 +34,9 @@
|
|||
#ifndef GRPCXX_IMPL_CODEGEN_SERVER_INTERFACE_H
|
||||
#define GRPCXX_IMPL_CODEGEN_SERVER_INTERFACE_H
|
||||
|
||||
#include <grpc++/impl/codegen/completion_queue_tag.h>
|
||||
#include <grpc++/impl/codegen/call_hook.h>
|
||||
#include <grpc++/impl/codegen/completion_queue_tag.h>
|
||||
#include <grpc++/impl/codegen/rpc_service_method.h>
|
||||
|
||||
namespace grpc {
|
||||
|
||||
|
|
@ -43,7 +44,6 @@ class AsyncGenericService;
|
|||
class AsynchronousService;
|
||||
class GenericServerContext;
|
||||
class RpcService;
|
||||
class RpcServiceMethod;
|
||||
class ServerAsyncStreamingInterface;
|
||||
class ServerCompletionQueue;
|
||||
class ServerContext;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,416 @@
|
|||
/*
|
||||
*
|
||||
* Copyright 2015-2016, Google Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following disclaimer
|
||||
* in the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
* * Neither the name of Google Inc. nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPCXX_IMPL_CODEGEN_SYNC_STREAM_H
|
||||
#define GRPCXX_IMPL_CODEGEN_SYNC_STREAM_H
|
||||
|
||||
#include <grpc++/impl/codegen/call.h>
|
||||
#include <grpc++/impl/codegen/channel_interface.h>
|
||||
#include <grpc++/impl/codegen/client_context.h>
|
||||
#include <grpc++/impl/codegen/completion_queue.h>
|
||||
#include <grpc++/impl/codegen/server_context.h>
|
||||
#include <grpc++/impl/codegen/service_type.h>
|
||||
#include <grpc++/impl/codegen/status.h>
|
||||
#include <grpc/impl/codegen/log.h>
|
||||
|
||||
namespace grpc {
|
||||
|
||||
/// Common interface for all synchronous client side streaming.
|
||||
class ClientStreamingInterface {
|
||||
public:
|
||||
virtual ~ClientStreamingInterface() {}
|
||||
|
||||
/// Wait until the stream finishes, and return the final status. When the
|
||||
/// client side declares it has no more message to send, either implicitly or
|
||||
/// by calling \a WritesDone(), it needs to make sure there is no more message
|
||||
/// to be received from the server, either implicitly or by getting a false
|
||||
/// from a \a Read().
|
||||
///
|
||||
/// This function will return either:
|
||||
/// - when all incoming messages have been read and the server has returned
|
||||
/// status.
|
||||
/// - OR when the server has returned a non-OK status.
|
||||
virtual Status Finish() = 0;
|
||||
};
|
||||
|
||||
/// An interface that yields a sequence of messages of type \a R.
|
||||
template <class R>
|
||||
class ReaderInterface {
|
||||
public:
|
||||
virtual ~ReaderInterface() {}
|
||||
|
||||
/// Blocking read a message and parse to \a msg. Returns \a true on success.
|
||||
///
|
||||
/// \param[out] msg The read message.
|
||||
///
|
||||
/// \return \a false when there will be no more incoming messages, either
|
||||
/// because the other side has called \a WritesDone() or the stream has failed
|
||||
/// (or been cancelled).
|
||||
virtual bool Read(R* msg) = 0;
|
||||
};
|
||||
|
||||
/// An interface that can be fed a sequence of messages of type \a W.
|
||||
template <class W>
|
||||
class WriterInterface {
|
||||
public:
|
||||
virtual ~WriterInterface() {}
|
||||
|
||||
/// Blocking write \a msg to the stream with options.
|
||||
///
|
||||
/// \param msg The message to be written to the stream.
|
||||
/// \param options Options affecting the write operation.
|
||||
///
|
||||
/// \return \a true on success, \a false when the stream has been closed.
|
||||
virtual bool Write(const W& msg, const WriteOptions& options) = 0;
|
||||
|
||||
/// Blocking write \a msg to the stream with default options.
|
||||
///
|
||||
/// \param msg The message to be written to the stream.
|
||||
///
|
||||
/// \return \a true on success, \a false when the stream has been closed.
|
||||
inline bool Write(const W& msg) { return Write(msg, WriteOptions()); }
|
||||
};
|
||||
|
||||
/// Client-side interface for streaming reads of message of type \a R.
|
||||
template <class R>
|
||||
class ClientReaderInterface : public ClientStreamingInterface,
|
||||
public ReaderInterface<R> {
|
||||
public:
|
||||
/// Blocking wait for initial metadata from server. The received metadata
|
||||
/// can only be accessed after this call returns. Should only be called before
|
||||
/// the first read. Calling this method is optional, and if it is not called
|
||||
/// the metadata will be available in ClientContext after the first read.
|
||||
virtual void WaitForInitialMetadata() = 0;
|
||||
};
|
||||
|
||||
template <class R>
|
||||
class ClientReader GRPC_FINAL : public ClientReaderInterface<R> {
|
||||
public:
|
||||
/// Blocking create a stream and write the first request out.
|
||||
template <class W>
|
||||
ClientReader(ChannelInterface* channel, const RpcMethod& method,
|
||||
ClientContext* context, const W& request)
|
||||
: context_(context), call_(channel->CreateCall(method, context, &cq_)) {
|
||||
CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage,
|
||||
CallOpClientSendClose>
|
||||
ops;
|
||||
ops.SendInitialMetadata(context->send_initial_metadata_);
|
||||
// TODO(ctiller): don't assert
|
||||
GPR_ASSERT(ops.SendMessage(request).ok());
|
||||
ops.ClientSendClose();
|
||||
call_.PerformOps(&ops);
|
||||
cq_.Pluck(&ops);
|
||||
}
|
||||
|
||||
void WaitForInitialMetadata() GRPC_OVERRIDE {
|
||||
GPR_ASSERT(!context_->initial_metadata_received_);
|
||||
|
||||
CallOpSet<CallOpRecvInitialMetadata> ops;
|
||||
ops.RecvInitialMetadata(context_);
|
||||
call_.PerformOps(&ops);
|
||||
cq_.Pluck(&ops); /// status ignored
|
||||
}
|
||||
|
||||
bool Read(R* msg) GRPC_OVERRIDE {
|
||||
CallOpSet<CallOpRecvInitialMetadata, CallOpRecvMessage<R>> ops;
|
||||
if (!context_->initial_metadata_received_) {
|
||||
ops.RecvInitialMetadata(context_);
|
||||
}
|
||||
ops.RecvMessage(msg);
|
||||
call_.PerformOps(&ops);
|
||||
return cq_.Pluck(&ops) && ops.got_message;
|
||||
}
|
||||
|
||||
Status Finish() GRPC_OVERRIDE {
|
||||
CallOpSet<CallOpClientRecvStatus> ops;
|
||||
Status status;
|
||||
ops.ClientRecvStatus(context_, &status);
|
||||
call_.PerformOps(&ops);
|
||||
GPR_ASSERT(cq_.Pluck(&ops));
|
||||
return status;
|
||||
}
|
||||
|
||||
private:
|
||||
ClientContext* context_;
|
||||
CompletionQueue cq_;
|
||||
Call call_;
|
||||
};
|
||||
|
||||
/// Client-side interface for streaming writes of message of type \a W.
|
||||
template <class W>
|
||||
class ClientWriterInterface : public ClientStreamingInterface,
|
||||
public WriterInterface<W> {
|
||||
public:
|
||||
/// Half close writing from the client.
|
||||
/// Block until writes are completed.
|
||||
///
|
||||
/// \return Whether the writes were successful.
|
||||
virtual bool WritesDone() = 0;
|
||||
};
|
||||
|
||||
template <class W>
|
||||
class ClientWriter : public ClientWriterInterface<W> {
|
||||
public:
|
||||
/// Blocking create a stream.
|
||||
template <class R>
|
||||
ClientWriter(ChannelInterface* channel, const RpcMethod& method,
|
||||
ClientContext* context, R* response)
|
||||
: context_(context), call_(channel->CreateCall(method, context, &cq_)) {
|
||||
finish_ops_.RecvMessage(response);
|
||||
|
||||
CallOpSet<CallOpSendInitialMetadata> ops;
|
||||
ops.SendInitialMetadata(context->send_initial_metadata_);
|
||||
call_.PerformOps(&ops);
|
||||
cq_.Pluck(&ops);
|
||||
}
|
||||
|
||||
using WriterInterface<W>::Write;
|
||||
bool Write(const W& msg, const WriteOptions& options) GRPC_OVERRIDE {
|
||||
CallOpSet<CallOpSendMessage> ops;
|
||||
if (!ops.SendMessage(msg, options).ok()) {
|
||||
return false;
|
||||
}
|
||||
call_.PerformOps(&ops);
|
||||
return cq_.Pluck(&ops);
|
||||
}
|
||||
|
||||
bool WritesDone() GRPC_OVERRIDE {
|
||||
CallOpSet<CallOpClientSendClose> ops;
|
||||
ops.ClientSendClose();
|
||||
call_.PerformOps(&ops);
|
||||
return cq_.Pluck(&ops);
|
||||
}
|
||||
|
||||
/// Read the final response and wait for the final status.
|
||||
Status Finish() GRPC_OVERRIDE {
|
||||
Status status;
|
||||
finish_ops_.ClientRecvStatus(context_, &status);
|
||||
call_.PerformOps(&finish_ops_);
|
||||
GPR_ASSERT(cq_.Pluck(&finish_ops_));
|
||||
return status;
|
||||
}
|
||||
|
||||
private:
|
||||
ClientContext* context_;
|
||||
CallOpSet<CallOpGenericRecvMessage, CallOpClientRecvStatus> finish_ops_;
|
||||
CompletionQueue cq_;
|
||||
Call call_;
|
||||
};
|
||||
|
||||
/// Client-side interface for bi-directional streaming.
|
||||
template <class W, class R>
|
||||
class ClientReaderWriterInterface : public ClientStreamingInterface,
|
||||
public WriterInterface<W>,
|
||||
public ReaderInterface<R> {
|
||||
public:
|
||||
/// Blocking wait for initial metadata from server. The received metadata
|
||||
/// can only be accessed after this call returns. Should only be called before
|
||||
/// the first read. Calling this method is optional, and if it is not called
|
||||
/// the metadata will be available in ClientContext after the first read.
|
||||
virtual void WaitForInitialMetadata() = 0;
|
||||
|
||||
/// Block until writes are completed.
|
||||
///
|
||||
/// \return Whether the writes were successful.
|
||||
virtual bool WritesDone() = 0;
|
||||
};
|
||||
|
||||
template <class W, class R>
|
||||
class ClientReaderWriter GRPC_FINAL : public ClientReaderWriterInterface<W, R> {
|
||||
public:
|
||||
/// Blocking create a stream.
|
||||
ClientReaderWriter(ChannelInterface* channel, const RpcMethod& method,
|
||||
ClientContext* context)
|
||||
: context_(context), call_(channel->CreateCall(method, context, &cq_)) {
|
||||
CallOpSet<CallOpSendInitialMetadata> ops;
|
||||
ops.SendInitialMetadata(context->send_initial_metadata_);
|
||||
call_.PerformOps(&ops);
|
||||
cq_.Pluck(&ops);
|
||||
}
|
||||
|
||||
void WaitForInitialMetadata() GRPC_OVERRIDE {
|
||||
GPR_ASSERT(!context_->initial_metadata_received_);
|
||||
|
||||
CallOpSet<CallOpRecvInitialMetadata> ops;
|
||||
ops.RecvInitialMetadata(context_);
|
||||
call_.PerformOps(&ops);
|
||||
cq_.Pluck(&ops); // status ignored
|
||||
}
|
||||
|
||||
bool Read(R* msg) GRPC_OVERRIDE {
|
||||
CallOpSet<CallOpRecvInitialMetadata, CallOpRecvMessage<R>> ops;
|
||||
if (!context_->initial_metadata_received_) {
|
||||
ops.RecvInitialMetadata(context_);
|
||||
}
|
||||
ops.RecvMessage(msg);
|
||||
call_.PerformOps(&ops);
|
||||
return cq_.Pluck(&ops) && ops.got_message;
|
||||
}
|
||||
|
||||
using WriterInterface<W>::Write;
|
||||
bool Write(const W& msg, const WriteOptions& options) GRPC_OVERRIDE {
|
||||
CallOpSet<CallOpSendMessage> ops;
|
||||
if (!ops.SendMessage(msg, options).ok()) return false;
|
||||
call_.PerformOps(&ops);
|
||||
return cq_.Pluck(&ops);
|
||||
}
|
||||
|
||||
bool WritesDone() GRPC_OVERRIDE {
|
||||
CallOpSet<CallOpClientSendClose> ops;
|
||||
ops.ClientSendClose();
|
||||
call_.PerformOps(&ops);
|
||||
return cq_.Pluck(&ops);
|
||||
}
|
||||
|
||||
Status Finish() GRPC_OVERRIDE {
|
||||
CallOpSet<CallOpClientRecvStatus> ops;
|
||||
Status status;
|
||||
ops.ClientRecvStatus(context_, &status);
|
||||
call_.PerformOps(&ops);
|
||||
GPR_ASSERT(cq_.Pluck(&ops));
|
||||
return status;
|
||||
}
|
||||
|
||||
private:
|
||||
ClientContext* context_;
|
||||
CompletionQueue cq_;
|
||||
Call call_;
|
||||
};
|
||||
|
||||
template <class R>
|
||||
class ServerReader GRPC_FINAL : public ReaderInterface<R> {
|
||||
public:
|
||||
ServerReader(Call* call, ServerContext* ctx) : call_(call), ctx_(ctx) {}
|
||||
|
||||
void SendInitialMetadata() {
|
||||
GPR_ASSERT(!ctx_->sent_initial_metadata_);
|
||||
|
||||
CallOpSet<CallOpSendInitialMetadata> ops;
|
||||
ops.SendInitialMetadata(ctx_->initial_metadata_);
|
||||
ctx_->sent_initial_metadata_ = true;
|
||||
call_->PerformOps(&ops);
|
||||
call_->cq()->Pluck(&ops);
|
||||
}
|
||||
|
||||
bool Read(R* msg) GRPC_OVERRIDE {
|
||||
CallOpSet<CallOpRecvMessage<R>> ops;
|
||||
ops.RecvMessage(msg);
|
||||
call_->PerformOps(&ops);
|
||||
return call_->cq()->Pluck(&ops) && ops.got_message;
|
||||
}
|
||||
|
||||
private:
|
||||
Call* const call_;
|
||||
ServerContext* const ctx_;
|
||||
};
|
||||
|
||||
template <class W>
|
||||
class ServerWriter GRPC_FINAL : public WriterInterface<W> {
|
||||
public:
|
||||
ServerWriter(Call* call, ServerContext* ctx) : call_(call), ctx_(ctx) {}
|
||||
|
||||
void SendInitialMetadata() {
|
||||
GPR_ASSERT(!ctx_->sent_initial_metadata_);
|
||||
|
||||
CallOpSet<CallOpSendInitialMetadata> ops;
|
||||
ops.SendInitialMetadata(ctx_->initial_metadata_);
|
||||
ctx_->sent_initial_metadata_ = true;
|
||||
call_->PerformOps(&ops);
|
||||
call_->cq()->Pluck(&ops);
|
||||
}
|
||||
|
||||
using WriterInterface<W>::Write;
|
||||
bool Write(const W& msg, const WriteOptions& options) GRPC_OVERRIDE {
|
||||
CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage> ops;
|
||||
if (!ops.SendMessage(msg, options).ok()) {
|
||||
return false;
|
||||
}
|
||||
if (!ctx_->sent_initial_metadata_) {
|
||||
ops.SendInitialMetadata(ctx_->initial_metadata_);
|
||||
ctx_->sent_initial_metadata_ = true;
|
||||
}
|
||||
call_->PerformOps(&ops);
|
||||
return call_->cq()->Pluck(&ops);
|
||||
}
|
||||
|
||||
private:
|
||||
Call* const call_;
|
||||
ServerContext* const ctx_;
|
||||
};
|
||||
|
||||
/// Server-side interface for bi-directional streaming.
|
||||
template <class W, class R>
|
||||
class ServerReaderWriter GRPC_FINAL : public WriterInterface<W>,
|
||||
public ReaderInterface<R> {
|
||||
public:
|
||||
ServerReaderWriter(Call* call, ServerContext* ctx) : call_(call), ctx_(ctx) {}
|
||||
|
||||
void SendInitialMetadata() {
|
||||
GPR_ASSERT(!ctx_->sent_initial_metadata_);
|
||||
|
||||
CallOpSet<CallOpSendInitialMetadata> ops;
|
||||
ops.SendInitialMetadata(ctx_->initial_metadata_);
|
||||
ctx_->sent_initial_metadata_ = true;
|
||||
call_->PerformOps(&ops);
|
||||
call_->cq()->Pluck(&ops);
|
||||
}
|
||||
|
||||
bool Read(R* msg) GRPC_OVERRIDE {
|
||||
CallOpSet<CallOpRecvMessage<R>> ops;
|
||||
ops.RecvMessage(msg);
|
||||
call_->PerformOps(&ops);
|
||||
return call_->cq()->Pluck(&ops) && ops.got_message;
|
||||
}
|
||||
|
||||
using WriterInterface<W>::Write;
|
||||
bool Write(const W& msg, const WriteOptions& options) GRPC_OVERRIDE {
|
||||
CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage> ops;
|
||||
if (!ops.SendMessage(msg, options).ok()) {
|
||||
return false;
|
||||
}
|
||||
if (!ctx_->sent_initial_metadata_) {
|
||||
ops.SendInitialMetadata(ctx_->initial_metadata_);
|
||||
ctx_->sent_initial_metadata_ = true;
|
||||
}
|
||||
call_->PerformOps(&ops);
|
||||
return call_->cq()->Pluck(&ops);
|
||||
}
|
||||
|
||||
private:
|
||||
Call* const call_;
|
||||
ServerContext* const ctx_;
|
||||
};
|
||||
|
||||
} // namespace grpc
|
||||
|
||||
#endif // GRPCXX_IMPL_CODEGEN_SYNC_STREAM_H
|
||||
|
|
@ -34,170 +34,6 @@
|
|||
#ifndef GRPCXX_IMPL_METHOD_HANDLER_IMPL_H
|
||||
#define GRPCXX_IMPL_METHOD_HANDLER_IMPL_H
|
||||
|
||||
#include <grpc++/impl/rpc_service_method.h>
|
||||
#include <grpc++/support/sync_stream.h>
|
||||
#include <grpc++/impl/codegen/method_handler_impl.h>
|
||||
|
||||
namespace grpc {
|
||||
|
||||
// A wrapper class of an application provided rpc method handler.
|
||||
template <class ServiceType, class RequestType, class ResponseType>
|
||||
class RpcMethodHandler : public MethodHandler {
|
||||
public:
|
||||
RpcMethodHandler(
|
||||
std::function<Status(ServiceType*, ServerContext*, const RequestType*,
|
||||
ResponseType*)> func,
|
||||
ServiceType* service)
|
||||
: func_(func), service_(service) {}
|
||||
|
||||
void RunHandler(const HandlerParameter& param) GRPC_FINAL {
|
||||
RequestType req;
|
||||
Status status = SerializationTraits<RequestType>::Deserialize(
|
||||
param.request, &req, param.max_message_size);
|
||||
ResponseType rsp;
|
||||
if (status.ok()) {
|
||||
status = func_(service_, param.server_context, &req, &rsp);
|
||||
}
|
||||
|
||||
GPR_ASSERT(!param.server_context->sent_initial_metadata_);
|
||||
CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage,
|
||||
CallOpServerSendStatus> ops;
|
||||
ops.SendInitialMetadata(param.server_context->initial_metadata_);
|
||||
if (status.ok()) {
|
||||
status = ops.SendMessage(rsp);
|
||||
}
|
||||
ops.ServerSendStatus(param.server_context->trailing_metadata_, status);
|
||||
param.call->PerformOps(&ops);
|
||||
param.call->cq()->Pluck(&ops);
|
||||
}
|
||||
|
||||
private:
|
||||
// Application provided rpc handler function.
|
||||
std::function<Status(ServiceType*, ServerContext*, const RequestType*,
|
||||
ResponseType*)> func_;
|
||||
// The class the above handler function lives in.
|
||||
ServiceType* service_;
|
||||
};
|
||||
|
||||
// A wrapper class of an application provided client streaming handler.
|
||||
template <class ServiceType, class RequestType, class ResponseType>
|
||||
class ClientStreamingHandler : public MethodHandler {
|
||||
public:
|
||||
ClientStreamingHandler(
|
||||
std::function<Status(ServiceType*, ServerContext*,
|
||||
ServerReader<RequestType>*, ResponseType*)> func,
|
||||
ServiceType* service)
|
||||
: func_(func), service_(service) {}
|
||||
|
||||
void RunHandler(const HandlerParameter& param) GRPC_FINAL {
|
||||
ServerReader<RequestType> reader(param.call, param.server_context);
|
||||
ResponseType rsp;
|
||||
Status status = func_(service_, param.server_context, &reader, &rsp);
|
||||
|
||||
GPR_ASSERT(!param.server_context->sent_initial_metadata_);
|
||||
CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage,
|
||||
CallOpServerSendStatus> ops;
|
||||
ops.SendInitialMetadata(param.server_context->initial_metadata_);
|
||||
if (status.ok()) {
|
||||
status = ops.SendMessage(rsp);
|
||||
}
|
||||
ops.ServerSendStatus(param.server_context->trailing_metadata_, status);
|
||||
param.call->PerformOps(&ops);
|
||||
param.call->cq()->Pluck(&ops);
|
||||
}
|
||||
|
||||
private:
|
||||
std::function<Status(ServiceType*, ServerContext*, ServerReader<RequestType>*,
|
||||
ResponseType*)> func_;
|
||||
ServiceType* service_;
|
||||
};
|
||||
|
||||
// A wrapper class of an application provided server streaming handler.
|
||||
template <class ServiceType, class RequestType, class ResponseType>
|
||||
class ServerStreamingHandler : public MethodHandler {
|
||||
public:
|
||||
ServerStreamingHandler(
|
||||
std::function<Status(ServiceType*, ServerContext*, const RequestType*,
|
||||
ServerWriter<ResponseType>*)> func,
|
||||
ServiceType* service)
|
||||
: func_(func), service_(service) {}
|
||||
|
||||
void RunHandler(const HandlerParameter& param) GRPC_FINAL {
|
||||
RequestType req;
|
||||
Status status = SerializationTraits<RequestType>::Deserialize(
|
||||
param.request, &req, param.max_message_size);
|
||||
|
||||
if (status.ok()) {
|
||||
ServerWriter<ResponseType> writer(param.call, param.server_context);
|
||||
status = func_(service_, param.server_context, &req, &writer);
|
||||
}
|
||||
|
||||
CallOpSet<CallOpSendInitialMetadata, CallOpServerSendStatus> ops;
|
||||
if (!param.server_context->sent_initial_metadata_) {
|
||||
ops.SendInitialMetadata(param.server_context->initial_metadata_);
|
||||
}
|
||||
ops.ServerSendStatus(param.server_context->trailing_metadata_, status);
|
||||
param.call->PerformOps(&ops);
|
||||
param.call->cq()->Pluck(&ops);
|
||||
}
|
||||
|
||||
private:
|
||||
std::function<Status(ServiceType*, ServerContext*, const RequestType*,
|
||||
ServerWriter<ResponseType>*)> func_;
|
||||
ServiceType* service_;
|
||||
};
|
||||
|
||||
// A wrapper class of an application provided bidi-streaming handler.
|
||||
template <class ServiceType, class RequestType, class ResponseType>
|
||||
class BidiStreamingHandler : public MethodHandler {
|
||||
public:
|
||||
BidiStreamingHandler(
|
||||
std::function<Status(ServiceType*, ServerContext*,
|
||||
ServerReaderWriter<ResponseType, RequestType>*)>
|
||||
func,
|
||||
ServiceType* service)
|
||||
: func_(func), service_(service) {}
|
||||
|
||||
void RunHandler(const HandlerParameter& param) GRPC_FINAL {
|
||||
ServerReaderWriter<ResponseType, RequestType> stream(param.call,
|
||||
param.server_context);
|
||||
Status status = func_(service_, param.server_context, &stream);
|
||||
|
||||
CallOpSet<CallOpSendInitialMetadata, CallOpServerSendStatus> ops;
|
||||
if (!param.server_context->sent_initial_metadata_) {
|
||||
ops.SendInitialMetadata(param.server_context->initial_metadata_);
|
||||
}
|
||||
ops.ServerSendStatus(param.server_context->trailing_metadata_, status);
|
||||
param.call->PerformOps(&ops);
|
||||
param.call->cq()->Pluck(&ops);
|
||||
}
|
||||
|
||||
private:
|
||||
std::function<Status(ServiceType*, ServerContext*,
|
||||
ServerReaderWriter<ResponseType, RequestType>*)> func_;
|
||||
ServiceType* service_;
|
||||
};
|
||||
|
||||
// Handle unknown method by returning UNIMPLEMENTED error.
|
||||
class UnknownMethodHandler : public MethodHandler {
|
||||
public:
|
||||
template <class T>
|
||||
static void FillOps(ServerContext* context, T* ops) {
|
||||
Status status(StatusCode::UNIMPLEMENTED, "");
|
||||
if (!context->sent_initial_metadata_) {
|
||||
ops->SendInitialMetadata(context->initial_metadata_);
|
||||
context->sent_initial_metadata_ = true;
|
||||
}
|
||||
ops->ServerSendStatus(context->trailing_metadata_, status);
|
||||
}
|
||||
|
||||
void RunHandler(const HandlerParameter& param) GRPC_FINAL {
|
||||
CallOpSet<CallOpSendInitialMetadata, CallOpServerSendStatus> ops;
|
||||
FillOps(param.server_context, &ops);
|
||||
param.call->PerformOps(&ops);
|
||||
param.call->cq()->Pluck(&ops);
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace grpc
|
||||
|
||||
#endif // GRPCXX_IMPL_METHOD_HANDLER_IMPL_H
|
||||
#endif // GRPCXX_IMPL_METHOD_HANDLER_IMPL_H
|
||||
|
|
|
|||
|
|
@ -34,40 +34,6 @@
|
|||
#ifndef GRPCXX_IMPL_RPC_METHOD_H
|
||||
#define GRPCXX_IMPL_RPC_METHOD_H
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include <grpc++/impl/codegen/channel_interface.h>
|
||||
|
||||
namespace grpc {
|
||||
|
||||
class RpcMethod {
|
||||
public:
|
||||
enum RpcType {
|
||||
NORMAL_RPC = 0,
|
||||
CLIENT_STREAMING, // request streaming
|
||||
SERVER_STREAMING, // response streaming
|
||||
BIDI_STREAMING
|
||||
};
|
||||
|
||||
RpcMethod(const char* name, RpcType type)
|
||||
: name_(name), method_type_(type), channel_tag_(NULL) {}
|
||||
|
||||
RpcMethod(const char* name, RpcType type,
|
||||
const std::shared_ptr<ChannelInterface>& channel)
|
||||
: name_(name),
|
||||
method_type_(type),
|
||||
channel_tag_(channel->RegisterMethod(name)) {}
|
||||
|
||||
const char* name() const { return name_; }
|
||||
RpcType method_type() const { return method_type_; }
|
||||
void* channel_tag() const { return channel_tag_; }
|
||||
|
||||
private:
|
||||
const char* const name_;
|
||||
const RpcType method_type_;
|
||||
void* const channel_tag_;
|
||||
};
|
||||
|
||||
} // namespace grpc
|
||||
#include <grpc++/impl/codegen/rpc_method.h>
|
||||
|
||||
#endif // GRPCXX_IMPL_RPC_METHOD_H
|
||||
|
|
|
|||
|
|
@ -34,59 +34,6 @@
|
|||
#ifndef GRPCXX_IMPL_RPC_SERVICE_METHOD_H
|
||||
#define GRPCXX_IMPL_RPC_SERVICE_METHOD_H
|
||||
|
||||
#include <climits>
|
||||
#include <functional>
|
||||
#include <map>
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
#include <grpc++/impl/rpc_method.h>
|
||||
#include <grpc++/support/config.h>
|
||||
#include <grpc++/support/status.h>
|
||||
|
||||
namespace grpc {
|
||||
class ServerContext;
|
||||
class StreamContextInterface;
|
||||
|
||||
// Base class for running an RPC handler.
|
||||
class MethodHandler {
|
||||
public:
|
||||
virtual ~MethodHandler() {}
|
||||
struct HandlerParameter {
|
||||
HandlerParameter(Call* c, ServerContext* context, grpc_byte_buffer* req,
|
||||
int max_size)
|
||||
: call(c),
|
||||
server_context(context),
|
||||
request(req),
|
||||
max_message_size(max_size) {}
|
||||
Call* call;
|
||||
ServerContext* server_context;
|
||||
// Handler required to grpc_byte_buffer_destroy this
|
||||
grpc_byte_buffer* request;
|
||||
int max_message_size;
|
||||
};
|
||||
virtual void RunHandler(const HandlerParameter& param) = 0;
|
||||
};
|
||||
|
||||
// Server side rpc method class
|
||||
class RpcServiceMethod : public RpcMethod {
|
||||
public:
|
||||
// Takes ownership of the handler
|
||||
RpcServiceMethod(const char* name, RpcMethod::RpcType type,
|
||||
MethodHandler* handler)
|
||||
: RpcMethod(name, type), server_tag_(nullptr), handler_(handler) {}
|
||||
|
||||
void set_server_tag(void* tag) { server_tag_ = tag; }
|
||||
void* server_tag() const { return server_tag_; }
|
||||
// if MethodHandler is nullptr, then this is an async method
|
||||
MethodHandler* handler() const { return handler_.get(); }
|
||||
void ResetHandler() { handler_.reset(); }
|
||||
|
||||
private:
|
||||
void* server_tag_;
|
||||
std::unique_ptr<MethodHandler> handler_;
|
||||
};
|
||||
|
||||
} // namespace grpc
|
||||
#include <grpc++/impl/codegen/rpc_service_method.h>
|
||||
|
||||
#endif // GRPCXX_IMPL_RPC_SERVICE_METHOD_H
|
||||
|
|
|
|||
|
|
@ -34,123 +34,6 @@
|
|||
#ifndef GRPCXX_SUPPORT_ASYNC_UNARY_CALL_H
|
||||
#define GRPCXX_SUPPORT_ASYNC_UNARY_CALL_H
|
||||
|
||||
#include <grpc/impl/codegen/log.h>
|
||||
#include <grpc++/impl/codegen/channel_interface.h>
|
||||
#include <grpc++/impl/codegen/client_context.h>
|
||||
#include <grpc++/impl/codegen/server_context.h>
|
||||
#include <grpc++/impl/codegen/call.h>
|
||||
#include <grpc++/impl/codegen/service_type.h>
|
||||
#include <grpc++/impl/codegen/status.h>
|
||||
|
||||
namespace grpc {
|
||||
|
||||
class CompletionQueue;
|
||||
|
||||
template <class R>
|
||||
class ClientAsyncResponseReaderInterface {
|
||||
public:
|
||||
virtual ~ClientAsyncResponseReaderInterface() {}
|
||||
virtual void ReadInitialMetadata(void* tag) = 0;
|
||||
virtual void Finish(R* msg, Status* status, void* tag) = 0;
|
||||
};
|
||||
|
||||
template <class R>
|
||||
class ClientAsyncResponseReader GRPC_FINAL
|
||||
: public ClientAsyncResponseReaderInterface<R> {
|
||||
public:
|
||||
template <class W>
|
||||
ClientAsyncResponseReader(ChannelInterface* channel, CompletionQueue* cq,
|
||||
const RpcMethod& method, ClientContext* context,
|
||||
const W& request)
|
||||
: context_(context), call_(channel->CreateCall(method, context, cq)) {
|
||||
init_buf_.SendInitialMetadata(context->send_initial_metadata_);
|
||||
// TODO(ctiller): don't assert
|
||||
GPR_ASSERT(init_buf_.SendMessage(request).ok());
|
||||
init_buf_.ClientSendClose();
|
||||
call_.PerformOps(&init_buf_);
|
||||
}
|
||||
|
||||
void ReadInitialMetadata(void* tag) {
|
||||
GPR_ASSERT(!context_->initial_metadata_received_);
|
||||
|
||||
meta_buf_.set_output_tag(tag);
|
||||
meta_buf_.RecvInitialMetadata(context_);
|
||||
call_.PerformOps(&meta_buf_);
|
||||
}
|
||||
|
||||
void Finish(R* msg, Status* status, void* tag) {
|
||||
finish_buf_.set_output_tag(tag);
|
||||
if (!context_->initial_metadata_received_) {
|
||||
finish_buf_.RecvInitialMetadata(context_);
|
||||
}
|
||||
finish_buf_.RecvMessage(msg);
|
||||
finish_buf_.ClientRecvStatus(context_, status);
|
||||
call_.PerformOps(&finish_buf_);
|
||||
}
|
||||
|
||||
private:
|
||||
ClientContext* context_;
|
||||
Call call_;
|
||||
SneakyCallOpSet<CallOpSendInitialMetadata, CallOpSendMessage,
|
||||
CallOpClientSendClose> init_buf_;
|
||||
CallOpSet<CallOpRecvInitialMetadata> meta_buf_;
|
||||
CallOpSet<CallOpRecvInitialMetadata, CallOpRecvMessage<R>,
|
||||
CallOpClientRecvStatus> finish_buf_;
|
||||
};
|
||||
|
||||
template <class W>
|
||||
class ServerAsyncResponseWriter GRPC_FINAL
|
||||
: public ServerAsyncStreamingInterface {
|
||||
public:
|
||||
explicit ServerAsyncResponseWriter(ServerContext* ctx)
|
||||
: call_(nullptr, nullptr, nullptr), ctx_(ctx) {}
|
||||
|
||||
void SendInitialMetadata(void* tag) GRPC_OVERRIDE {
|
||||
GPR_ASSERT(!ctx_->sent_initial_metadata_);
|
||||
|
||||
meta_buf_.set_output_tag(tag);
|
||||
meta_buf_.SendInitialMetadata(ctx_->initial_metadata_);
|
||||
ctx_->sent_initial_metadata_ = true;
|
||||
call_.PerformOps(&meta_buf_);
|
||||
}
|
||||
|
||||
void Finish(const W& msg, const Status& status, void* tag) {
|
||||
finish_buf_.set_output_tag(tag);
|
||||
if (!ctx_->sent_initial_metadata_) {
|
||||
finish_buf_.SendInitialMetadata(ctx_->initial_metadata_);
|
||||
ctx_->sent_initial_metadata_ = true;
|
||||
}
|
||||
// The response is dropped if the status is not OK.
|
||||
if (status.ok()) {
|
||||
finish_buf_.ServerSendStatus(ctx_->trailing_metadata_,
|
||||
finish_buf_.SendMessage(msg));
|
||||
} else {
|
||||
finish_buf_.ServerSendStatus(ctx_->trailing_metadata_, status);
|
||||
}
|
||||
call_.PerformOps(&finish_buf_);
|
||||
}
|
||||
|
||||
void FinishWithError(const Status& status, void* tag) {
|
||||
GPR_ASSERT(!status.ok());
|
||||
finish_buf_.set_output_tag(tag);
|
||||
if (!ctx_->sent_initial_metadata_) {
|
||||
finish_buf_.SendInitialMetadata(ctx_->initial_metadata_);
|
||||
ctx_->sent_initial_metadata_ = true;
|
||||
}
|
||||
finish_buf_.ServerSendStatus(ctx_->trailing_metadata_, status);
|
||||
call_.PerformOps(&finish_buf_);
|
||||
}
|
||||
|
||||
private:
|
||||
void BindCall(Call* call) GRPC_OVERRIDE { call_ = *call; }
|
||||
|
||||
Call call_;
|
||||
ServerContext* ctx_;
|
||||
CallOpSet<CallOpSendInitialMetadata> meta_buf_;
|
||||
CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage,
|
||||
CallOpServerSendStatus> finish_buf_;
|
||||
};
|
||||
|
||||
} // namespace grpc
|
||||
#include <grpc++/impl/codegen/async_unary_call.h>
|
||||
|
||||
#endif // GRPCXX_SUPPORT_ASYNC_UNARY_CALL_H
|
||||
|
|
|
|||
|
|
@ -34,383 +34,6 @@
|
|||
#ifndef GRPCXX_SUPPORT_SYNC_STREAM_H
|
||||
#define GRPCXX_SUPPORT_SYNC_STREAM_H
|
||||
|
||||
#include <grpc++/channel.h>
|
||||
#include <grpc++/client_context.h>
|
||||
#include <grpc++/completion_queue.h>
|
||||
#include <grpc++/impl/call.h>
|
||||
#include <grpc++/impl/codegen/channel_interface.h>
|
||||
#include <grpc++/impl/service_type.h>
|
||||
#include <grpc++/server_context.h>
|
||||
#include <grpc++/support/status.h>
|
||||
#include <grpc/support/log.h>
|
||||
|
||||
namespace grpc {
|
||||
|
||||
/// Common interface for all synchronous client side streaming.
|
||||
class ClientStreamingInterface {
|
||||
public:
|
||||
virtual ~ClientStreamingInterface() {}
|
||||
|
||||
/// Wait until the stream finishes, and return the final status. When the
|
||||
/// client side declares it has no more message to send, either implicitly or
|
||||
/// by calling \a WritesDone(), it needs to make sure there is no more message
|
||||
/// to be received from the server, either implicitly or by getting a false
|
||||
/// from a \a Read().
|
||||
///
|
||||
/// This function will return either:
|
||||
/// - when all incoming messages have been read and the server has returned
|
||||
/// status.
|
||||
/// - OR when the server has returned a non-OK status.
|
||||
virtual Status Finish() = 0;
|
||||
};
|
||||
|
||||
/// An interface that yields a sequence of messages of type \a R.
|
||||
template <class R>
|
||||
class ReaderInterface {
|
||||
public:
|
||||
virtual ~ReaderInterface() {}
|
||||
|
||||
/// Blocking read a message and parse to \a msg. Returns \a true on success.
|
||||
///
|
||||
/// \param[out] msg The read message.
|
||||
///
|
||||
/// \return \a false when there will be no more incoming messages, either
|
||||
/// because the other side has called \a WritesDone() or the stream has failed
|
||||
/// (or been cancelled).
|
||||
virtual bool Read(R* msg) = 0;
|
||||
};
|
||||
|
||||
/// An interface that can be fed a sequence of messages of type \a W.
|
||||
template <class W>
|
||||
class WriterInterface {
|
||||
public:
|
||||
virtual ~WriterInterface() {}
|
||||
|
||||
/// Blocking write \a msg to the stream with options.
|
||||
///
|
||||
/// \param msg The message to be written to the stream.
|
||||
/// \param options Options affecting the write operation.
|
||||
///
|
||||
/// \return \a true on success, \a false when the stream has been closed.
|
||||
virtual bool Write(const W& msg, const WriteOptions& options) = 0;
|
||||
|
||||
/// Blocking write \a msg to the stream with default options.
|
||||
///
|
||||
/// \param msg The message to be written to the stream.
|
||||
///
|
||||
/// \return \a true on success, \a false when the stream has been closed.
|
||||
inline bool Write(const W& msg) { return Write(msg, WriteOptions()); }
|
||||
};
|
||||
|
||||
/// Client-side interface for streaming reads of message of type \a R.
|
||||
template <class R>
|
||||
class ClientReaderInterface : public ClientStreamingInterface,
|
||||
public ReaderInterface<R> {
|
||||
public:
|
||||
/// Blocking wait for initial metadata from server. The received metadata
|
||||
/// can only be accessed after this call returns. Should only be called before
|
||||
/// the first read. Calling this method is optional, and if it is not called
|
||||
/// the metadata will be available in ClientContext after the first read.
|
||||
virtual void WaitForInitialMetadata() = 0;
|
||||
};
|
||||
|
||||
template <class R>
|
||||
class ClientReader GRPC_FINAL : public ClientReaderInterface<R> {
|
||||
public:
|
||||
/// Blocking create a stream and write the first request out.
|
||||
template <class W>
|
||||
ClientReader(ChannelInterface* channel, const RpcMethod& method,
|
||||
ClientContext* context, const W& request)
|
||||
: context_(context), call_(channel->CreateCall(method, context, &cq_)) {
|
||||
CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage,
|
||||
CallOpClientSendClose> ops;
|
||||
ops.SendInitialMetadata(context->send_initial_metadata_);
|
||||
// TODO(ctiller): don't assert
|
||||
GPR_ASSERT(ops.SendMessage(request).ok());
|
||||
ops.ClientSendClose();
|
||||
call_.PerformOps(&ops);
|
||||
cq_.Pluck(&ops);
|
||||
}
|
||||
|
||||
void WaitForInitialMetadata() GRPC_OVERRIDE {
|
||||
GPR_ASSERT(!context_->initial_metadata_received_);
|
||||
|
||||
CallOpSet<CallOpRecvInitialMetadata> ops;
|
||||
ops.RecvInitialMetadata(context_);
|
||||
call_.PerformOps(&ops);
|
||||
cq_.Pluck(&ops); /// status ignored
|
||||
}
|
||||
|
||||
bool Read(R* msg) GRPC_OVERRIDE {
|
||||
CallOpSet<CallOpRecvInitialMetadata, CallOpRecvMessage<R>> ops;
|
||||
if (!context_->initial_metadata_received_) {
|
||||
ops.RecvInitialMetadata(context_);
|
||||
}
|
||||
ops.RecvMessage(msg);
|
||||
call_.PerformOps(&ops);
|
||||
return cq_.Pluck(&ops) && ops.got_message;
|
||||
}
|
||||
|
||||
Status Finish() GRPC_OVERRIDE {
|
||||
CallOpSet<CallOpClientRecvStatus> ops;
|
||||
Status status;
|
||||
ops.ClientRecvStatus(context_, &status);
|
||||
call_.PerformOps(&ops);
|
||||
GPR_ASSERT(cq_.Pluck(&ops));
|
||||
return status;
|
||||
}
|
||||
|
||||
private:
|
||||
ClientContext* context_;
|
||||
CompletionQueue cq_;
|
||||
Call call_;
|
||||
};
|
||||
|
||||
/// Client-side interface for streaming writes of message of type \a W.
|
||||
template <class W>
|
||||
class ClientWriterInterface : public ClientStreamingInterface,
|
||||
public WriterInterface<W> {
|
||||
public:
|
||||
/// Half close writing from the client.
|
||||
/// Block until writes are completed.
|
||||
///
|
||||
/// \return Whether the writes were successful.
|
||||
virtual bool WritesDone() = 0;
|
||||
};
|
||||
|
||||
template <class W>
|
||||
class ClientWriter : public ClientWriterInterface<W> {
|
||||
public:
|
||||
/// Blocking create a stream.
|
||||
template <class R>
|
||||
ClientWriter(ChannelInterface* channel, const RpcMethod& method,
|
||||
ClientContext* context, R* response)
|
||||
: context_(context), call_(channel->CreateCall(method, context, &cq_)) {
|
||||
finish_ops_.RecvMessage(response);
|
||||
|
||||
CallOpSet<CallOpSendInitialMetadata> ops;
|
||||
ops.SendInitialMetadata(context->send_initial_metadata_);
|
||||
call_.PerformOps(&ops);
|
||||
cq_.Pluck(&ops);
|
||||
}
|
||||
|
||||
using WriterInterface<W>::Write;
|
||||
bool Write(const W& msg, const WriteOptions& options) GRPC_OVERRIDE {
|
||||
CallOpSet<CallOpSendMessage> ops;
|
||||
if (!ops.SendMessage(msg, options).ok()) {
|
||||
return false;
|
||||
}
|
||||
call_.PerformOps(&ops);
|
||||
return cq_.Pluck(&ops);
|
||||
}
|
||||
|
||||
bool WritesDone() GRPC_OVERRIDE {
|
||||
CallOpSet<CallOpClientSendClose> ops;
|
||||
ops.ClientSendClose();
|
||||
call_.PerformOps(&ops);
|
||||
return cq_.Pluck(&ops);
|
||||
}
|
||||
|
||||
/// Read the final response and wait for the final status.
|
||||
Status Finish() GRPC_OVERRIDE {
|
||||
Status status;
|
||||
finish_ops_.ClientRecvStatus(context_, &status);
|
||||
call_.PerformOps(&finish_ops_);
|
||||
GPR_ASSERT(cq_.Pluck(&finish_ops_));
|
||||
return status;
|
||||
}
|
||||
|
||||
private:
|
||||
ClientContext* context_;
|
||||
CallOpSet<CallOpGenericRecvMessage, CallOpClientRecvStatus> finish_ops_;
|
||||
CompletionQueue cq_;
|
||||
Call call_;
|
||||
};
|
||||
|
||||
/// Client-side interface for bi-directional streaming.
|
||||
template <class W, class R>
|
||||
class ClientReaderWriterInterface : public ClientStreamingInterface,
|
||||
public WriterInterface<W>,
|
||||
public ReaderInterface<R> {
|
||||
public:
|
||||
/// Blocking wait for initial metadata from server. The received metadata
|
||||
/// can only be accessed after this call returns. Should only be called before
|
||||
/// the first read. Calling this method is optional, and if it is not called
|
||||
/// the metadata will be available in ClientContext after the first read.
|
||||
virtual void WaitForInitialMetadata() = 0;
|
||||
|
||||
/// Block until writes are completed.
|
||||
///
|
||||
/// \return Whether the writes were successful.
|
||||
virtual bool WritesDone() = 0;
|
||||
};
|
||||
|
||||
template <class W, class R>
|
||||
class ClientReaderWriter GRPC_FINAL : public ClientReaderWriterInterface<W, R> {
|
||||
public:
|
||||
/// Blocking create a stream.
|
||||
ClientReaderWriter(ChannelInterface* channel, const RpcMethod& method,
|
||||
ClientContext* context)
|
||||
: context_(context), call_(channel->CreateCall(method, context, &cq_)) {
|
||||
CallOpSet<CallOpSendInitialMetadata> ops;
|
||||
ops.SendInitialMetadata(context->send_initial_metadata_);
|
||||
call_.PerformOps(&ops);
|
||||
cq_.Pluck(&ops);
|
||||
}
|
||||
|
||||
void WaitForInitialMetadata() GRPC_OVERRIDE {
|
||||
GPR_ASSERT(!context_->initial_metadata_received_);
|
||||
|
||||
CallOpSet<CallOpRecvInitialMetadata> ops;
|
||||
ops.RecvInitialMetadata(context_);
|
||||
call_.PerformOps(&ops);
|
||||
cq_.Pluck(&ops); // status ignored
|
||||
}
|
||||
|
||||
bool Read(R* msg) GRPC_OVERRIDE {
|
||||
CallOpSet<CallOpRecvInitialMetadata, CallOpRecvMessage<R>> ops;
|
||||
if (!context_->initial_metadata_received_) {
|
||||
ops.RecvInitialMetadata(context_);
|
||||
}
|
||||
ops.RecvMessage(msg);
|
||||
call_.PerformOps(&ops);
|
||||
return cq_.Pluck(&ops) && ops.got_message;
|
||||
}
|
||||
|
||||
using WriterInterface<W>::Write;
|
||||
bool Write(const W& msg, const WriteOptions& options) GRPC_OVERRIDE {
|
||||
CallOpSet<CallOpSendMessage> ops;
|
||||
if (!ops.SendMessage(msg, options).ok()) return false;
|
||||
call_.PerformOps(&ops);
|
||||
return cq_.Pluck(&ops);
|
||||
}
|
||||
|
||||
bool WritesDone() GRPC_OVERRIDE {
|
||||
CallOpSet<CallOpClientSendClose> ops;
|
||||
ops.ClientSendClose();
|
||||
call_.PerformOps(&ops);
|
||||
return cq_.Pluck(&ops);
|
||||
}
|
||||
|
||||
Status Finish() GRPC_OVERRIDE {
|
||||
CallOpSet<CallOpClientRecvStatus> ops;
|
||||
Status status;
|
||||
ops.ClientRecvStatus(context_, &status);
|
||||
call_.PerformOps(&ops);
|
||||
GPR_ASSERT(cq_.Pluck(&ops));
|
||||
return status;
|
||||
}
|
||||
|
||||
private:
|
||||
ClientContext* context_;
|
||||
CompletionQueue cq_;
|
||||
Call call_;
|
||||
};
|
||||
|
||||
template <class R>
|
||||
class ServerReader GRPC_FINAL : public ReaderInterface<R> {
|
||||
public:
|
||||
ServerReader(Call* call, ServerContext* ctx) : call_(call), ctx_(ctx) {}
|
||||
|
||||
void SendInitialMetadata() {
|
||||
GPR_ASSERT(!ctx_->sent_initial_metadata_);
|
||||
|
||||
CallOpSet<CallOpSendInitialMetadata> ops;
|
||||
ops.SendInitialMetadata(ctx_->initial_metadata_);
|
||||
ctx_->sent_initial_metadata_ = true;
|
||||
call_->PerformOps(&ops);
|
||||
call_->cq()->Pluck(&ops);
|
||||
}
|
||||
|
||||
bool Read(R* msg) GRPC_OVERRIDE {
|
||||
CallOpSet<CallOpRecvMessage<R>> ops;
|
||||
ops.RecvMessage(msg);
|
||||
call_->PerformOps(&ops);
|
||||
return call_->cq()->Pluck(&ops) && ops.got_message;
|
||||
}
|
||||
|
||||
private:
|
||||
Call* const call_;
|
||||
ServerContext* const ctx_;
|
||||
};
|
||||
|
||||
template <class W>
|
||||
class ServerWriter GRPC_FINAL : public WriterInterface<W> {
|
||||
public:
|
||||
ServerWriter(Call* call, ServerContext* ctx) : call_(call), ctx_(ctx) {}
|
||||
|
||||
void SendInitialMetadata() {
|
||||
GPR_ASSERT(!ctx_->sent_initial_metadata_);
|
||||
|
||||
CallOpSet<CallOpSendInitialMetadata> ops;
|
||||
ops.SendInitialMetadata(ctx_->initial_metadata_);
|
||||
ctx_->sent_initial_metadata_ = true;
|
||||
call_->PerformOps(&ops);
|
||||
call_->cq()->Pluck(&ops);
|
||||
}
|
||||
|
||||
using WriterInterface<W>::Write;
|
||||
bool Write(const W& msg, const WriteOptions& options) GRPC_OVERRIDE {
|
||||
CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage> ops;
|
||||
if (!ops.SendMessage(msg, options).ok()) {
|
||||
return false;
|
||||
}
|
||||
if (!ctx_->sent_initial_metadata_) {
|
||||
ops.SendInitialMetadata(ctx_->initial_metadata_);
|
||||
ctx_->sent_initial_metadata_ = true;
|
||||
}
|
||||
call_->PerformOps(&ops);
|
||||
return call_->cq()->Pluck(&ops);
|
||||
}
|
||||
|
||||
private:
|
||||
Call* const call_;
|
||||
ServerContext* const ctx_;
|
||||
};
|
||||
|
||||
/// Server-side interface for bi-directional streaming.
|
||||
template <class W, class R>
|
||||
class ServerReaderWriter GRPC_FINAL : public WriterInterface<W>,
|
||||
public ReaderInterface<R> {
|
||||
public:
|
||||
ServerReaderWriter(Call* call, ServerContext* ctx) : call_(call), ctx_(ctx) {}
|
||||
|
||||
void SendInitialMetadata() {
|
||||
GPR_ASSERT(!ctx_->sent_initial_metadata_);
|
||||
|
||||
CallOpSet<CallOpSendInitialMetadata> ops;
|
||||
ops.SendInitialMetadata(ctx_->initial_metadata_);
|
||||
ctx_->sent_initial_metadata_ = true;
|
||||
call_->PerformOps(&ops);
|
||||
call_->cq()->Pluck(&ops);
|
||||
}
|
||||
|
||||
bool Read(R* msg) GRPC_OVERRIDE {
|
||||
CallOpSet<CallOpRecvMessage<R>> ops;
|
||||
ops.RecvMessage(msg);
|
||||
call_->PerformOps(&ops);
|
||||
return call_->cq()->Pluck(&ops) && ops.got_message;
|
||||
}
|
||||
|
||||
using WriterInterface<W>::Write;
|
||||
bool Write(const W& msg, const WriteOptions& options) GRPC_OVERRIDE {
|
||||
CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage> ops;
|
||||
if (!ops.SendMessage(msg, options).ok()) {
|
||||
return false;
|
||||
}
|
||||
if (!ctx_->sent_initial_metadata_) {
|
||||
ops.SendInitialMetadata(ctx_->initial_metadata_);
|
||||
ctx_->sent_initial_metadata_ = true;
|
||||
}
|
||||
call_->PerformOps(&ops);
|
||||
return call_->cq()->Pluck(&ops);
|
||||
}
|
||||
|
||||
private:
|
||||
Call* const call_;
|
||||
ServerContext* const ctx_;
|
||||
};
|
||||
|
||||
} // namespace grpc
|
||||
#include <grpc++/impl/codegen/sync_stream.h>
|
||||
|
||||
#endif // GRPCXX_SUPPORT_SYNC_STREAM_H
|
||||
|
|
|
|||
|
|
@ -113,13 +113,13 @@ grpc::string GetHeaderIncludes(const grpc::protobuf::FileDescriptor *file,
|
|||
const Parameters ¶ms) {
|
||||
grpc::string temp =
|
||||
"#include <grpc++/impl/codegen/async_stream.h>\n"
|
||||
"#include <grpc++/impl/codegen/status.h>\n"
|
||||
"#include <grpc++/impl/codegen/service_type.h>\n"
|
||||
"#include <grpc++/impl/rpc_method.h>\n"
|
||||
"#include <grpc++/impl/codegen/async_unary_call.h>\n"
|
||||
"#include <grpc++/impl/codegen/proto_utils.h>\n"
|
||||
"#include <grpc++/support/async_unary_call.h>\n"
|
||||
"#include <grpc++/impl/codegen/rpc_method.h>\n"
|
||||
"#include <grpc++/impl/codegen/service_type.h>\n"
|
||||
"#include <grpc++/impl/codegen/status.h>\n"
|
||||
"#include <grpc++/impl/codegen/stub_options.h>\n"
|
||||
"#include <grpc++/support/sync_stream.h>\n"
|
||||
"#include <grpc++/impl/codegen/sync_stream.h>\n"
|
||||
"\n"
|
||||
"namespace grpc {\n"
|
||||
"class CompletionQueue;\n"
|
||||
|
|
@ -860,14 +860,16 @@ grpc::string GetSourceIncludes(const grpc::protobuf::FileDescriptor *file,
|
|||
grpc::protobuf::io::Printer printer(&output_stream, '$');
|
||||
std::map<grpc::string, grpc::string> vars;
|
||||
|
||||
printer.Print(vars, "#include <grpc++/impl/client_unary_call.h>\n");
|
||||
printer.Print(vars, "#include <grpc++/impl/method_handler_impl.h>\n");
|
||||
printer.Print(vars, "#include <grpc++/impl/rpc_service_method.h>\n");
|
||||
printer.Print(vars, "#include <grpc++/impl/codegen/service_type.h>\n");
|
||||
printer.Print(vars, "#include <grpc++/impl/codegen/channel_interface.h>\n");
|
||||
printer.Print(vars, "#include <grpc++/support/async_unary_call.h>\n");
|
||||
printer.Print(vars, "#include <grpc++/impl/codegen/async_stream.h>\n");
|
||||
printer.Print(vars, "#include <grpc++/support/sync_stream.h>\n");
|
||||
printer.Print(vars, "#include <grpc++/impl/codegen/async_unary_call.h>\n");
|
||||
printer.Print(vars, "#include <grpc++/impl/codegen/channel_interface.h>\n");
|
||||
printer.Print(vars, "#include <grpc++/impl/codegen/client_unary_call.h>\n");
|
||||
printer.Print(vars,
|
||||
"#include <grpc++/impl/codegen/method_handler_impl.h>\n");
|
||||
printer.Print(vars,
|
||||
"#include <grpc++/impl/codegen/rpc_service_method.h>\n");
|
||||
printer.Print(vars, "#include <grpc++/impl/codegen/service_type.h>\n");
|
||||
printer.Print(vars, "#include <grpc++/impl/codegen/sync_stream.h>\n");
|
||||
|
||||
if (!file->package().empty()) {
|
||||
std::vector<grpc::string> parts =
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@
|
|||
# for the list of possible encodings.
|
||||
# The default value is: UTF-8.
|
||||
|
||||
DOXYFILE_ENCODING = UTF - 8
|
||||
DOXYFILE_ENCODING = UTF-8
|
||||
|
||||
# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
|
||||
# double-quotes, unless you are using Doxywizard) that should identify the
|
||||
|
|
@ -34,34 +34,33 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# title of most generated pages and in a few other places.
|
||||
# The default value is: My Project.
|
||||
|
||||
PROJECT_NAME = "GRPC C++"
|
||||
PROJECT_NAME = "GRPC C++"
|
||||
|
||||
# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
|
||||
# could be handy for archiving the generated documentation or if some version
|
||||
# control system is used.
|
||||
|
||||
PROJECT_NUMBER = 0.12.0.0
|
||||
PROJECT_NUMBER = 0.12.0.0
|
||||
|
||||
# Using the PROJECT_BRIEF tag one can provide an optional one line description
|
||||
# for a project that appears at the top of each page and should give viewer a
|
||||
# quick idea about the purpose of the project. Keep the description short.
|
||||
|
||||
PROJECT_BRIEF =
|
||||
PROJECT_BRIEF =
|
||||
|
||||
# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
|
||||
# in the documentation. The maximum height of the logo should not exceed 55
|
||||
# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
|
||||
# the logo to the output directory.
|
||||
|
||||
PROJECT_LOGO =
|
||||
PROJECT_LOGO =
|
||||
|
||||
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
|
||||
# into which the generated documentation will be written. If a relative path is
|
||||
# entered, it will be relative to the location where doxygen was started. If
|
||||
# left blank the current directory will be used.
|
||||
|
||||
OUTPUT_DIRECTORY =
|
||||
doc / ref / c++
|
||||
OUTPUT_DIRECTORY = doc/ref/c++
|
||||
|
||||
# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
|
||||
# directories (in 2 levels) under the output directory of each output format and
|
||||
|
|
@ -71,7 +70,7 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# performance problems for the file system.
|
||||
# The default value is: NO.
|
||||
|
||||
CREATE_SUBDIRS = NO
|
||||
CREATE_SUBDIRS = NO
|
||||
|
||||
# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
|
||||
# characters to appear in the names of generated files. If set to NO, non-ASCII
|
||||
|
|
@ -79,7 +78,7 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# U+3044.
|
||||
# The default value is: NO.
|
||||
|
||||
ALLOW_UNICODE_NAMES = NO
|
||||
ALLOW_UNICODE_NAMES = NO
|
||||
|
||||
# The OUTPUT_LANGUAGE tag is used to specify the language in which all
|
||||
# documentation generated by doxygen is written. Doxygen will use this
|
||||
|
|
@ -94,14 +93,14 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# Ukrainian and Vietnamese.
|
||||
# The default value is: English.
|
||||
|
||||
OUTPUT_LANGUAGE = English
|
||||
OUTPUT_LANGUAGE = English
|
||||
|
||||
# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
|
||||
# descriptions after the members that are listed in the file and class
|
||||
# documentation (similar to Javadoc). Set to NO to disable this.
|
||||
# The default value is: YES.
|
||||
|
||||
BRIEF_MEMBER_DESC = YES
|
||||
BRIEF_MEMBER_DESC = YES
|
||||
|
||||
# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief
|
||||
# description of a member or function before the detailed description
|
||||
|
|
@ -110,7 +109,7 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# brief descriptions will be completely suppressed.
|
||||
# The default value is: YES.
|
||||
|
||||
REPEAT_BRIEF = YES
|
||||
REPEAT_BRIEF = YES
|
||||
|
||||
# This tag implements a quasi-intelligent brief description abbreviator that is
|
||||
# used to form the text in various listings. Each string in this list, if found
|
||||
|
|
@ -121,14 +120,14 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# the entity):The $name class, The $name widget, The $name file, is, provides,
|
||||
# specifies, contains, represents, a, an and the.
|
||||
|
||||
ABBREVIATE_BRIEF =
|
||||
ABBREVIATE_BRIEF =
|
||||
|
||||
# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
|
||||
# doxygen will generate a detailed section even if there is only a brief
|
||||
# description.
|
||||
# The default value is: NO.
|
||||
|
||||
ALWAYS_DETAILED_SEC = NO
|
||||
ALWAYS_DETAILED_SEC = NO
|
||||
|
||||
# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
|
||||
# inherited members of a class in the documentation of that class as if those
|
||||
|
|
@ -136,14 +135,14 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# operators of the base classes will not be shown.
|
||||
# The default value is: NO.
|
||||
|
||||
INLINE_INHERITED_MEMB = NO
|
||||
INLINE_INHERITED_MEMB = NO
|
||||
|
||||
# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path
|
||||
# before files name in the file list and in the header files. If set to NO the
|
||||
# shortest path that makes the file name unique will be used
|
||||
# The default value is: YES.
|
||||
|
||||
FULL_PATH_NAMES = YES
|
||||
FULL_PATH_NAMES = YES
|
||||
|
||||
# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
|
||||
# Stripping is only done if one of the specified strings matches the left-hand
|
||||
|
|
@ -155,7 +154,7 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# will be relative from the directory where doxygen is started.
|
||||
# This tag requires that the tag FULL_PATH_NAMES is set to YES.
|
||||
|
||||
STRIP_FROM_PATH =
|
||||
STRIP_FROM_PATH =
|
||||
|
||||
# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
|
||||
# path mentioned in the documentation of a class, which tells the reader which
|
||||
|
|
@ -164,14 +163,14 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# specify the list of include paths that are normally passed to the compiler
|
||||
# using the -I flag.
|
||||
|
||||
STRIP_FROM_INC_PATH =
|
||||
STRIP_FROM_INC_PATH =
|
||||
|
||||
# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
|
||||
# less readable) file names. This can be useful is your file systems doesn't
|
||||
# support long names like on DOS, Mac, or CD-ROM.
|
||||
# The default value is: NO.
|
||||
|
||||
SHORT_NAMES = NO
|
||||
SHORT_NAMES = NO
|
||||
|
||||
# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
|
||||
# first line (until the first dot) of a Javadoc-style comment as the brief
|
||||
|
|
@ -180,7 +179,7 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# description.)
|
||||
# The default value is: NO.
|
||||
|
||||
JAVADOC_AUTOBRIEF = YES
|
||||
JAVADOC_AUTOBRIEF = YES
|
||||
|
||||
# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
|
||||
# line (until the first dot) of a Qt-style comment as the brief description. If
|
||||
|
|
@ -188,7 +187,7 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# requiring an explicit \brief command for a brief description.)
|
||||
# The default value is: NO.
|
||||
|
||||
QT_AUTOBRIEF = NO
|
||||
QT_AUTOBRIEF = NO
|
||||
|
||||
# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
|
||||
# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
|
||||
|
|
@ -200,28 +199,26 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# not recognized any more.
|
||||
# The default value is: NO.
|
||||
|
||||
MULTILINE_CPP_IS_BRIEF = NO
|
||||
MULTILINE_CPP_IS_BRIEF = NO
|
||||
|
||||
# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
|
||||
# documentation from any documented member that it re-implements.
|
||||
# The default value is: YES.
|
||||
|
||||
INHERIT_DOCS = YES
|
||||
INHERIT_DOCS = YES
|
||||
|
||||
# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new
|
||||
# page for each member. If set to NO, the documentation of a member will be part
|
||||
# of the file/class/namespace that contains it.
|
||||
# The default value is: NO.
|
||||
|
||||
SEPARATE_MEMBER_PAGES =
|
||||
NO
|
||||
SEPARATE_MEMBER_PAGES = NO
|
||||
|
||||
# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
|
||||
# uses this value to replace tabs by spaces in code fragments.
|
||||
# Minimum value: 1, maximum value: 16, default value: 4.
|
||||
|
||||
TAB_SIZE =
|
||||
2
|
||||
TAB_SIZE = 2
|
||||
|
||||
# This tag can be used to specify a number of aliases that act as commands in
|
||||
# the documentation. An alias has the form:
|
||||
|
|
@ -233,13 +230,13 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# "Side Effects:". You can put \n's in the value part of an alias to insert
|
||||
# newlines.
|
||||
|
||||
ALIASES =
|
||||
ALIASES =
|
||||
|
||||
# This tag can be used to specify a number of word-keyword mappings (TCL only).
|
||||
# A mapping has the form "name=value". For example adding "class=itcl::class"
|
||||
# will allow you to use the command class in the itcl::class meaning.
|
||||
|
||||
TCL_SUBST =
|
||||
TCL_SUBST =
|
||||
|
||||
# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
|
||||
# only. Doxygen will then generate output that is more tailored for C. For
|
||||
|
|
@ -247,7 +244,7 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# members will be omitted, etc.
|
||||
# The default value is: NO.
|
||||
|
||||
OPTIMIZE_OUTPUT_FOR_C = YES
|
||||
OPTIMIZE_OUTPUT_FOR_C = YES
|
||||
|
||||
# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
|
||||
# Python sources only. Doxygen will then generate output that is more tailored
|
||||
|
|
@ -255,19 +252,19 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# qualified scopes will look different, etc.
|
||||
# The default value is: NO.
|
||||
|
||||
OPTIMIZE_OUTPUT_JAVA = NO
|
||||
OPTIMIZE_OUTPUT_JAVA = NO
|
||||
|
||||
# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
|
||||
# sources. Doxygen will then generate output that is tailored for Fortran.
|
||||
# The default value is: NO.
|
||||
|
||||
OPTIMIZE_FOR_FORTRAN = NO
|
||||
OPTIMIZE_FOR_FORTRAN = NO
|
||||
|
||||
# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
|
||||
# sources. Doxygen will then generate output that is tailored for VHDL.
|
||||
# The default value is: NO.
|
||||
|
||||
OPTIMIZE_OUTPUT_VHDL = NO
|
||||
OPTIMIZE_OUTPUT_VHDL = NO
|
||||
|
||||
# Doxygen selects the parser to use depending on the extension of the files it
|
||||
# parses. With this tag you can assign which parser to use for a given
|
||||
|
|
@ -286,7 +283,7 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
|
||||
# the files are not read by doxygen.
|
||||
|
||||
EXTENSION_MAPPING =
|
||||
EXTENSION_MAPPING =
|
||||
|
||||
# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
|
||||
# according to the Markdown format, which allows for more readable
|
||||
|
|
@ -296,7 +293,7 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# case of backward compatibilities issues.
|
||||
# The default value is: YES.
|
||||
|
||||
MARKDOWN_SUPPORT = YES
|
||||
MARKDOWN_SUPPORT = YES
|
||||
|
||||
# When enabled doxygen tries to link words that correspond to documented
|
||||
# classes, or namespaces to their corresponding documentation. Such a link can
|
||||
|
|
@ -304,7 +301,7 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# globally by setting AUTOLINK_SUPPORT to NO.
|
||||
# The default value is: YES.
|
||||
|
||||
AUTOLINK_SUPPORT = YES
|
||||
AUTOLINK_SUPPORT = YES
|
||||
|
||||
# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
|
||||
# to include (a tag file for) the STL sources as input, then you should set this
|
||||
|
|
@ -314,13 +311,13 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# diagrams that involve STL classes more complete and accurate.
|
||||
# The default value is: NO.
|
||||
|
||||
BUILTIN_STL_SUPPORT = NO
|
||||
BUILTIN_STL_SUPPORT = NO
|
||||
|
||||
# If you use Microsoft's C++/CLI language, you should set this option to YES to
|
||||
# enable parsing support.
|
||||
# The default value is: NO.
|
||||
|
||||
CPP_CLI_SUPPORT = NO
|
||||
CPP_CLI_SUPPORT = NO
|
||||
|
||||
# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
|
||||
# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
|
||||
|
|
@ -328,7 +325,7 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# of private inheritance when no explicit protection keyword is present.
|
||||
# The default value is: NO.
|
||||
|
||||
SIP_SUPPORT = NO
|
||||
SIP_SUPPORT = NO
|
||||
|
||||
# For Microsoft's IDL there are propget and propput attributes to indicate
|
||||
# getter and setter methods for a property. Setting this option to YES will make
|
||||
|
|
@ -338,7 +335,7 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# should set this option to NO.
|
||||
# The default value is: YES.
|
||||
|
||||
IDL_PROPERTY_SUPPORT = YES
|
||||
IDL_PROPERTY_SUPPORT = YES
|
||||
|
||||
# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
|
||||
# tag is set to YES then doxygen will reuse the documentation of the first
|
||||
|
|
@ -346,7 +343,7 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# all members of a group must be documented explicitly.
|
||||
# The default value is: NO.
|
||||
|
||||
DISTRIBUTE_GROUP_DOC = NO
|
||||
DISTRIBUTE_GROUP_DOC = NO
|
||||
|
||||
# Set the SUBGROUPING tag to YES to allow class member groups of the same type
|
||||
# (for instance a group of public functions) to be put as a subgroup of that
|
||||
|
|
@ -355,7 +352,7 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# \nosubgrouping command.
|
||||
# The default value is: YES.
|
||||
|
||||
SUBGROUPING = YES
|
||||
SUBGROUPING = YES
|
||||
|
||||
# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
|
||||
# are shown inside the group in which they are included (e.g. using \ingroup)
|
||||
|
|
@ -366,7 +363,7 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# SEPARATE_MEMBER_PAGES.
|
||||
# The default value is: NO.
|
||||
|
||||
INLINE_GROUPED_CLASSES = NO
|
||||
INLINE_GROUPED_CLASSES = NO
|
||||
|
||||
# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
|
||||
# with only public data fields or simple typedef fields will be shown inline in
|
||||
|
|
@ -376,7 +373,7 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# Man pages) or section (for LaTeX and RTF).
|
||||
# The default value is: NO.
|
||||
|
||||
INLINE_SIMPLE_STRUCTS = NO
|
||||
INLINE_SIMPLE_STRUCTS = NO
|
||||
|
||||
# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
|
||||
# enum is documented as struct, union, or enum with the name of the typedef. So
|
||||
|
|
@ -387,8 +384,7 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# types are typedef'ed and only the typedef is referenced, never the tag name.
|
||||
# The default value is: NO.
|
||||
|
||||
TYPEDEF_HIDES_STRUCT =
|
||||
NO
|
||||
TYPEDEF_HIDES_STRUCT = NO
|
||||
|
||||
# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
|
||||
# cache is used to resolve symbols given their name and scope. Since this can be
|
||||
|
|
@ -401,8 +397,7 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# the optimal cache size from a speed point of view.
|
||||
# Minimum value: 0, maximum value: 9, default value: 0.
|
||||
|
||||
LOOKUP_CACHE_SIZE =
|
||||
0
|
||||
LOOKUP_CACHE_SIZE = 0
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Build related configuration options
|
||||
|
|
@ -416,25 +411,25 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# normally produced when WARNINGS is set to YES.
|
||||
# The default value is: NO.
|
||||
|
||||
EXTRACT_ALL = YES
|
||||
EXTRACT_ALL = YES
|
||||
|
||||
# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
|
||||
# be included in the documentation.
|
||||
# The default value is: NO.
|
||||
|
||||
EXTRACT_PRIVATE = NO
|
||||
EXTRACT_PRIVATE = NO
|
||||
|
||||
# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
|
||||
# scope will be included in the documentation.
|
||||
# The default value is: NO.
|
||||
|
||||
EXTRACT_PACKAGE = NO
|
||||
EXTRACT_PACKAGE = NO
|
||||
|
||||
# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
|
||||
# included in the documentation.
|
||||
# The default value is: NO.
|
||||
|
||||
EXTRACT_STATIC = NO
|
||||
EXTRACT_STATIC = NO
|
||||
|
||||
# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
|
||||
# locally in source files will be included in the documentation. If set to NO,
|
||||
|
|
@ -442,7 +437,7 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# for Java sources.
|
||||
# The default value is: YES.
|
||||
|
||||
EXTRACT_LOCAL_CLASSES = YES
|
||||
EXTRACT_LOCAL_CLASSES = YES
|
||||
|
||||
# This flag is only useful for Objective-C code. If set to YES, local methods,
|
||||
# which are defined in the implementation section but not in the interface are
|
||||
|
|
@ -450,7 +445,7 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# included.
|
||||
# The default value is: NO.
|
||||
|
||||
EXTRACT_LOCAL_METHODS = NO
|
||||
EXTRACT_LOCAL_METHODS = NO
|
||||
|
||||
# If this flag is set to YES, the members of anonymous namespaces will be
|
||||
# extracted and appear in the documentation as a namespace called
|
||||
|
|
@ -459,7 +454,7 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# are hidden.
|
||||
# The default value is: NO.
|
||||
|
||||
EXTRACT_ANON_NSPACES = NO
|
||||
EXTRACT_ANON_NSPACES = NO
|
||||
|
||||
# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
|
||||
# undocumented members inside documented classes or files. If set to NO these
|
||||
|
|
@ -467,7 +462,7 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# section is generated. This option has no effect if EXTRACT_ALL is enabled.
|
||||
# The default value is: NO.
|
||||
|
||||
HIDE_UNDOC_MEMBERS = NO
|
||||
HIDE_UNDOC_MEMBERS = NO
|
||||
|
||||
# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
|
||||
# undocumented classes that are normally visible in the class hierarchy. If set
|
||||
|
|
@ -475,28 +470,28 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# has no effect if EXTRACT_ALL is enabled.
|
||||
# The default value is: NO.
|
||||
|
||||
HIDE_UNDOC_CLASSES = NO
|
||||
HIDE_UNDOC_CLASSES = NO
|
||||
|
||||
# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
|
||||
# (class|struct|union) declarations. If set to NO, these declarations will be
|
||||
# included in the documentation.
|
||||
# The default value is: NO.
|
||||
|
||||
HIDE_FRIEND_COMPOUNDS = NO
|
||||
HIDE_FRIEND_COMPOUNDS = NO
|
||||
|
||||
# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
|
||||
# documentation blocks found inside the body of a function. If set to NO, these
|
||||
# blocks will be appended to the function's detailed documentation block.
|
||||
# The default value is: NO.
|
||||
|
||||
HIDE_IN_BODY_DOCS = NO
|
||||
HIDE_IN_BODY_DOCS = NO
|
||||
|
||||
# The INTERNAL_DOCS tag determines if documentation that is typed after a
|
||||
# \internal command is included. If the tag is set to NO then the documentation
|
||||
# will be excluded. Set it to YES to include the internal documentation.
|
||||
# The default value is: NO.
|
||||
|
||||
INTERNAL_DOCS = NO
|
||||
INTERNAL_DOCS = NO
|
||||
|
||||
# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
|
||||
# names in lower-case letters. If set to YES, upper-case letters are also
|
||||
|
|
@ -505,53 +500,53 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# and Mac users are advised to set this option to NO.
|
||||
# The default value is: system dependent.
|
||||
|
||||
CASE_SENSE_NAMES = NO
|
||||
CASE_SENSE_NAMES = NO
|
||||
|
||||
# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
|
||||
# their full class and namespace scopes in the documentation. If set to YES, the
|
||||
# scope will be hidden.
|
||||
# The default value is: NO.
|
||||
|
||||
HIDE_SCOPE_NAMES = NO
|
||||
HIDE_SCOPE_NAMES = NO
|
||||
|
||||
# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
|
||||
# append additional text to a page's title, such as Class Reference. If set to
|
||||
# YES the compound reference will be hidden.
|
||||
# The default value is: NO.
|
||||
|
||||
HIDE_COMPOUND_REFERENCE = NO
|
||||
HIDE_COMPOUND_REFERENCE= NO
|
||||
|
||||
# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
|
||||
# the files that are included by a file in the documentation of that file.
|
||||
# The default value is: YES.
|
||||
|
||||
SHOW_INCLUDE_FILES = YES
|
||||
SHOW_INCLUDE_FILES = YES
|
||||
|
||||
# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
|
||||
# grouped member an include statement to the documentation, telling the reader
|
||||
# which file to include in order to use the member.
|
||||
# The default value is: NO.
|
||||
|
||||
SHOW_GROUPED_MEMB_INC = NO
|
||||
SHOW_GROUPED_MEMB_INC = NO
|
||||
|
||||
# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
|
||||
# files with double quotes in the documentation rather than with sharp brackets.
|
||||
# The default value is: NO.
|
||||
|
||||
FORCE_LOCAL_INCLUDES = NO
|
||||
FORCE_LOCAL_INCLUDES = NO
|
||||
|
||||
# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
|
||||
# documentation for inline members.
|
||||
# The default value is: YES.
|
||||
|
||||
INLINE_INFO = YES
|
||||
INLINE_INFO = YES
|
||||
|
||||
# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
|
||||
# (detailed) documentation of file and class members alphabetically by member
|
||||
# name. If set to NO, the members will appear in declaration order.
|
||||
# The default value is: YES.
|
||||
|
||||
SORT_MEMBER_DOCS = YES
|
||||
SORT_MEMBER_DOCS = YES
|
||||
|
||||
# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
|
||||
# descriptions of file, namespace and class members alphabetically by member
|
||||
|
|
@ -559,7 +554,7 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# this will also influence the order of the classes in the class list.
|
||||
# The default value is: NO.
|
||||
|
||||
SORT_BRIEF_DOCS = NO
|
||||
SORT_BRIEF_DOCS = NO
|
||||
|
||||
# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
|
||||
# (brief and detailed) documentation of class members so that constructors and
|
||||
|
|
@ -571,14 +566,14 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# detailed member documentation.
|
||||
# The default value is: NO.
|
||||
|
||||
SORT_MEMBERS_CTORS_1ST = NO
|
||||
SORT_MEMBERS_CTORS_1ST = NO
|
||||
|
||||
# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
|
||||
# of group names into alphabetical order. If set to NO the group names will
|
||||
# appear in their defined order.
|
||||
# The default value is: NO.
|
||||
|
||||
SORT_GROUP_NAMES = NO
|
||||
SORT_GROUP_NAMES = NO
|
||||
|
||||
# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
|
||||
# fully-qualified names, including namespaces. If set to NO, the class list will
|
||||
|
|
@ -588,7 +583,7 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# list.
|
||||
# The default value is: NO.
|
||||
|
||||
SORT_BY_SCOPE_NAME = NO
|
||||
SORT_BY_SCOPE_NAME = NO
|
||||
|
||||
# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
|
||||
# type resolution of all parameters of a function it will reject a match between
|
||||
|
|
@ -598,39 +593,38 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# accept a match between prototype and implementation in such cases.
|
||||
# The default value is: NO.
|
||||
|
||||
STRICT_PROTO_MATCHING = NO
|
||||
STRICT_PROTO_MATCHING = NO
|
||||
|
||||
# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
|
||||
# list. This list is created by putting \todo commands in the documentation.
|
||||
# The default value is: YES.
|
||||
|
||||
GENERATE_TODOLIST = YES
|
||||
GENERATE_TODOLIST = YES
|
||||
|
||||
# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
|
||||
# list. This list is created by putting \test commands in the documentation.
|
||||
# The default value is: YES.
|
||||
|
||||
GENERATE_TESTLIST = YES
|
||||
GENERATE_TESTLIST = YES
|
||||
|
||||
# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
|
||||
# list. This list is created by putting \bug commands in the documentation.
|
||||
# The default value is: YES.
|
||||
|
||||
GENERATE_BUGLIST = YES
|
||||
GENERATE_BUGLIST = YES
|
||||
|
||||
# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
|
||||
# the deprecated list. This list is created by putting \deprecated commands in
|
||||
# the documentation.
|
||||
# The default value is: YES.
|
||||
|
||||
GENERATE_DEPRECATEDLIST =
|
||||
YES
|
||||
GENERATE_DEPRECATEDLIST= YES
|
||||
|
||||
# The ENABLED_SECTIONS tag can be used to enable conditional documentation
|
||||
# sections, marked by \if <section_label> ... \endif and \cond <section_label>
|
||||
# ... \endcond blocks.
|
||||
|
||||
ENABLED_SECTIONS =
|
||||
ENABLED_SECTIONS =
|
||||
|
||||
# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
|
||||
# initial value of a variable or macro / define can have for it to appear in the
|
||||
|
|
@ -641,29 +635,28 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# documentation regardless of this setting.
|
||||
# Minimum value: 0, maximum value: 10000, default value: 30.
|
||||
|
||||
MAX_INITIALIZER_LINES =
|
||||
30
|
||||
MAX_INITIALIZER_LINES = 30
|
||||
|
||||
# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
|
||||
# the bottom of the documentation of classes and structs. If set to YES, the
|
||||
# list will mention the files that were used to generate the documentation.
|
||||
# The default value is: YES.
|
||||
|
||||
SHOW_USED_FILES = YES
|
||||
SHOW_USED_FILES = YES
|
||||
|
||||
# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
|
||||
# will remove the Files entry from the Quick Index and from the Folder Tree View
|
||||
# (if specified).
|
||||
# The default value is: YES.
|
||||
|
||||
SHOW_FILES = YES
|
||||
SHOW_FILES = YES
|
||||
|
||||
# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
|
||||
# page. This will remove the Namespaces entry from the Quick Index and from the
|
||||
# Folder Tree View (if specified).
|
||||
# The default value is: YES.
|
||||
|
||||
SHOW_NAMESPACES = YES
|
||||
SHOW_NAMESPACES = YES
|
||||
|
||||
# The FILE_VERSION_FILTER tag can be used to specify a program or script that
|
||||
# doxygen should invoke to get the current version for each file (typically from
|
||||
|
|
@ -673,7 +666,7 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# by doxygen. Whatever the program writes to standard output is used as the file
|
||||
# version. For an example see the documentation.
|
||||
|
||||
FILE_VERSION_FILTER =
|
||||
FILE_VERSION_FILTER =
|
||||
|
||||
# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
|
||||
# by doxygen. The layout file controls the global structure of the generated
|
||||
|
|
@ -686,7 +679,7 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
|
||||
# tag is left empty.
|
||||
|
||||
LAYOUT_FILE =
|
||||
LAYOUT_FILE =
|
||||
|
||||
# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
|
||||
# the reference definitions. This must be a list of .bib files. The .bib
|
||||
|
|
@ -696,7 +689,7 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
|
||||
# search path. See also \cite for info how to create references.
|
||||
|
||||
CITE_BIB_FILES =
|
||||
CITE_BIB_FILES =
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to warning and progress messages
|
||||
|
|
@ -707,7 +700,7 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# messages are off.
|
||||
# The default value is: NO.
|
||||
|
||||
QUIET = NO
|
||||
QUIET = NO
|
||||
|
||||
# The WARNINGS tag can be used to turn on/off the warning messages that are
|
||||
# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
|
||||
|
|
@ -716,14 +709,14 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# Tip: Turn warnings on while writing the documentation.
|
||||
# The default value is: YES.
|
||||
|
||||
WARNINGS = YES
|
||||
WARNINGS = YES
|
||||
|
||||
# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate
|
||||
# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
|
||||
# will automatically be disabled.
|
||||
# The default value is: YES.
|
||||
|
||||
WARN_IF_UNDOCUMENTED = YES
|
||||
WARN_IF_UNDOCUMENTED = YES
|
||||
|
||||
# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
|
||||
# potential errors in the documentation, such as not documenting some parameters
|
||||
|
|
@ -731,7 +724,7 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# markup commands wrongly.
|
||||
# The default value is: YES.
|
||||
|
||||
WARN_IF_DOC_ERROR = YES
|
||||
WARN_IF_DOC_ERROR = YES
|
||||
|
||||
# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
|
||||
# are documented, but have no documentation for their parameters or return
|
||||
|
|
@ -739,7 +732,7 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# parameter documentation, but not about the absence of documentation.
|
||||
# The default value is: NO.
|
||||
|
||||
WARN_NO_PARAMDOC = NO
|
||||
WARN_NO_PARAMDOC = NO
|
||||
|
||||
# The WARN_FORMAT tag determines the format of the warning messages that doxygen
|
||||
# can produce. The string should contain the $file, $line, and $text tags, which
|
||||
|
|
@ -749,14 +742,13 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# FILE_VERSION_FILTER)
|
||||
# The default value is: $file:$line: $text.
|
||||
|
||||
WARN_FORMAT =
|
||||
"$file:$line: $text"
|
||||
WARN_FORMAT = "$file:$line: $text"
|
||||
|
||||
# The WARN_LOGFILE tag can be used to specify a file to which warning and error
|
||||
# messages should be written. If left blank the output is written to standard
|
||||
# error (stderr).
|
||||
|
||||
WARN_LOGFILE =
|
||||
WARN_LOGFILE =
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the input files
|
||||
|
|
@ -768,60 +760,79 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# spaces.
|
||||
# Note: If this tag is empty the current directory is searched.
|
||||
|
||||
INPUT =
|
||||
include / grpc++ / channel.h include / grpc++ /
|
||||
client_context.h include / grpc++ / completion_queue.h include /
|
||||
grpc++ / create_channel.h include / grpc++ / generic /
|
||||
async_generic_service.h include / grpc++ / generic /
|
||||
generic_stub.h include / grpc++ / grpc++.h include / grpc++ / impl /
|
||||
call.h include / grpc++ / impl / client_unary_call.h include /
|
||||
grpc++ / impl / grpc_library.h include / grpc++ / impl /
|
||||
method_handler_impl.h include / grpc++ / impl /
|
||||
proto_utils.h include / grpc++ / impl / rpc_method.h include /
|
||||
grpc++ / impl / rpc_service_method.h include / grpc++ / impl /
|
||||
serialization_traits.h include / grpc++ / impl /
|
||||
server_builder_option.h include / grpc++ / impl /
|
||||
service_type.h include / grpc++ / impl / sync.h include / grpc++ /
|
||||
impl / sync_cxx11.h include / grpc++ / impl /
|
||||
sync_no_cxx11.h include / grpc++ / impl / thd.h include / grpc++ /
|
||||
impl / thd_cxx11.h include / grpc++ / impl /
|
||||
thd_no_cxx11.h include / grpc++ / security /
|
||||
auth_context.h include / grpc++ / security /
|
||||
auth_metadata_processor.h include / grpc++ / security /
|
||||
credentials.h include / grpc++ / security /
|
||||
server_credentials.h include / grpc++ / server.h include / grpc++ /
|
||||
server_builder.h include / grpc++ / server_context.h include /
|
||||
grpc++ / support / async_stream.h include / grpc++ / support /
|
||||
async_unary_call.h include / grpc++ / support /
|
||||
byte_buffer.h include / grpc++ / support /
|
||||
channel_arguments.h include / grpc++ / support / config.h include /
|
||||
grpc++ / support / config_protobuf.h include / grpc++ / support /
|
||||
slice.h include / grpc++ / support / status.h include / grpc++ /
|
||||
support / status_code_enum.h include / grpc++ / support /
|
||||
string_ref.h include / grpc++ / support / stub_options.h include /
|
||||
grpc++ / support / sync_stream.h include / grpc++ / support /
|
||||
time.h include / grpc++ / impl / codegen / async_stream.h include /
|
||||
grpc++ / impl / codegen / call.h include / grpc++ / impl / codegen /
|
||||
call_hook.h include / grpc++ / impl / codegen /
|
||||
channel_interface.h include / grpc++ / impl / codegen /
|
||||
client_context.h include / grpc++ / impl / codegen /
|
||||
completion_queue_tag.h include / grpc++ / impl / codegen /
|
||||
config.h include / grpc++ / impl / codegen /
|
||||
config_protobuf.h include / grpc++ / impl / codegen /
|
||||
grpc_library.h include / grpc++ / impl / codegen /
|
||||
proto_utils.h include / grpc++ / impl / codegen / security /
|
||||
auth_context.h include / grpc++ / impl / codegen /
|
||||
serialization_traits.h include / grpc++ / impl / codegen /
|
||||
server_context.h include / grpc++ / impl / codegen /
|
||||
server_interface.h include / grpc++ / impl / codegen /
|
||||
service_type.h include / grpc++ / impl / codegen /
|
||||
status.h include / grpc++ / impl / codegen /
|
||||
status_code_enum.h include / grpc++ / impl / codegen /
|
||||
string_ref.h include / grpc++ / impl / codegen /
|
||||
stub_options.h include / grpc++ / impl / codegen / sync.h include /
|
||||
grpc++ / impl / codegen / sync_cxx11.h include / grpc++ / impl /
|
||||
codegen / sync_no_cxx11.h include / grpc++ / impl / codegen /
|
||||
time.h
|
||||
INPUT = include/grpc++/channel.h \
|
||||
include/grpc++/client_context.h \
|
||||
include/grpc++/completion_queue.h \
|
||||
include/grpc++/create_channel.h \
|
||||
include/grpc++/generic/async_generic_service.h \
|
||||
include/grpc++/generic/generic_stub.h \
|
||||
include/grpc++/grpc++.h \
|
||||
include/grpc++/impl/call.h \
|
||||
include/grpc++/impl/client_unary_call.h \
|
||||
include/grpc++/impl/grpc_library.h \
|
||||
include/grpc++/impl/method_handler_impl.h \
|
||||
include/grpc++/impl/proto_utils.h \
|
||||
include/grpc++/impl/rpc_method.h \
|
||||
include/grpc++/impl/rpc_service_method.h \
|
||||
include/grpc++/impl/serialization_traits.h \
|
||||
include/grpc++/impl/server_builder_option.h \
|
||||
include/grpc++/impl/service_type.h \
|
||||
include/grpc++/impl/sync.h \
|
||||
include/grpc++/impl/sync_cxx11.h \
|
||||
include/grpc++/impl/sync_no_cxx11.h \
|
||||
include/grpc++/impl/thd.h \
|
||||
include/grpc++/impl/thd_cxx11.h \
|
||||
include/grpc++/impl/thd_no_cxx11.h \
|
||||
include/grpc++/security/auth_context.h \
|
||||
include/grpc++/security/auth_metadata_processor.h \
|
||||
include/grpc++/security/credentials.h \
|
||||
include/grpc++/security/server_credentials.h \
|
||||
include/grpc++/server.h \
|
||||
include/grpc++/server_builder.h \
|
||||
include/grpc++/server_context.h \
|
||||
include/grpc++/support/async_stream.h \
|
||||
include/grpc++/support/async_unary_call.h \
|
||||
include/grpc++/support/byte_buffer.h \
|
||||
include/grpc++/support/channel_arguments.h \
|
||||
include/grpc++/support/config.h \
|
||||
include/grpc++/support/config_protobuf.h \
|
||||
include/grpc++/support/slice.h \
|
||||
include/grpc++/support/status.h \
|
||||
include/grpc++/support/status_code_enum.h \
|
||||
include/grpc++/support/string_ref.h \
|
||||
include/grpc++/support/stub_options.h \
|
||||
include/grpc++/support/sync_stream.h \
|
||||
include/grpc++/support/time.h \
|
||||
include/grpc++/impl/codegen/async_stream.h \
|
||||
include/grpc++/impl/codegen/async_unary_call.h \
|
||||
include/grpc++/impl/codegen/call.h \
|
||||
include/grpc++/impl/codegen/call_hook.h \
|
||||
include/grpc++/impl/codegen/channel_interface.h \
|
||||
include/grpc++/impl/codegen/client_context.h \
|
||||
include/grpc++/impl/codegen/client_unary_call.h \
|
||||
include/grpc++/impl/codegen/completion_queue.h \
|
||||
include/grpc++/impl/codegen/completion_queue_tag.h \
|
||||
include/grpc++/impl/codegen/config.h \
|
||||
include/grpc++/impl/codegen/config_protobuf.h \
|
||||
include/grpc++/impl/codegen/grpc_library.h \
|
||||
include/grpc++/impl/codegen/method_handler_impl.h \
|
||||
include/grpc++/impl/codegen/proto_utils.h \
|
||||
include/grpc++/impl/codegen/rpc_method.h \
|
||||
include/grpc++/impl/codegen/rpc_service_method.h \
|
||||
include/grpc++/impl/codegen/security/auth_context.h \
|
||||
include/grpc++/impl/codegen/serialization_traits.h \
|
||||
include/grpc++/impl/codegen/server_context.h \
|
||||
include/grpc++/impl/codegen/server_interface.h \
|
||||
include/grpc++/impl/codegen/service_type.h \
|
||||
include/grpc++/impl/codegen/status.h \
|
||||
include/grpc++/impl/codegen/status_code_enum.h \
|
||||
include/grpc++/impl/codegen/string_ref.h \
|
||||
include/grpc++/impl/codegen/stub_options.h \
|
||||
include/grpc++/impl/codegen/sync.h \
|
||||
include/grpc++/impl/codegen/sync_cxx11.h \
|
||||
include/grpc++/impl/codegen/sync_no_cxx11.h \
|
||||
include/grpc++/impl/codegen/sync_stream.h \
|
||||
include/grpc++/impl/codegen/time.h
|
||||
|
||||
# This tag can be used to specify the character encoding of the source files
|
||||
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
|
||||
|
|
@ -830,7 +841,7 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# possible encodings.
|
||||
# The default value is: UTF-8.
|
||||
|
||||
INPUT_ENCODING = UTF - 8
|
||||
INPUT_ENCODING = UTF-8
|
||||
|
||||
# If the value of the INPUT tag contains directories, you can use the
|
||||
# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
|
||||
|
|
@ -841,13 +852,13 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf,
|
||||
# *.qsf, *.as and *.js.
|
||||
|
||||
FILE_PATTERNS =
|
||||
FILE_PATTERNS =
|
||||
|
||||
# The RECURSIVE tag can be used to specify whether or not subdirectories should
|
||||
# be searched for input files as well.
|
||||
# The default value is: NO.
|
||||
|
||||
RECURSIVE = NO
|
||||
RECURSIVE = NO
|
||||
|
||||
# The EXCLUDE tag can be used to specify files and/or directories that should be
|
||||
# excluded from the INPUT source files. This way you can easily exclude a
|
||||
|
|
@ -856,14 +867,14 @@ DOXYFILE_ENCODING = UTF - 8
|
|||
# Note that relative paths are relative to the directory from which doxygen is
|
||||
# run.
|
||||
|
||||
EXCLUDE =
|
||||
EXCLUDE =
|
||||
|
||||
# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
|
||||
# directories that are symbolic links (a Unix file system feature) are excluded
|
||||
# from the input.
|
||||
# The default value is: NO.
|
||||
|
||||
EXCLUDE_SYMLINKS = NO
|
||||
EXCLUDE_SYMLINKS = NO
|
||||
|
||||
# If the value of the INPUT tag contains directories, you can use the
|
||||
# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
|
||||
|
|
|
|||
|
|
@ -804,15 +804,21 @@ include/grpc++/support/stub_options.h \
|
|||
include/grpc++/support/sync_stream.h \
|
||||
include/grpc++/support/time.h \
|
||||
include/grpc++/impl/codegen/async_stream.h \
|
||||
include/grpc++/impl/codegen/async_unary_call.h \
|
||||
include/grpc++/impl/codegen/call.h \
|
||||
include/grpc++/impl/codegen/call_hook.h \
|
||||
include/grpc++/impl/codegen/channel_interface.h \
|
||||
include/grpc++/impl/codegen/client_context.h \
|
||||
include/grpc++/impl/codegen/client_unary_call.h \
|
||||
include/grpc++/impl/codegen/completion_queue.h \
|
||||
include/grpc++/impl/codegen/completion_queue_tag.h \
|
||||
include/grpc++/impl/codegen/config.h \
|
||||
include/grpc++/impl/codegen/config_protobuf.h \
|
||||
include/grpc++/impl/codegen/grpc_library.h \
|
||||
include/grpc++/impl/codegen/method_handler_impl.h \
|
||||
include/grpc++/impl/codegen/proto_utils.h \
|
||||
include/grpc++/impl/codegen/rpc_method.h \
|
||||
include/grpc++/impl/codegen/rpc_service_method.h \
|
||||
include/grpc++/impl/codegen/security/auth_context.h \
|
||||
include/grpc++/impl/codegen/serialization_traits.h \
|
||||
include/grpc++/impl/codegen/server_context.h \
|
||||
|
|
@ -825,6 +831,7 @@ include/grpc++/impl/codegen/stub_options.h \
|
|||
include/grpc++/impl/codegen/sync.h \
|
||||
include/grpc++/impl/codegen/sync_cxx11.h \
|
||||
include/grpc++/impl/codegen/sync_no_cxx11.h \
|
||||
include/grpc++/impl/codegen/sync_stream.h \
|
||||
include/grpc++/impl/codegen/time.h \
|
||||
src/cpp/client/secure_credentials.h \
|
||||
src/cpp/common/secure_auth_context.h \
|
||||
|
|
|
|||
|
|
@ -3901,15 +3901,21 @@
|
|||
"include/grpc++/impl/call.h",
|
||||
"include/grpc++/impl/client_unary_call.h",
|
||||
"include/grpc++/impl/codegen/async_stream.h",
|
||||
"include/grpc++/impl/codegen/async_unary_call.h",
|
||||
"include/grpc++/impl/codegen/call.h",
|
||||
"include/grpc++/impl/codegen/call_hook.h",
|
||||
"include/grpc++/impl/codegen/channel_interface.h",
|
||||
"include/grpc++/impl/codegen/client_context.h",
|
||||
"include/grpc++/impl/codegen/client_unary_call.h",
|
||||
"include/grpc++/impl/codegen/completion_queue.h",
|
||||
"include/grpc++/impl/codegen/completion_queue_tag.h",
|
||||
"include/grpc++/impl/codegen/config.h",
|
||||
"include/grpc++/impl/codegen/config_protobuf.h",
|
||||
"include/grpc++/impl/codegen/grpc_library.h",
|
||||
"include/grpc++/impl/codegen/method_handler_impl.h",
|
||||
"include/grpc++/impl/codegen/proto_utils.h",
|
||||
"include/grpc++/impl/codegen/rpc_method.h",
|
||||
"include/grpc++/impl/codegen/rpc_service_method.h",
|
||||
"include/grpc++/impl/codegen/security/auth_context.h",
|
||||
"include/grpc++/impl/codegen/serialization_traits.h",
|
||||
"include/grpc++/impl/codegen/server_context.h",
|
||||
|
|
@ -3922,6 +3928,7 @@
|
|||
"include/grpc++/impl/codegen/sync.h",
|
||||
"include/grpc++/impl/codegen/sync_cxx11.h",
|
||||
"include/grpc++/impl/codegen/sync_no_cxx11.h",
|
||||
"include/grpc++/impl/codegen/sync_stream.h",
|
||||
"include/grpc++/impl/codegen/time.h",
|
||||
"include/grpc++/impl/grpc_library.h",
|
||||
"include/grpc++/impl/method_handler_impl.h",
|
||||
|
|
@ -3979,15 +3986,21 @@
|
|||
"include/grpc++/impl/call.h",
|
||||
"include/grpc++/impl/client_unary_call.h",
|
||||
"include/grpc++/impl/codegen/async_stream.h",
|
||||
"include/grpc++/impl/codegen/async_unary_call.h",
|
||||
"include/grpc++/impl/codegen/call.h",
|
||||
"include/grpc++/impl/codegen/call_hook.h",
|
||||
"include/grpc++/impl/codegen/channel_interface.h",
|
||||
"include/grpc++/impl/codegen/client_context.h",
|
||||
"include/grpc++/impl/codegen/client_unary_call.h",
|
||||
"include/grpc++/impl/codegen/completion_queue.h",
|
||||
"include/grpc++/impl/codegen/completion_queue_tag.h",
|
||||
"include/grpc++/impl/codegen/config.h",
|
||||
"include/grpc++/impl/codegen/config_protobuf.h",
|
||||
"include/grpc++/impl/codegen/grpc_library.h",
|
||||
"include/grpc++/impl/codegen/method_handler_impl.h",
|
||||
"include/grpc++/impl/codegen/proto_utils.h",
|
||||
"include/grpc++/impl/codegen/rpc_method.h",
|
||||
"include/grpc++/impl/codegen/rpc_service_method.h",
|
||||
"include/grpc++/impl/codegen/security/auth_context.h",
|
||||
"include/grpc++/impl/codegen/serialization_traits.h",
|
||||
"include/grpc++/impl/codegen/server_context.h",
|
||||
|
|
@ -4000,6 +4013,7 @@
|
|||
"include/grpc++/impl/codegen/sync.h",
|
||||
"include/grpc++/impl/codegen/sync_cxx11.h",
|
||||
"include/grpc++/impl/codegen/sync_no_cxx11.h",
|
||||
"include/grpc++/impl/codegen/sync_stream.h",
|
||||
"include/grpc++/impl/codegen/time.h",
|
||||
"include/grpc++/impl/grpc_library.h",
|
||||
"include/grpc++/impl/method_handler_impl.h",
|
||||
|
|
@ -4143,15 +4157,21 @@
|
|||
"include/grpc++/impl/call.h",
|
||||
"include/grpc++/impl/client_unary_call.h",
|
||||
"include/grpc++/impl/codegen/async_stream.h",
|
||||
"include/grpc++/impl/codegen/async_unary_call.h",
|
||||
"include/grpc++/impl/codegen/call.h",
|
||||
"include/grpc++/impl/codegen/call_hook.h",
|
||||
"include/grpc++/impl/codegen/channel_interface.h",
|
||||
"include/grpc++/impl/codegen/client_context.h",
|
||||
"include/grpc++/impl/codegen/client_unary_call.h",
|
||||
"include/grpc++/impl/codegen/completion_queue.h",
|
||||
"include/grpc++/impl/codegen/completion_queue_tag.h",
|
||||
"include/grpc++/impl/codegen/config.h",
|
||||
"include/grpc++/impl/codegen/config_protobuf.h",
|
||||
"include/grpc++/impl/codegen/grpc_library.h",
|
||||
"include/grpc++/impl/codegen/method_handler_impl.h",
|
||||
"include/grpc++/impl/codegen/proto_utils.h",
|
||||
"include/grpc++/impl/codegen/rpc_method.h",
|
||||
"include/grpc++/impl/codegen/rpc_service_method.h",
|
||||
"include/grpc++/impl/codegen/security/auth_context.h",
|
||||
"include/grpc++/impl/codegen/serialization_traits.h",
|
||||
"include/grpc++/impl/codegen/server_context.h",
|
||||
|
|
@ -4164,6 +4184,7 @@
|
|||
"include/grpc++/impl/codegen/sync.h",
|
||||
"include/grpc++/impl/codegen/sync_cxx11.h",
|
||||
"include/grpc++/impl/codegen/sync_no_cxx11.h",
|
||||
"include/grpc++/impl/codegen/sync_stream.h",
|
||||
"include/grpc++/impl/codegen/time.h",
|
||||
"include/grpc++/impl/grpc_library.h",
|
||||
"include/grpc++/impl/method_handler_impl.h",
|
||||
|
|
@ -4218,15 +4239,21 @@
|
|||
"include/grpc++/impl/call.h",
|
||||
"include/grpc++/impl/client_unary_call.h",
|
||||
"include/grpc++/impl/codegen/async_stream.h",
|
||||
"include/grpc++/impl/codegen/async_unary_call.h",
|
||||
"include/grpc++/impl/codegen/call.h",
|
||||
"include/grpc++/impl/codegen/call_hook.h",
|
||||
"include/grpc++/impl/codegen/channel_interface.h",
|
||||
"include/grpc++/impl/codegen/client_context.h",
|
||||
"include/grpc++/impl/codegen/client_unary_call.h",
|
||||
"include/grpc++/impl/codegen/completion_queue.h",
|
||||
"include/grpc++/impl/codegen/completion_queue_tag.h",
|
||||
"include/grpc++/impl/codegen/config.h",
|
||||
"include/grpc++/impl/codegen/config_protobuf.h",
|
||||
"include/grpc++/impl/codegen/grpc_library.h",
|
||||
"include/grpc++/impl/codegen/method_handler_impl.h",
|
||||
"include/grpc++/impl/codegen/proto_utils.h",
|
||||
"include/grpc++/impl/codegen/rpc_method.h",
|
||||
"include/grpc++/impl/codegen/rpc_service_method.h",
|
||||
"include/grpc++/impl/codegen/security/auth_context.h",
|
||||
"include/grpc++/impl/codegen/serialization_traits.h",
|
||||
"include/grpc++/impl/codegen/server_context.h",
|
||||
|
|
@ -4239,6 +4266,7 @@
|
|||
"include/grpc++/impl/codegen/sync.h",
|
||||
"include/grpc++/impl/codegen/sync_cxx11.h",
|
||||
"include/grpc++/impl/codegen/sync_no_cxx11.h",
|
||||
"include/grpc++/impl/codegen/sync_stream.h",
|
||||
"include/grpc++/impl/codegen/time.h",
|
||||
"include/grpc++/impl/grpc_library.h",
|
||||
"include/grpc++/impl/method_handler_impl.h",
|
||||
|
|
@ -4314,15 +4342,21 @@
|
|||
"deps": [],
|
||||
"headers": [
|
||||
"include/grpc++/impl/codegen/async_stream.h",
|
||||
"include/grpc++/impl/codegen/async_unary_call.h",
|
||||
"include/grpc++/impl/codegen/call.h",
|
||||
"include/grpc++/impl/codegen/call_hook.h",
|
||||
"include/grpc++/impl/codegen/channel_interface.h",
|
||||
"include/grpc++/impl/codegen/client_context.h",
|
||||
"include/grpc++/impl/codegen/client_unary_call.h",
|
||||
"include/grpc++/impl/codegen/completion_queue.h",
|
||||
"include/grpc++/impl/codegen/completion_queue_tag.h",
|
||||
"include/grpc++/impl/codegen/config.h",
|
||||
"include/grpc++/impl/codegen/config_protobuf.h",
|
||||
"include/grpc++/impl/codegen/grpc_library.h",
|
||||
"include/grpc++/impl/codegen/method_handler_impl.h",
|
||||
"include/grpc++/impl/codegen/proto_utils.h",
|
||||
"include/grpc++/impl/codegen/rpc_method.h",
|
||||
"include/grpc++/impl/codegen/rpc_service_method.h",
|
||||
"include/grpc++/impl/codegen/security/auth_context.h",
|
||||
"include/grpc++/impl/codegen/serialization_traits.h",
|
||||
"include/grpc++/impl/codegen/server_context.h",
|
||||
|
|
@ -4335,6 +4369,7 @@
|
|||
"include/grpc++/impl/codegen/sync.h",
|
||||
"include/grpc++/impl/codegen/sync_cxx11.h",
|
||||
"include/grpc++/impl/codegen/sync_no_cxx11.h",
|
||||
"include/grpc++/impl/codegen/sync_stream.h",
|
||||
"include/grpc++/impl/codegen/time.h",
|
||||
"include/grpc++/support/config.h",
|
||||
"include/grpc++/support/config_protobuf.h",
|
||||
|
|
@ -4376,15 +4411,21 @@
|
|||
"name": "grpc_plugin_support",
|
||||
"src": [
|
||||
"include/grpc++/impl/codegen/async_stream.h",
|
||||
"include/grpc++/impl/codegen/async_unary_call.h",
|
||||
"include/grpc++/impl/codegen/call.h",
|
||||
"include/grpc++/impl/codegen/call_hook.h",
|
||||
"include/grpc++/impl/codegen/channel_interface.h",
|
||||
"include/grpc++/impl/codegen/client_context.h",
|
||||
"include/grpc++/impl/codegen/client_unary_call.h",
|
||||
"include/grpc++/impl/codegen/completion_queue.h",
|
||||
"include/grpc++/impl/codegen/completion_queue_tag.h",
|
||||
"include/grpc++/impl/codegen/config.h",
|
||||
"include/grpc++/impl/codegen/config_protobuf.h",
|
||||
"include/grpc++/impl/codegen/grpc_library.h",
|
||||
"include/grpc++/impl/codegen/method_handler_impl.h",
|
||||
"include/grpc++/impl/codegen/proto_utils.h",
|
||||
"include/grpc++/impl/codegen/rpc_method.h",
|
||||
"include/grpc++/impl/codegen/rpc_service_method.h",
|
||||
"include/grpc++/impl/codegen/security/auth_context.h",
|
||||
"include/grpc++/impl/codegen/serialization_traits.h",
|
||||
"include/grpc++/impl/codegen/server_context.h",
|
||||
|
|
@ -4397,6 +4438,7 @@
|
|||
"include/grpc++/impl/codegen/sync.h",
|
||||
"include/grpc++/impl/codegen/sync_cxx11.h",
|
||||
"include/grpc++/impl/codegen/sync_no_cxx11.h",
|
||||
"include/grpc++/impl/codegen/sync_stream.h",
|
||||
"include/grpc++/impl/codegen/time.h",
|
||||
"include/grpc++/support/config.h",
|
||||
"include/grpc++/support/config_protobuf.h",
|
||||
|
|
|
|||
|
|
@ -302,15 +302,21 @@
|
|||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\support\sync_stream.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\support\time.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\async_stream.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\async_unary_call.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\call.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\call_hook.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\channel_interface.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\client_context.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\client_unary_call.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\completion_queue.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\completion_queue_tag.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\config.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\config_protobuf.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\grpc_library.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\method_handler_impl.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\proto_utils.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\rpc_method.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\rpc_service_method.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\security\auth_context.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\serialization_traits.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\server_context.h" />
|
||||
|
|
@ -323,6 +329,7 @@
|
|||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\sync.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\sync_cxx11.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\sync_no_cxx11.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\sync_stream.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\time.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
|
|
|||
|
|
@ -237,6 +237,9 @@
|
|||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\async_stream.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\async_unary_call.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\call.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
|
|
@ -249,6 +252,12 @@
|
|||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\client_context.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\client_unary_call.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\completion_queue.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\completion_queue_tag.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
|
|
@ -261,9 +270,18 @@
|
|||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\grpc_library.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\method_handler_impl.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\proto_utils.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\rpc_method.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\rpc_service_method.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\security\auth_context.h">
|
||||
<Filter>include\grpc++\impl\codegen\security</Filter>
|
||||
</ClInclude>
|
||||
|
|
@ -300,6 +318,9 @@
|
|||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\sync_no_cxx11.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\sync_stream.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\time.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
|
|
|
|||
|
|
@ -302,15 +302,21 @@
|
|||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\support\sync_stream.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\support\time.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\async_stream.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\async_unary_call.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\call.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\call_hook.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\channel_interface.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\client_context.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\client_unary_call.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\completion_queue.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\completion_queue_tag.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\config.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\config_protobuf.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\grpc_library.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\method_handler_impl.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\proto_utils.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\rpc_method.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\rpc_service_method.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\security\auth_context.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\serialization_traits.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\server_context.h" />
|
||||
|
|
@ -323,6 +329,7 @@
|
|||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\sync.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\sync_cxx11.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\sync_no_cxx11.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\sync_stream.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\time.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
|
|
|||
|
|
@ -222,6 +222,9 @@
|
|||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\async_stream.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\async_unary_call.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\call.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
|
|
@ -234,6 +237,12 @@
|
|||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\client_context.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\client_unary_call.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\completion_queue.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\completion_queue_tag.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
|
|
@ -246,9 +255,18 @@
|
|||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\grpc_library.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\method_handler_impl.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\proto_utils.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\rpc_method.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\rpc_service_method.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\security\auth_context.h">
|
||||
<Filter>include\grpc++\impl\codegen\security</Filter>
|
||||
</ClInclude>
|
||||
|
|
@ -285,6 +303,9 @@
|
|||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\sync_no_cxx11.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\sync_stream.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\time.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
|
|
|
|||
|
|
@ -148,15 +148,21 @@
|
|||
|
||||
<ItemGroup>
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\async_stream.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\async_unary_call.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\call.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\call_hook.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\channel_interface.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\client_context.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\client_unary_call.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\completion_queue.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\completion_queue_tag.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\config.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\config_protobuf.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\grpc_library.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\method_handler_impl.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\proto_utils.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\rpc_method.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\rpc_service_method.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\security\auth_context.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\serialization_traits.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\server_context.h" />
|
||||
|
|
@ -169,6 +175,7 @@
|
|||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\sync.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\sync_cxx11.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\sync_no_cxx11.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\sync_stream.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\time.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\alloc.h" />
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\atm.h" />
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@
|
|||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\async_stream.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\async_unary_call.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\call.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
|
|
@ -36,6 +39,12 @@
|
|||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\client_context.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\client_unary_call.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\completion_queue.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\completion_queue_tag.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
|
|
@ -48,9 +57,18 @@
|
|||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\grpc_library.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\method_handler_impl.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\proto_utils.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\rpc_method.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\rpc_service_method.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\security\auth_context.h">
|
||||
<Filter>include\grpc++\impl\codegen\security</Filter>
|
||||
</ClInclude>
|
||||
|
|
@ -87,6 +105,9 @@
|
|||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\sync_no_cxx11.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\sync_stream.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\time.h">
|
||||
<Filter>include\grpc++\impl\codegen</Filter>
|
||||
</ClInclude>
|
||||
|
|
|
|||
Loading…
Reference in New Issue