#ifndef __VEREIGN_GRPC_SERVER_API_HH #define __VEREIGN_GRPC_SERVER_API_HH #include <string> #include <memory> namespace vereign { namespace grpc { /** * Server is a grpc server that provides the Vereign services. * * It bootstraps the grpc server, http client, http client session and * Vereign services. */ class Server { public: /** * Constructs and bootstraps the server. * * @param listenAddress gRPC listen address, for example "localhost:". * @param vereignHost Vereign restapi host. * @param vereignPort Vereign restapi port - https, 443... */ explicit Server( const std::string& listenAddress, const std::string& vereignHost, const std::string& vereignPort, // FIXME: the public key must come from a storage const std::string& publicKey ); /** * Shutdowns the server. * * @see Server::Shutdown */ ~Server(); // Disable copying Server(const Server&) = delete; auto operator=(const Server&) -> Server& = delete; /** * Shutdown the server. * * It will cancel all pending http requests to the Vereign restapi. * Blocks for all pending gRPC handlers to finish. */ void Shutdown(); /** * Returns the port that the gRPC server listens to. * * This is useful if you construct the server with ephemeral port. * Then this method will return the port that the OS assigned to the gRPC * socket. */ auto SelectedPort() const -> int; private: class Impl; std::unique_ptr<Impl> impl_; }; } // namespace grpc } // namespace vereign #endif