src/api/transport/session.hpp
Namespaces
Classes
Types
Types Documentation
enum SessionType
| Enumerator |
Value |
Description |
| kHttp |
1 |
|
| kWs |
|
|
Source code
#ifndef SUPERGENIUS_SRC_API_TRANSPORT_SESSION_HPP
#define SUPERGENIUS_SRC_API_TRANSPORT_SESSION_HPP
#include <boost/asio/buffer.hpp>
#include <boost/asio/ip/tcp.hpp>
#include <boost/asio/read_until.hpp>
#include <boost/asio/streambuf.hpp>
#include <boost/asio/write.hpp>
#include <boost/signals2/signal.hpp>
#include "api/transport/rpc_io_context.hpp"
namespace sgns::api {
enum struct SessionType {
kHttp = 1,
kWs,
};
class Session {
template <class T>
using Signal = boost::signals2::signal<T>;
using OnRequestSignature = void(std::string_view,
std::shared_ptr<Session> session);
using OnRequest = Signal<OnRequestSignature>;
public:
using Context = RpcContext;
using Socket = boost::asio::ip::tcp::socket;
using ErrorCode = boost::system::error_code;
using Streambuf = boost::asio::streambuf;
using Timer = boost::asio::steady_timer;
using Connection = boost::signals2::connection;
using Duration = Timer::duration;
using SessionId = uint64_t;
using OnCloseHandler = std::function<void(SessionId, SessionType)>;
virtual ~Session() = default;
virtual void start() = 0;
virtual Socket &socket() = 0;
void connectOnRequest(std::function<OnRequestSignature> callback) {
on_request_ = std::move(callback);
}
void connectOnCloseHandler(OnCloseHandler &&handler) {
on_close_ = std::move(handler);
}
void processRequest(std::string_view request,
std::shared_ptr<Session> session) {
on_request_(request, std::move(session));
}
virtual void respond(std::string_view message) = 0;
void notifyOnClose(SessionId id, SessionType type) {
if (nullptr != on_close_) on_close_(id, type);
}
virtual SessionId id() const = 0;
virtual SessionType type() const = 0;
private:
std::function<OnRequestSignature> on_request_;
OnCloseHandler on_close_;
};
} // namespace sgns::api
#endif // SUPERGENIUS_SRC_API_TRANSPORT_SESSION_HPP
Updated on 2026-03-04 at 13:10:44 -0800