72 explicit session_handle(std::unique_ptr<session_concept> session_concept_ptr)
73 :
concept_(std::move(session_concept_ptr)) {}
80 template <
typename SessionType>
101 [[nodiscard]]
explicit operator bool() const noexcept {
109 [[nodiscard]]
auto valid() const noexcept ->
bool {
121 [[nodiscard]]
auto id() const -> std::string_view {
142 return concept_->send(std::move(data));
181 template <
typename T>
182 [[nodiscard]]
auto as() noexcept -> T* {
186 return static_cast<T*
>(
concept_->get_raw());
194 template <
typename T>
195 [[nodiscard]]
auto as() const noexcept -> const T* {
199 return static_cast<const T*
>(
concept_->get_raw());
207 template <
typename T>
208 [[nodiscard]]
auto is_type() const noexcept ->
bool {
216 [[nodiscard]]
auto type() const noexcept -> const std::type_info& {
236 [[nodiscard]]
auto created_at() const -> std::chrono::steady_clock::time_point {
238 : std::chrono::steady_clock::time_point{};
245 [[nodiscard]]
auto last_activity() const -> std::chrono::steady_clock::time_point {
247 : std::chrono::steady_clock::time_point{};
312template <
typename SessionType>
static Result< T > err(const simple_error &error)
Type-erased interface for session management.
Value-semantic wrapper for type-erased sessions.
auto created_at() const -> std::chrono::steady_clock::time_point
Gets the creation timestamp.
session_handle & operator=(const session_handle &)=delete
auto id() const -> std::string_view
Gets the session's unique identifier.
session_handle()=default
Creates an empty (invalid) handle.
auto update_activity() -> void
Updates the last activity timestamp.
session_handle & operator=(session_handle &&)=default
auto get_concept() noexcept -> session_concept *
Gets the underlying session concept (non-owning)
auto as() const noexcept -> const T *
Attempts to cast to a specific session type (const version)
session_handle(session_handle &&)=default
session_handle(std::shared_ptr< SessionType > session)
Creates a handle from a concrete session type.
auto valid() const noexcept -> bool
Checks if the handle is valid.
session_handle(std::unique_ptr< session_concept > session_concept_ptr)
Creates a handle from a type-erased session concept.
auto is_connected() const -> bool
Checks if the session is currently connected.
auto last_activity() const -> std::chrono::steady_clock::time_point
Gets the last activity timestamp.
session_handle(const session_handle &)=delete
auto close() -> void
Closes the session.
auto send(std::vector< uint8_t > &&data) -> VoidResult
Sends data through the session.
auto idle_duration() const -> std::chrono::milliseconds
Gets the idle duration since last activity.
auto as() noexcept -> T *
Attempts to cast to a specific session type.
auto release() noexcept -> std::unique_ptr< session_concept >
Releases ownership of the session concept.
auto get_concept() const noexcept -> const session_concept *
Gets the underlying session concept (non-owning, const)
~session_handle()=default
auto has_activity_tracking() const noexcept -> bool
Checks if activity tracking is enabled for this session.
std::unique_ptr< session_concept > concept_
auto reset() noexcept -> void
Resets the handle to empty state.
auto is_type() const noexcept -> bool
Checks if the session is of a specific type.
auto type() const noexcept -> const std::type_info &
Gets type information of the wrapped session.
auto stop() -> void
Stops the session.
auto make_session_handle(std::shared_ptr< SessionType > session) -> session_handle
Factory function to create a session_handle.
auto make_session_model(std::shared_ptr< SessionType > session) -> std::unique_ptr< session_concept >
Factory function to create a session_model.