56template <
typename SessionType>
77 [[nodiscard]]
auto id() const -> std::string_view
override {
97 [[nodiscard]]
auto send(std::vector<uint8_t>&& data)
100 return session_->send(std::move(data));
102 session_->send_packet(std::move(data));
129 [[nodiscard]]
auto type() const noexcept -> const std::type_info&
override {
130 return typeid(SessionType);
133 [[nodiscard]]
auto get_raw() noexcept ->
void*
override {
137 [[nodiscard]]
auto get_raw() const noexcept -> const
void*
override {
150 -> std::chrono::steady_clock::time_point
override {
155 -> std::chrono::steady_clock::time_point
override {
165 [[nodiscard]]
auto idle_duration() const -> std::chrono::milliseconds
override {
167 return std::chrono::duration_cast<std::chrono::milliseconds>(
170 return std::chrono::milliseconds{0};
190 [[nodiscard]]
auto get_session() const noexcept -> const SessionType* {
212 template <
typename T,
typename =
void>
215 template <
typename T>
216 struct has_id_method<T, std::void_t<decltype(std::declval<const T&>().id())>>
220 template <
typename T,
typename =
void>
223 template <
typename T>
225 std::void_t<decltype(std::declval<const T&>().server_id())>>
229 template <
typename T,
typename =
void>
232 template <
typename T>
234 T, std::void_t<decltype(std::declval<const T&>().is_connected())>>
238 template <
typename T,
typename =
void>
241 template <
typename T>
243 T, std::void_t<decltype(std::declval<const T&>().is_stopped())>>
247 template <
typename T,
typename =
void>
250 template <
typename T>
252 T, std::void_t<decltype(std::declval<T&>().send(std::declval<std::vector<uint8_t>&&>()))>>
256 template <
typename T,
typename =
void>
259 template <
typename T>
262 std::void_t<decltype(std::declval<T&>().send_packet(
263 std::declval<std::vector<uint8_t>&&>()))>>
267 template <
typename T,
typename =
void>
270 template <
typename T>
275 template <
typename T,
typename =
void>
278 template <
typename T>
280 std::void_t<decltype(std::declval<T&>().stop_session())>>
290template <
typename SessionType>
292 -> std::unique_ptr<session_concept> {
295 return std::unique_ptr<session_concept>(
static Result< T > ok(U &&value)
static Result< T > err(const simple_error &error)
Type-erased interface for session management.
Template that wraps concrete session types to implement session_concept.
auto is_connected() const -> bool override
Checks if the session is currently connected.
auto last_activity() const -> std::chrono::steady_clock::time_point override
Gets the last activity timestamp.
auto created_at() const -> std::chrono::steady_clock::time_point override
Gets the creation timestamp.
session_model(session_ptr session)
Constructs a session model wrapping the given session.
auto get_session() noexcept -> SessionType *
Gets the underlying session (non-owning)
std::shared_ptr< SessionType > session_ptr
auto idle_duration() const -> std::chrono::milliseconds override
Calculates idle duration since last activity.
auto send(std::vector< uint8_t > &&data) -> VoidResult override
Sends data through the session.
auto type() const noexcept -> const std::type_info &override
Gets the runtime type information of the wrapped session.
std::chrono::steady_clock::time_point created_at_
auto stop() -> void override
Stops the session (alias for protocol-specific implementations)
auto get_session() const noexcept -> const SessionType *
Gets the underlying session (non-owning, const)
auto get_raw() const noexcept -> const void *override
Gets a raw const pointer to the underlying session.
auto id() const -> std::string_view override
Gets the session's unique identifier.
~session_model() override=default
auto has_activity_tracking() const noexcept -> bool override
Checks if this session type supports activity tracking.
auto close() -> void override
Closes the session.
auto update_activity() -> void override
Updates the last activity timestamp to current time.
auto get_session_ptr() const noexcept -> session_ptr
Gets the underlying session shared_ptr.
std::chrono::steady_clock::time_point last_activity_
auto get_raw() noexcept -> void *override
Gets a raw pointer to the underlying session.
auto make_session_model(std::shared_ptr< SessionType > session) -> std::unique_ptr< session_concept >
Factory function to create a session_model.
Customization point for session manager behavior.
static constexpr bool has_activity_tracking
Enable activity timestamp tracking (required for idle cleanup)