diff options
author | 2015-11-25 10:21:05 -0800 | |
---|---|---|
committer | 2015-11-25 10:21:05 -0800 | |
commit | a23f17b1233453334ad137a3aeb338c801b5ada4 (patch) | |
tree | a23e9835a98b4414817f1c27e66b1c779f4631b5 /src | |
parent | 447c795bb8d82ec328573c6517d82dc6d0dcc0f8 (diff) |
add server_builder_option
Diffstat (limited to 'src')
-rw-r--r-- | src/cpp/server/server.cc | 25 | ||||
-rw-r--r-- | src/cpp/server/server_builder.cc | 18 |
2 files changed, 20 insertions, 23 deletions
diff --git a/src/cpp/server/server.cc b/src/cpp/server/server.cc index 695e811654..f1c8c11c4e 100644 --- a/src/cpp/server/server.cc +++ b/src/cpp/server/server.cc @@ -251,36 +251,21 @@ class Server::SyncRequest GRPC_FINAL : public CompletionQueueTag { grpc_completion_queue* cq_; }; -static grpc_server* CreateServer( - int max_message_size, const grpc_compression_options& compression_options) { - grpc_arg args[2]; - size_t args_idx = 0; - if (max_message_size > 0) { - args[args_idx].type = GRPC_ARG_INTEGER; - args[args_idx].key = const_cast<char*>(GRPC_ARG_MAX_MESSAGE_LENGTH); - args[args_idx].value.integer = max_message_size; - args_idx++; - } - - args[args_idx].type = GRPC_ARG_INTEGER; - args[args_idx].key = const_cast<char*>(GRPC_COMPRESSION_ALGORITHM_STATE_ARG); - args[args_idx].value.integer = compression_options.enabled_algorithms_bitset; - args_idx++; - - grpc_channel_args channel_args = {args_idx, args}; +static grpc_server* CreateServer(const ChannelArguments& args) { + grpc_channel_args channel_args; + args.SetChannelArgs(&channel_args); return grpc_server_create(&channel_args, nullptr); } Server::Server(ThreadPoolInterface* thread_pool, bool thread_pool_owned, - int max_message_size, - grpc_compression_options compression_options) + int max_message_size, const ChannelArguments& args) : max_message_size_(max_message_size), started_(false), shutdown_(false), num_running_cb_(0), sync_methods_(new std::list<SyncRequest>), has_generic_service_(false), - server_(CreateServer(max_message_size, compression_options)), + server_(CreateServer(args)), thread_pool_(thread_pool), thread_pool_owned_(thread_pool_owned) { grpc_server_register_completion_queue(server_, cq_.cq(), nullptr); diff --git a/src/cpp/server/server_builder.cc b/src/cpp/server/server_builder.cc index b8094aa8f6..26c0724a30 100644 --- a/src/cpp/server/server_builder.cc +++ b/src/cpp/server/server_builder.cc @@ -84,6 +84,10 @@ void ServerBuilder::RegisterAsyncGenericService(AsyncGenericService* service) { generic_service_ = service; } +void ServerBuilder::SetOption(std::unique_ptr<ServerBuilderOption> option) { + options_.push_back(std::move(option)); +} + void ServerBuilder::AddListeningPort(const grpc::string& addr, std::shared_ptr<ServerCredentials> creds, int* selected_port) { @@ -101,9 +105,17 @@ std::unique_ptr<Server> ServerBuilder::BuildAndStart() { thread_pool_ = CreateDefaultThreadPool(); thread_pool_owned = true; } - std::unique_ptr<Server> server(new Server(thread_pool_, thread_pool_owned, - max_message_size_, - compression_options_)); + ChannelArguments args; + for (auto option = options_.begin(); option != options_.end(); ++option) { + (*option)->UpdateArguments(&args); + } + if (max_message_size_ > 0) { + args.SetInt(GRPC_ARG_MAX_MESSAGE_LENGTH, max_message_size_); + } + args.SetInt(GRPC_COMPRESSION_ALGORITHM_STATE_ARG, + compression_options_.enabled_algorithms_bitset); + std::unique_ptr<Server> server( + new Server(thread_pool_, thread_pool_owned, max_message_size_, args)); for (auto cq = cqs_.begin(); cq != cqs_.end(); ++cq) { grpc_server_register_completion_queue(server->server_, (*cq)->cq(), nullptr); |