Network System 0.1.1
High-performance modular networking library for scalable client-server applications
Loading...
Searching...
No Matches
kcenon::network::utils::connection_state Class Reference

Thread-safe connection state management. More...

#include <connection_state.h>

Collaboration diagram for kcenon::network::utils::connection_state:
Collaboration graph

Public Member Functions

 connection_state ()=default
 Default constructor. Initializes to disconnected state.
 
 ~connection_state ()=default
 Destructor.
 
 connection_state (const connection_state &)=delete
 
connection_stateoperator= (const connection_state &)=delete
 
 connection_state (connection_state &&other) noexcept
 
connection_stateoperator= (connection_state &&other) noexcept
 
auto status () const -> connection_status
 Gets the current connection status.
 
auto is_connected () const -> bool
 Checks if currently connected.
 
auto is_disconnected () const -> bool
 Checks if currently disconnected.
 
auto is_connecting () const -> bool
 Checks if connection is in progress.
 
auto is_disconnecting () const -> bool
 Checks if disconnection is in progress.
 
auto set_connecting () -> bool
 Attempts to transition from disconnected to connecting.
 
auto set_connected () -> void
 Transitions to connected state.
 
auto set_disconnecting () -> bool
 Attempts to transition from connected to disconnecting.
 
auto set_disconnected () -> void
 Transitions to disconnected state.
 
auto reset () -> void
 Resets to disconnected state.
 

Private Attributes

std::atomic< connection_statusstatus_ {connection_status::disconnected}
 

Detailed Description

Thread-safe connection state management.

This utility class encapsulates connection state tracking with proper atomic operations for thread safety. It provides state machine semantics for connection lifecycle.

State Transitions

┌──────────────┐
disconnected │◄────────────────────┐
└──────┬───────┘ │
set_connecting() │
▼ │
┌──────────────┐ │
connecting │─────────────────────┤
└──────┬───────┘ (on failure) │
set_connected() │
▼ │
┌──────────────┐ │
connected │ │
└──────┬───────┘ │
▼ │
┌──────────────┐ │
│disconnecting │─────────────────────┘
└──────────────┘ set_disconnected()
auto set_connecting() -> bool
Attempts to transition from disconnected to connecting.
auto set_connected() -> void
Transitions to connected state.
auto set_disconnected() -> void
Transitions to disconnected state.
auto set_disconnecting() -> bool
Attempts to transition from connected to disconnecting.

Thread Safety

All methods use atomic operations and are safe for concurrent access.

Usage Example

if (state.set_connecting()) {
// Only one thread reaches here
if (connect_succeeded) {
state.set_connected();
} else {
}
}
Thread-safe connection state management.

Definition at line 72 of file connection_state.h.

Constructor & Destructor Documentation

◆ connection_state() [1/3]

kcenon::network::utils::connection_state::connection_state ( )
default

Default constructor. Initializes to disconnected state.

◆ ~connection_state()

kcenon::network::utils::connection_state::~connection_state ( )
default

Destructor.

◆ connection_state() [2/3]

kcenon::network::utils::connection_state::connection_state ( const connection_state & )
delete

◆ connection_state() [3/3]

kcenon::network::utils::connection_state::connection_state ( connection_state && other)
inlinenoexcept

Definition at line 90 of file connection_state.h.

91 : status_(other.status_.load(std::memory_order_acquire))
92 {
93 other.status_.store(connection_status::disconnected,
94 std::memory_order_release);
95 }
std::atomic< connection_status > status_

References kcenon::network::utils::disconnected.

Member Function Documentation

◆ is_connected()

auto kcenon::network::utils::connection_state::is_connected ( ) const -> bool
inlinenodiscard

Checks if currently connected.

Returns
true if status is connected.

Definition at line 122 of file connection_state.h.

123 {
124 return status_.load(std::memory_order_acquire) == connection_status::connected;
125 }

References kcenon::network::utils::connected, and status_.

◆ is_connecting()

auto kcenon::network::utils::connection_state::is_connecting ( ) const -> bool
inlinenodiscard

Checks if connection is in progress.

Returns
true if status is connecting.

Definition at line 140 of file connection_state.h.

