LCOV - code coverage report
Current view: top level - var/local/git/grpc/include/grpc++ - server_builder.h (source / functions) Hit Total Coverage
Test: tmp.CaZ6RjdVn2 Lines: 9 9 100.0 %
Date: 2015-12-10 22:15:08 Functions: 9 11 81.8 %

          Line data    Source code
       1             : /*
       2             :  *
       3             :  * Copyright 2015, Google Inc.
       4             :  * All rights reserved.
       5             :  *
       6             :  * Redistribution and use in source and binary forms, with or without
       7             :  * modification, are permitted provided that the following conditions are
       8             :  * met:
       9             :  *
      10             :  *     * Redistributions of source code must retain the above copyright
      11             :  * notice, this list of conditions and the following disclaimer.
      12             :  *     * Redistributions in binary form must reproduce the above
      13             :  * copyright notice, this list of conditions and the following disclaimer
      14             :  * in the documentation and/or other materials provided with the
      15             :  * distribution.
      16             :  *     * Neither the name of Google Inc. nor the names of its
      17             :  * contributors may be used to endorse or promote products derived from
      18             :  * this software without specific prior written permission.
      19             :  *
      20             :  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
      21             :  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
      22             :  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
      23             :  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
      24             :  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
      25             :  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
      26             :  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
      27             :  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
      28             :  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
      29             :  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
      30             :  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
      31             :  *
      32             :  */
      33             : 
      34             : #ifndef GRPCXX_SERVER_BUILDER_H
      35             : #define GRPCXX_SERVER_BUILDER_H
      36             : 
      37             : #include <memory>
      38             : #include <vector>
      39             : 
      40             : #include <grpc++/impl/server_builder_option.h>
      41             : #include <grpc++/support/config.h>
      42             : #include <grpc/compression.h>
      43             : 
      44             : namespace grpc {
      45             : 
      46             : class AsyncGenericService;
      47             : class AsynchronousService;
      48             : class CompletionQueue;
      49             : class RpcService;
      50             : class Server;
      51             : class ServerCompletionQueue;
      52             : class ServerCredentials;
      53             : class SynchronousService;
      54             : class ThreadPoolInterface;
      55             : 
      56             : /// A builder class for the creation and startup of \a grpc::Server instances.
      57         186 : class ServerBuilder {
      58             :  public:
      59             :   ServerBuilder();
      60             : 
      61             :   /// Register a service. This call does not take ownership of the service.
      62             :   /// The service must exist for the lifetime of the \a Server instance returned
      63             :   /// by \a BuildAndStart().
      64             :   /// Matches requests with any :authority
      65             :   void RegisterService(SynchronousService* service);
      66             : 
      67             :   /// Register an asynchronous service.
      68             :   /// This call does not take ownership of the service or completion queue.
      69             :   /// The service and completion queuemust exist for the lifetime of the \a
      70             :   /// Server instance returned by \a BuildAndStart().
      71             :   /// Matches requests with any :authority
      72             :   void RegisterAsyncService(AsynchronousService* service);
      73             : 
      74             :   /// Register a generic service.
      75             :   /// Matches requests with any :authority
      76             :   void RegisterAsyncGenericService(AsyncGenericService* service);
      77             : 
      78             :   /// Register a service. This call does not take ownership of the service.
      79             :   /// The service must exist for the lifetime of the \a Server instance returned
      80             :   /// by BuildAndStart().
      81             :   /// Only matches requests with :authority \a host
      82             :   void RegisterService(const grpc::string& host, SynchronousService* service);
      83             : 
      84             :   /// Register an asynchronous service.
      85             :   /// This call does not take ownership of the service or completion queue.
      86             :   /// The service and completion queuemust exist for the lifetime of the \a
      87             :   /// Server instance returned by \a BuildAndStart().
      88             :   /// Only matches requests with :authority equal to \a host
      89             :   void RegisterAsyncService(const grpc::string& host,
      90             :                             AsynchronousService* service);
      91             : 
      92             :   /// Set max message size in bytes.
      93          83 :   void SetMaxMessageSize(int max_message_size) {
      94          83 :     max_message_size_ = max_message_size;
      95          83 :   }
      96             : 
      97             :   /// Set the compression options to be used by the server.
      98             :   void SetCompressionOptions(const grpc_compression_options& options) {
      99             :     compression_options_ = options;
     100             :   }
     101             : 
     102             :   void SetOption(std::unique_ptr<ServerBuilderOption> option);
     103             : 
     104             :   /// Tries to bind \a server to the given \a addr.
     105             :   ///
     106             :   /// It can be invoked multiple times.
     107             :   ///
     108             :   /// \param addr The address to try to bind to the server (eg, localhost:1234,
     109             :   /// 192.168.1.1:31416, [::1]:27182, etc.).
     110             :   /// \params creds The credentials associated with the server.
     111             :   /// \param selected_port[out] Upon success, updated to contain the port
     112             :   /// number. \a nullptr otherwise.
     113             :   ///
     114             :   // TODO(dgq): the "port" part seems to be a misnomer.
     115             :   void AddListeningPort(const grpc::string& addr,
     116             :                         std::shared_ptr<ServerCredentials> creds,
     117             :                         int* selected_port = nullptr);
     118             : 
     119             :   /// Add a completion queue for handling asynchronous services
     120             :   /// Caller is required to keep this completion queue live until
     121             :   /// the server is destroyed.
     122             :   std::unique_ptr<ServerCompletionQueue> AddCompletionQueue();
     123             : 
     124             :   /// Return a running server which is ready for processing calls.
     125             :   std::unique_ptr<Server> BuildAndStart();
     126             : 
     127             :  private:
     128         558 :   struct Port {
     129             :     grpc::string addr;
     130             :     std::shared_ptr<ServerCredentials> creds;
     131             :     int* selected_port;
     132             :   };
     133             : 
     134             :   typedef std::unique_ptr<grpc::string> HostString;
     135             :   template <class T>
     136         374 :   struct NamedService {
     137         292 :     explicit NamedService(T* s) : service(s) {}
     138          82 :     NamedService(const grpc::string& h, T* s)
     139          82 :         : host(new grpc::string(h)), service(s) {}
     140             :     HostString host;
     141             :     T* service;
     142             :   };
     143             : 
     144             :   int max_message_size_;
     145             :   grpc_compression_options compression_options_;
     146             :   std::vector<std::unique_ptr<ServerBuilderOption>> options_;
     147             :   std::vector<std::unique_ptr<NamedService<RpcService>>> services_;
     148             :   std::vector<std::unique_ptr<NamedService<AsynchronousService>>>
     149             :       async_services_;
     150             :   std::vector<Port> ports_;
     151             :   std::vector<ServerCompletionQueue*> cqs_;
     152             :   std::shared_ptr<ServerCredentials> creds_;
     153             :   AsyncGenericService* generic_service_;
     154             :   ThreadPoolInterface* thread_pool_;
     155             : };
     156             : 
     157             : }  // namespace grpc
     158             : 
     159             : #endif  // GRPCXX_SERVER_BUILDER_H

Generated by: LCOV version 1.11