unilink  0.4.3
A simple C++ library for unified async communication
unilink::transport::TcpClient::Impl Struct Reference

Public Member Functions

 Impl (const TcpClientConfig &cfg, net::io_context *ioc_ptr)
 
void init ()
 
void do_resolve_connect (std::shared_ptr< TcpClient > self, uint64_t seq)
 
void schedule_retry (std::shared_ptr< TcpClient > self, uint64_t seq)
 
void start_read (std::shared_ptr< TcpClient > self, uint64_t seq)
 
void do_write (std::shared_ptr< TcpClient > self, uint64_t seq)
 
void handle_close (std::shared_ptr< TcpClient > self, uint64_t seq, const boost::system::error_code &ec={})
 
void transition_to (LinkState next, const boost::system::error_code &ec={})
 
void perform_stop_cleanup ()
 
void reset_start_state ()
 
void join_ioc_thread (bool allow_detach)
 
void close_socket ()
 
void recalculate_backpressure_bounds ()
 
void report_backpressure (size_t queued_bytes)
 
void notify_state ()
 
void reset_io_objects ()
 
void record_error (diagnostics::ErrorLevel lvl, diagnostics::ErrorCategory cat, std::string_view operation, const boost::system::error_code &ec, std::string_view msg, bool retryable, uint32_t retry_count)
 

Public Attributes

std::unique_ptr< net::io_context > owned_ioc_
 
net::io_context * ioc_ = nullptr
 
net::strand< net::io_context::executor_type > strand_
 
std::unique_ptr< net::executor_work_guard< net::io_context::executor_type > > work_guard_
 
std::thread ioc_thread_
 
std::atomic< uint64_t > lifecycle_seq_ {0}
 
std::atomic< uint64_t > stop_seq_ {0}
 
std::atomic< uint64_t > current_seq_ {0}
 
tcp::resolver resolver_
 
tcp::socket socket_
 
TcpClientConfig cfg_
 
net::steady_timer retry_timer_
 
net::steady_timer connect_timer_
 
bool owns_ioc_ = true
 
std::atomic< bool > stop_requested_ {false}
 
std::atomic< bool > stopping_ {false}
 
std::atomic< bool > terminal_state_notified_ {false}
 
std::atomic< bool > reconnect_pending_ {false}
 
std::array< uint8_t, common::constants::DEFAULT_READ_BUFFER_SIZE > rx_ {}
 
std::deque< BufferVarianttx_
 
std::optional< BufferVariantcurrent_write_buffer_
 
bool writing_ = false
 
size_t queue_bytes_ = 0
 
size_t bp_high_
 
size_t bp_low_
 
size_t bp_limit_
 
bool backpressure_active_ = false
 
unsigned first_retry_interval_ms_ = 100
 
OnBytes on_bytes_
 
OnState on_state_
 
OnBackpressure on_bp_
 
std::mutex callback_mtx_
 
std::atomic< bool > connected_ {false}
 
ThreadSafeLinkState state_ {LinkState::Idle}
 
int retry_attempts_ = 0
 
uint32_t reconnect_attempt_count_ {0}
 
std::optional< ReconnectPolicyreconnect_policy_
 
std::mutex last_err_mtx_
 
std::optional< diagnostics::ErrorInfolast_error_info_
 

Detailed Description

Definition at line 65 of file tcp_client.cc.

Constructor & Destructor Documentation

◆ Impl()

unilink::transport::TcpClient::Impl::Impl ( const TcpClientConfig cfg,
net::io_context *  ioc_ptr 
)
inline

Definition at line 110 of file tcp_client.cc.

Member Function Documentation

◆ close_socket()

void unilink::transport::TcpClient::Impl::close_socket ( )

Definition at line 760 of file tcp_client.cc.

◆ do_resolve_connect()

void unilink::transport::TcpClient::Impl::do_resolve_connect ( std::shared_ptr< TcpClient self,
uint64_t  seq 
)

Definition at line 464 of file tcp_client.cc.

◆ do_write()

void unilink::transport::TcpClient::Impl::do_write ( std::shared_ptr< TcpClient self,
uint64_t  seq 
)

Definition at line 649 of file tcp_client.cc.

◆ handle_close()

void unilink::transport::TcpClient::Impl::handle_close ( std::shared_ptr< TcpClient self,
uint64_t  seq,
const boost::system::error_code &  ec = {} 
)