141 {
142 return status_.load(std::memory_order_acquire) == connection_status::connecting;
143 }

References kcenon::network::utils::connecting, and status_.

◆ is_disconnected()

auto kcenon::network::utils::connection_state::is_disconnected ( ) const -> bool
inlinenodiscard

Checks if currently disconnected.

Returns
true if status is disconnected.

Definition at line 131 of file connection_state.h.

132 {
133 return status_.load(std::memory_order_acquire) == connection_status::disconnected;
134 }

References kcenon::network::utils::disconnected, and status_.

◆ is_disconnecting()

auto kcenon::network::utils::connection_state::is_disconnecting ( ) const -> bool
inlinenodiscard

Checks if disconnection is in progress.

Returns
true if status is disconnecting.

Definition at line 149 of file connection_state.h.

150 {
151 return status_.load(std::memory_order_acquire) == connection_status::disconnecting;
152 }
@ disconnecting
Disconnection in progress.

References kcenon::network::utils::disconnecting, and status_.

◆ operator=() [1/2]

connection_state & kcenon::network::utils::connection_state::operator= ( connection_state && other)
inlinenoexcept

Definition at line 97 of file connection_state.h.

98 {
99 if (this != &other)
100 {
101 status_.store(other.status_.load(std::memory_order_acquire),
102 std::memory_order_release);
103 other.status_.store(connection_status::disconnected,
104 std::memory_order_release);
105 }
106 return *this;
107 }

References kcenon::network::utils::disconnected, and status_.

◆ operator=() [2/2]

connection_state & kcenon::network::utils::connection_state::operator= ( const connection_state & )
delete

◆ reset()

auto kcenon::network::utils::connection_state::reset ( ) -> void
inline

Resets to disconnected state.

Alias for set_disconnected() for clarity.

Definition at line 201 of file connection_state.h.

201{ set_disconnected(); }

References set_disconnected().

Here is the call graph for this function:

◆ set_connected()

auto kcenon::network::utils::connection_state::set_connected ( ) -> void
inline

Transitions to connected state.

Should only be called after successful connection.

Definition at line 170 of file connection_state.h.

171 {
172 status_.store(connection_status::connected, std::memory_order_release);
173 }

References kcenon::network::utils::connected, and status_.

◆ set_connecting()

auto kcenon::network::utils::connection_state::set_connecting ( ) -> bool
inlinenodiscard

Attempts to transition from disconnected to connecting.

Returns
true if transition succeeded, false if not in disconnected state.

Definition at line 158 of file connection_state.h.

159 {
160 auto expected = connection_status::disconnected;
161 return status_.compare_exchange_strong(
162 expected, connection_status::connecting, std::memory_order_acq_rel);
163 }

References kcenon::network::utils::connecting, kcenon::network::utils::disconnected, and status_.

◆ set_disconnected()

auto kcenon::network::utils::connection_state::set_disconnected ( ) -> void
inline

Transitions to disconnected state.

Can be called from any state to force disconnection.

Definition at line 191 of file connection_state.h.

192 {
193 status_.store(connection_status::disconnected, std::memory_order_release);
194 }

References kcenon::network::utils::disconnected, and status_.

Referenced by reset().

Here is the caller graph for this function:

◆ set_disconnecting()

auto kcenon::network::utils::connection_state::set_disconnecting ( ) -> bool
inlinenodiscard

Attempts to transition from connected to disconnecting.

Returns
true if transition succeeded, false if not in connected state.

Definition at line 179 of file connection_state.h.

180 {
181 auto expected = connection_status::connected;
182 return status_.compare_exchange_strong(
183 expected, connection_status::disconnecting, std::memory_order_acq_rel);
184 }

References kcenon::network::utils::connected, kcenon::network::utils::disconnecting, and status_.

◆ status()

auto kcenon::network::utils::connection_state::status ( ) const -> connection_status
inlinenodiscard

Gets the current connection status.

Returns
The current status.

Definition at line 113 of file connection_state.h.

114 {
115 return status_.load(std::memory_order_acquire);
116 }

References status_.

Member Data Documentation

◆ status_


The documentation for this class was generated from the following file: