Skip to content

src/api/transport/listener.hpp

Namespaces

Name
sgns
sgns::api

Classes

Name
class sgns::api::Listener
server which listens for incoming connection, accepts connections making session from socket
struct sgns::api::Listener::Configuration

Source code

#ifndef SUPERGENIUS_SRC_API_TRANSPORT_LISTENER_HPP
#define SUPERGENIUS_SRC_API_TRANSPORT_LISTENER_HPP

#include <boost/asio/ip/tcp.hpp>
#include <memory>

#include "api/transport/rpc_io_context.hpp"
#include "api/transport/session.hpp"
#include "singleton/IComponent.hpp"

namespace sgns::api {
  class Listener : public IComponent {
   protected:
    using Acceptor = boost::asio::ip::tcp::acceptor;
    using Endpoint = boost::asio::ip::tcp::endpoint;
    using NewSessionHandler =
        std::function<void(const std::shared_ptr<Session> &)>;

   public:
    using Context = RpcContext;

    struct Configuration {
      Endpoint endpoint{};  
      Configuration() {
        endpoint.address(boost::asio::ip::address_v4::any());
        endpoint.port(0);
      }
    };

    ~Listener() override = default;

    virtual bool prepare() = 0;

    virtual bool start() = 0;

    virtual void stop() = 0;

    virtual void setHandlerForNewSession(
        NewSessionHandler &&on_new_session) = 0;

   protected:
    virtual void acceptOnce() = 0;
  };
}

#endif

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