Definition at line 735 of file tcp_client.cc.

◆ init()

void unilink::transport::TcpClient::Impl::init ( )
inline

Definition at line 124 of file tcp_client.cc.

◆ join_ioc_thread()

void unilink::transport::TcpClient::Impl::join_ioc_thread ( bool  allow_detach)

Definition at line 881 of file tcp_client.cc.

◆ notify_state()

void unilink::transport::TcpClient::Impl::notify_state ( )

Definition at line 902 of file tcp_client.cc.

◆ perform_stop_cleanup()

void unilink::transport::TcpClient::Impl::perform_stop_cleanup ( )

Definition at line 837 of file tcp_client.cc.

◆ recalculate_backpressure_bounds()

void unilink::transport::TcpClient::Impl::recalculate_backpressure_bounds ( )

Definition at line 766 of file tcp_client.cc.

◆ record_error()

void unilink::transport::TcpClient::Impl::record_error ( diagnostics::ErrorLevel  lvl,
diagnostics::ErrorCategory  cat,
std::string_view  operation,
const boost::system::error_code &  ec,
std::string_view  msg,
bool  retryable,
uint32_t  retry_count 
)

Definition at line 921 of file tcp_client.cc.

◆ report_backpressure()

void unilink::transport::TcpClient::Impl::report_backpressure ( size_t  queued_bytes)

Definition at line 780 of file tcp_client.cc.

◆ reset_io_objects()

void unilink::transport::TcpClient::Impl::reset_io_objects ( )

Definition at line 930 of file tcp_client.cc.

◆ reset_start_state()

void unilink::transport::TcpClient::Impl::reset_start_state ( )

Definition at line 867 of file tcp_client.cc.

◆ schedule_retry()

void unilink::transport::TcpClient::Impl::schedule_retry ( std::shared_ptr< TcpClient self,
uint64_t  seq 
)

Definition at line 546 of file tcp_client.cc.

◆ start_read()

void unilink::transport::TcpClient::Impl::start_read ( std::shared_ptr< TcpClient self,
uint64_t  seq 
)

Definition at line 611 of file tcp_client.cc.

◆ transition_to()

void unilink::transport::TcpClient::Impl::transition_to ( LinkState  next,
const boost::system::error_code &  ec = {} 
)

Definition at line 813 of file tcp_client.cc.

Member Data Documentation

◆ backpressure_active_

bool unilink::transport::TcpClient::Impl::backpressure_active_ = false

Definition at line 94 of file tcp_client.cc.

◆ bp_high_

size_t unilink::transport::TcpClient::Impl::bp_high_

Definition at line 91 of file tcp_client.cc.

◆ bp_limit_

size_t unilink::transport::TcpClient::Impl::bp_limit_

Definition at line 93 of file tcp_client.cc.

◆ bp_low_

size_t unilink::transport::TcpClient::Impl::bp_low_

Definition at line 92 of file tcp_client.cc.

◆ callback_mtx_

std::mutex unilink::transport::TcpClient::Impl::callback_mtx_
mutable

Definition at line 100 of file tcp_client.cc.

◆ cfg_

TcpClientConfig unilink::transport::TcpClient::Impl::cfg_

Definition at line 77 of file tcp_client.cc.

◆ connect_timer_

net::steady_timer unilink::transport::TcpClient::Impl::connect_timer_

Definition at line 79 of file tcp_client.cc.

◆ connected_

std::atomic<bool> unilink::transport::TcpClient::Impl::connected_ {false}

Definition at line 101 of file tcp_client.cc.

◆ current_seq_

std::atomic<uint64_t> unilink::transport::TcpClient::Impl::current_seq_ {0}

Definition at line 74 of file tcp_client.cc.

◆ current_write_buffer_

std::optional<BufferVariant> unilink::transport::TcpClient::Impl::current_write_buffer_

Definition at line 88 of file tcp_client.cc.

◆ first_retry_interval_ms_

unsigned unilink::transport::TcpClient::Impl::first_retry_interval_ms_ = 100

Definition at line 95 of file tcp_client.cc.

◆ ioc_

net::io_context* unilink::transport::TcpClient::Impl::ioc_ = nullptr

Definition at line 68 of file tcp_client.cc.

◆ ioc_thread_

std::thread unilink::transport::TcpClient::Impl::ioc_thread_

Definition at line 71 of file tcp_client.cc.

