|  | @@ -55,13 +55,18 @@ class ServerBuilder {
 | 
	
		
			
				|  |  |    ServerBuilder();
 | 
	
		
			
				|  |  |    ~ServerBuilder();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  /// Options for synchronous servers.
 | 
	
		
			
				|  |  | -  enum SyncServerOption {
 | 
	
		
			
				|  |  | -    NUM_CQS,         ///< Number of completion queues.
 | 
	
		
			
				|  |  | -    MIN_POLLERS,     ///< Minimum number of polling threads.
 | 
	
		
			
				|  |  | -    MAX_POLLERS,     ///< Maximum number of polling threads.
 | 
	
		
			
				|  |  | -    CQ_TIMEOUT_MSEC  ///< Completion queue timeout in milliseconds.
 | 
	
		
			
				|  |  | -  };
 | 
	
		
			
				|  |  | +  //////////////////////////////////////////////////////////////////////////////
 | 
	
		
			
				|  |  | +  // Primary API's
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  /// Return a running server which is ready for processing calls.
 | 
	
		
			
				|  |  | +  /// Before calling, one typically needs to ensure that:
 | 
	
		
			
				|  |  | +  ///  1. a service is registered - so that the server knows what to serve
 | 
	
		
			
				|  |  | +  ///     (via RegisterService, or RegisterAsyncGenericService)
 | 
	
		
			
				|  |  | +  ///  2. a listening port has been added - so the server knows where to receive
 | 
	
		
			
				|  |  | +  ///     traffic (via AddListeningPort)
 | 
	
		
			
				|  |  | +  ///  3. [for async api only] completion queues have been added via
 | 
	
		
			
				|  |  | +  ///     AddCompletionQueue
 | 
	
		
			
				|  |  | +  std::unique_ptr<Server> BuildAndStart();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    /// Register a service. This call does not take ownership of the service.
 | 
	
		
			
				|  |  |    /// The service must exist for the lifetime of the \a Server instance returned
 | 
	
	
		
			
				|  | @@ -69,9 +74,60 @@ class ServerBuilder {
 | 
	
		
			
				|  |  |    /// Matches requests with any :authority
 | 
	
		
			
				|  |  |    ServerBuilder& RegisterService(Service* service);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  /// Register a generic service.
 | 
	
		
			
				|  |  | -  /// Matches requests with any :authority
 | 
	
		
			
				|  |  | -  ServerBuilder& RegisterAsyncGenericService(AsyncGenericService* service);
 | 
	
		
			
				|  |  | +  /// Enlists an endpoint \a addr (port with an optional IP address) to
 | 
	
		
			
				|  |  | +  /// bind the \a grpc::Server object to be created to.
 | 
	
		
			
				|  |  | +  ///
 | 
	
		
			
				|  |  | +  /// It can be invoked multiple times.
 | 
	
		
			
				|  |  | +  ///
 | 
	
		
			
				|  |  | +  /// \param addr_uri The address to try to bind to the server in URI form. If
 | 
	
		
			
				|  |  | +  /// the scheme name is omitted, "dns:///" is assumed. To bind to any address,
 | 
	
		
			
				|  |  | +  /// please use IPv6 any, i.e., [::]:<port>, which also accepts IPv4
 | 
	
		
			
				|  |  | +  /// connections.  Valid values include dns:///localhost:1234, /
 | 
	
		
			
				|  |  | +  /// 192.168.1.1:31416, dns:///[::1]:27182, etc.).
 | 
	
		
			
				|  |  | +  /// \param creds The credentials associated with the server.
 | 
	
		
			
				|  |  | +  /// \param selected_port[out] If not `nullptr`, gets populated with the port
 | 
	
		
			
				|  |  | +  /// number bound to the \a grpc::Server for the corresponding endpoint after
 | 
	
		
			
				|  |  | +  /// it is successfully bound, 0 otherwise.
 | 
	
		
			
				|  |  | +  ///
 | 
	
		
			
				|  |  | +  ServerBuilder& AddListeningPort(const grpc::string& addr_uri,
 | 
	
		
			
				|  |  | +                                  std::shared_ptr<ServerCredentials> creds,
 | 
	
		
			
				|  |  | +                                  int* selected_port = nullptr);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  /// Add a completion queue for handling asynchronous services.
 | 
	
		
			
				|  |  | +  ///
 | 
	
		
			
				|  |  | +  /// Best performance is typically obtained by using one thread per polling
 | 
	
		
			
				|  |  | +  /// completion queue.
 | 
	
		
			
				|  |  | +  ///
 | 
	
		
			
				|  |  | +  /// Caller is required to shutdown the server prior to shutting down the
 | 
	
		
			
				|  |  | +  /// returned completion queue. Caller is also required to drain the
 | 
	
		
			
				|  |  | +  /// completion queue after shutting it down. A typical usage scenario:
 | 
	
		
			
				|  |  | +  ///
 | 
	
		
			
				|  |  | +  /// // While building the server:
 | 
	
		
			
				|  |  | +  /// ServerBuilder builder;
 | 
	
		
			
				|  |  | +  /// ...
 | 
	
		
			
				|  |  | +  /// cq_ = builder.AddCompletionQueue();
 | 
	
		
			
				|  |  | +  /// server_ = builder.BuildAndStart();
 | 
	
		
			
				|  |  | +  ///
 | 
	
		
			
				|  |  | +  /// // While shutting down the server;
 | 
	
		
			
				|  |  | +  /// server_->Shutdown();
 | 
	
		
			
				|  |  | +  /// cq_->Shutdown();  // Always *after* the associated server's Shutdown()!
 | 
	
		
			
				|  |  | +  /// // Drain the cq_ that was created
 | 
	
		
			
				|  |  | +  /// void* ignored_tag;
 | 
	
		
			
				|  |  | +  /// bool ignored_ok;
 | 
	
		
			
				|  |  | +  /// while (cq_->Next(&ignored_tag, &ignored_ok)) { }
 | 
	
		
			
				|  |  | +  ///
 | 
	
		
			
				|  |  | +  /// \param is_frequently_polled This is an optional parameter to inform gRPC
 | 
	
		
			
				|  |  | +  /// library about whether this completion queue would be frequently polled
 | 
	
		
			
				|  |  | +  /// (i.e. by calling \a Next() or \a AsyncNext()). The default value is
 | 
	
		
			
				|  |  | +  /// 'true' and is the recommended setting. Setting this to 'false' (i.e.
 | 
	
		
			
				|  |  | +  /// not polling the completion queue frequently) will have a significantly
 | 
	
		
			
				|  |  | +  /// negative performance impact and hence should not be used in production
 | 
	
		
			
				|  |  | +  /// use cases.
 | 
	
		
			
				|  |  | +  std::unique_ptr<ServerCompletionQueue> AddCompletionQueue(
 | 
	
		
			
				|  |  | +      bool is_frequently_polled = true);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  //////////////////////////////////////////////////////////////////////////////
 | 
	
		
			
				|  |  | +  // RegisterService variants
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    /// Register a service. This call does not take ownership of the service.
 | 
	
		
			
				|  |  |    /// The service must exist for the lifetime of the \a Server instance returned
 | 
	
	
		
			
				|  | @@ -79,6 +135,13 @@ class ServerBuilder {
 | 
	
		
			
				|  |  |    /// Only matches requests with :authority \a host
 | 
	
		
			
				|  |  |    ServerBuilder& RegisterService(const grpc::string& host, Service* service);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +  /// Register a generic service.
 | 
	
		
			
				|  |  | +  /// Matches requests with any :authority
 | 
	
		
			
				|  |  | +  ServerBuilder& RegisterAsyncGenericService(AsyncGenericService* service);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  //////////////////////////////////////////////////////////////////////////////
 | 
	
		
			
				|  |  | +  // Fine control knobs
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |    /// Set max receive message size in bytes.
 | 
	
		
			
				|  |  |    ServerBuilder& SetMaxReceiveMessageSize(int max_receive_message_size) {
 | 
	
		
			
				|  |  |      max_receive_message_size_ = max_receive_message_size;
 | 
	
	
		
			
				|  | @@ -119,6 +182,14 @@ class ServerBuilder {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    ServerBuilder& SetOption(std::unique_ptr<ServerBuilderOption> option);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +  /// Options for synchronous servers.
 | 
	
		
			
				|  |  | +  enum SyncServerOption {
 | 
	
		
			
				|  |  | +    NUM_CQS,         ///< Number of completion queues.
 | 
	
		
			
				|  |  | +    MIN_POLLERS,     ///< Minimum number of polling threads.
 | 
	
		
			
				|  |  | +    MAX_POLLERS,     ///< Maximum number of polling threads.
 | 
	
		
			
				|  |  | +    CQ_TIMEOUT_MSEC  ///< Completion queue timeout in milliseconds.
 | 
	
		
			
				|  |  | +  };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |    /// Only useful if this is a Synchronous server.
 | 
	
		
			
				|  |  |    ServerBuilder& SetSyncServerOption(SyncServerOption option, int value);
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -129,59 +200,6 @@ class ServerBuilder {
 | 
	
		
			
				|  |  |      return SetOption(MakeChannelArgumentOption(arg, value));
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  /// Enlists an endpoint \a addr (port with an optional IP address) to
 | 
	
		
			
				|  |  | -  /// bind the \a grpc::Server object to be created to.
 | 
	
		
			
				|  |  | -  ///
 | 
	
		
			
				|  |  | -  /// It can be invoked multiple times.
 | 
	
		
			
				|  |  | -  ///
 | 
	
		
			
				|  |  | -  /// \param addr_uri The address to try to bind to the server in URI form. If
 | 
	
		
			
				|  |  | -  /// the scheme name is omitted, "dns:///" is assumed. To bind to any address,
 | 
	
		
			
				|  |  | -  /// please use IPv6 any, i.e., [::]:<port>, which also accepts IPv4
 | 
	
		
			
				|  |  | -  /// connections.  Valid values include dns:///localhost:1234, /
 | 
	
		
			
				|  |  | -  /// 192.168.1.1:31416, dns:///[::1]:27182, etc.).
 | 
	
		
			
				|  |  | -  /// \param creds The credentials associated with the server.
 | 
	
		
			
				|  |  | -  /// \param selected_port[out] If not `nullptr`, gets populated with the port
 | 
	
		
			
				|  |  | -  /// number bound to the \a grpc::Server for the corresponding endpoint after
 | 
	
		
			
				|  |  | -  /// it is successfully bound, 0 otherwise.
 | 
	
		
			
				|  |  | -  ///
 | 
	
		
			
				|  |  | -  // TODO(dgq): the "port" part seems to be a misnomer.
 | 
	
		
			
				|  |  | -  ServerBuilder& AddListeningPort(const grpc::string& addr_uri,
 | 
	
		
			
				|  |  | -                                  std::shared_ptr<ServerCredentials> creds,
 | 
	
		
			
				|  |  | -                                  int* selected_port = nullptr);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  /// Add a completion queue for handling asynchronous services.
 | 
	
		
			
				|  |  | -  ///
 | 
	
		
			
				|  |  | -  /// Caller is required to shutdown the server prior to shutting down the
 | 
	
		
			
				|  |  | -  /// returned completion queue. Caller is also required to drain the
 | 
	
		
			
				|  |  | -  /// completion queue after shutting it down. A typical usage scenario:
 | 
	
		
			
				|  |  | -  ///
 | 
	
		
			
				|  |  | -  /// // While building the server:
 | 
	
		
			
				|  |  | -  /// ServerBuilder builder;
 | 
	
		
			
				|  |  | -  /// ...
 | 
	
		
			
				|  |  | -  /// cq_ = builder.AddCompletionQueue();
 | 
	
		
			
				|  |  | -  /// server_ = builder.BuildAndStart();
 | 
	
		
			
				|  |  | -  ///
 | 
	
		
			
				|  |  | -  /// // While shutting down the server;
 | 
	
		
			
				|  |  | -  /// server_->Shutdown();
 | 
	
		
			
				|  |  | -  /// cq_->Shutdown();  // Always *after* the associated server's Shutdown()!
 | 
	
		
			
				|  |  | -  /// // Drain the cq_ that was created
 | 
	
		
			
				|  |  | -  /// void* ignored_tag;
 | 
	
		
			
				|  |  | -  /// bool ignored_ok;
 | 
	
		
			
				|  |  | -  /// while (cq_->Next(&ignored_tag, &ignored_ok)) { }
 | 
	
		
			
				|  |  | -  ///
 | 
	
		
			
				|  |  | -  /// \param is_frequently_polled This is an optional parameter to inform gRPC
 | 
	
		
			
				|  |  | -  /// library about whether this completion queue would be frequently polled
 | 
	
		
			
				|  |  | -  /// (i.e. by calling \a Next() or \a AsyncNext()). The default value is
 | 
	
		
			
				|  |  | -  /// 'true' and is the recommended setting. Setting this to 'false' (i.e.
 | 
	
		
			
				|  |  | -  /// not polling the completion queue frequently) will have a significantly
 | 
	
		
			
				|  |  | -  /// negative performance impact and hence should not be used in production
 | 
	
		
			
				|  |  | -  /// use cases.
 | 
	
		
			
				|  |  | -  std::unique_ptr<ServerCompletionQueue> AddCompletionQueue(
 | 
	
		
			
				|  |  | -      bool is_frequently_polled = true);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  /// Return a running server which is ready for processing calls.
 | 
	
		
			
				|  |  | -  std::unique_ptr<Server> BuildAndStart();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |    /// For internal use only: Register a ServerBuilderPlugin factory function.
 | 
	
		
			
				|  |  |    static void InternalAddPluginFactory(
 | 
	
		
			
				|  |  |        std::unique_ptr<ServerBuilderPlugin> (*CreatePlugin)());
 |