Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
connection.h 2.24 KiB
/*
 *
 * This file is a part of the CaosDB Project.
 *
 * Copyright (C) 2021 Timm Fitschen <t.fitschen@indiscale.com>
 * Copyright (C) 2021 IndiScale GmbH <info@indiscale.com>
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program. If not, see <https://www.gnu.org/licenses/>.
 *
 */

#ifndef CONNECTION_H
#define CONNECTION_H
/**
 * @file connection.h
 * @author Timm Fitschen
 * @date 2021-05-18
 * @brief Configuration and setup of the connection.
 */
#include "caosdb/info/v1alpha1/main.grpc.pb.h"
#include <string>
#include <grpc/grpc.h>
#include <grpcpp/channel.h>
#include <grpcpp/client_context.h>
#include <grpcpp/create_channel.h>
#include <grpcpp/security/credentials.h>


namespace caosdb {
using caosdb::info::v1alpha1::GeneralInfoService;
using caosdb::info::v1alpha1::VersionInfo;

/**
 * @brief Configuration of the CaosDB connection.
 */
class CaosDBConnectionConfig {
  std::string host;
  int port;
  public:
    CaosDBConnectionConfig(const std::string &host, int port);
    friend auto operator << (std::ostream &out, const CaosDBConnectionConfig &config) -> std::ostream &;

    [[nodiscard]]
    auto getHost() -> std::string;

    [[nodiscard]]
    auto getPort() const -> int;
};

/**
 * @brief A reusable connection to a CaosDBServer.
 */
class CaosDBConnection {
  CaosDBConnectionConfig config;
  std::unique_ptr<GeneralInfoService::Stub> stub_;
  public:
    explicit CaosDBConnection(const CaosDBConnectionConfig &config);
    friend auto operator << (std::ostream &out, const CaosDBConnection &connection) -> std::ostream &;
    auto getGeneralInfoService() -> GeneralInfoService::Stub &;
    [[nodiscard]]
    auto getVersionInfo() const -> const VersionInfo &;
};
} // namespace caosdb
#endif