◆ last_err_mtx_

std::mutex unilink::transport::TcpClient::Impl::last_err_mtx_
mutable

Definition at line 107 of file tcp_client.cc.

◆ last_error_info_

std::optional<diagnostics::ErrorInfo> unilink::transport::TcpClient::Impl::last_error_info_

Definition at line 108 of file tcp_client.cc.

◆ lifecycle_seq_

std::atomic<uint64_t> unilink::transport::TcpClient::Impl::lifecycle_seq_ {0}

Definition at line 72 of file tcp_client.cc.

◆ on_bp_

OnBackpressure unilink::transport::TcpClient::Impl::on_bp_

Definition at line 99 of file tcp_client.cc.

◆ on_bytes_

OnBytes unilink::transport::TcpClient::Impl::on_bytes_

Definition at line 97 of file tcp_client.cc.

◆ on_state_

OnState unilink::transport::TcpClient::Impl::on_state_

Definition at line 98 of file tcp_client.cc.

◆ owned_ioc_

std::unique_ptr<net::io_context> unilink::transport::TcpClient::Impl::owned_ioc_

Definition at line 67 of file tcp_client.cc.

◆ owns_ioc_

bool unilink::transport::TcpClient::Impl::owns_ioc_ = true

Definition at line 80 of file tcp_client.cc.

◆ queue_bytes_

size_t unilink::transport::TcpClient::Impl::queue_bytes_ = 0

Definition at line 90 of file tcp_client.cc.

◆ reconnect_attempt_count_

uint32_t unilink::transport::TcpClient::Impl::reconnect_attempt_count_ {0}

Definition at line 104 of file tcp_client.cc.

◆ reconnect_pending_

std::atomic<bool> unilink::transport::TcpClient::Impl::reconnect_pending_ {false}

Definition at line 84 of file tcp_client.cc.

◆ reconnect_policy_

std::optional<ReconnectPolicy> unilink::transport::TcpClient::Impl::reconnect_policy_

Definition at line 105 of file tcp_client.cc.

◆ resolver_

tcp::resolver unilink::transport::TcpClient::Impl::resolver_

Definition at line 75 of file tcp_client.cc.

◆ retry_attempts_

int unilink::transport::TcpClient::Impl::retry_attempts_ = 0

Definition at line 103 of file tcp_client.cc.

◆ retry_timer_

net::steady_timer unilink::transport::TcpClient::Impl::retry_timer_

Definition at line 78 of file tcp_client.cc.

◆ rx_

std::array<uint8_t, common::constants::DEFAULT_READ_BUFFER_SIZE> unilink::transport::TcpClient::Impl::rx_ {}

Definition at line 86 of file tcp_client.cc.

◆ socket_

tcp::socket unilink::transport::TcpClient::Impl::socket_

Definition at line 76 of file tcp_client.cc.

◆ state_

ThreadSafeLinkState unilink::transport::TcpClient::Impl::state_ {LinkState::Idle}

Definition at line 102 of file tcp_client.cc.

◆ stop_requested_

std::atomic<bool> unilink::transport::TcpClient::Impl::stop_requested_ {false}

Definition at line 81 of file tcp_client.cc.

◆ stop_seq_

std::atomic<uint64_t> unilink::transport::TcpClient::Impl::stop_seq_ {0}

Definition at line 73 of file tcp_client.cc.

◆ stopping_

std::atomic<bool> unilink::transport::TcpClient::Impl::stopping_ {false}

Definition at line 82 of file tcp_client.cc.

◆ strand_

net::strand<net::io_context::executor_type> unilink::transport::TcpClient::Impl::strand_

Definition at line 69 of file tcp_client.cc.

◆ terminal_state_notified_

std::atomic<bool> unilink::transport::TcpClient::Impl::terminal_state_notified_ {false}

Definition at line 83 of file tcp_client.cc.

◆ tx_

std::deque<BufferVariant> unilink::transport::TcpClient::Impl::tx_

Definition at line 87 of file tcp_client.cc.

◆ work_guard_

std::unique_ptr<net::executor_work_guard<net::io_context::executor_type> > unilink::transport::TcpClient::Impl::work_guard_

Definition at line 70 of file tcp_client.cc.

◆ writing_

bool unilink::transport::TcpClient::Impl::writing_ = false

Definition at line 89 of file tcp_client.cc.


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