Skip to content

src/api/transport/rpc_thread_pool.hpp

Namespaces

Name
sgns
sgns::api

Classes

Name
class sgns::api::RpcThreadPool
thread pool for serve RPC calls
struct sgns::api::RpcThreadPool::Configuration
class AppStateManager

Source code

#ifndef SUPERGENIUS_SRC_API_RPC_THREAD_POOL_HPP
#define SUPERGENIUS_SRC_API_RPC_THREAD_POOL_HPP

#include <boost/asio/io_service.hpp>
#include <boost/asio/signal_set.hpp>
#include <set>
#include <thread>

#include "api/transport/rpc_io_context.hpp"
#include "application/app_state_manager.hpp"
#include "base/logger.hpp"
#include "singleton/IComponent.hpp"

using sgns::application::AppStateManager;

namespace sgns::api {

  class RpcThreadPool : public std::enable_shared_from_this<RpcThreadPool>, public IComponent {
   public:
    using Context = RpcContext;

    struct Configuration {
      size_t min_thread_number = 1;
      size_t max_thread_number = 10;
    };

    RpcThreadPool(std::shared_ptr<Context> context,
                  const Configuration &configuration);

    ~RpcThreadPool() override = default;

    void start();

    void stop();

    std::string GetName() override
    {
      return "RpcThreadPool";
    }

   private:
    std::shared_ptr<Context> context_;
    const Configuration config_;

    std::vector<std::shared_ptr<std::thread>> threads_;

    base::Logger logger_ = base::createLogger("RPC thread pool");
  };

}  // namespace sgns::api

#endif  // SUPERGENIUS_SRC_API_RPC_THREAD_POOL_HPP

Updated on 2026-03-04 at 13:10:44 -0800