uvco 0.1
Loading...
Searching...
No Matches
uvco::Udp::RecvAwaiter_ Struct Reference
Collaboration diagram for uvco::Udp::RecvAwaiter_:

Public Types

using QueueItem_

Public Member Functions

 RecvAwaiter_ (uv_udp_t &udp, size_t queueSize=packetQueueSize)
 RecvAwaiter_ (const RecvAwaiter_ &)=default
 RecvAwaiter_ (RecvAwaiter_ &&)=delete
RecvAwaiter_operator= (const RecvAwaiter_ &)=delete
RecvAwaiter_operator= (RecvAwaiter_ &&)=delete
 ~RecvAwaiter_ ()=default
bool await_ready () const
bool await_suspend (std::coroutine_handle<> handle)
std::optional< std::pair< std::string, AddressHandle > > await_resume ()

Public Attributes

uv_udp_t & udp_
BoundedQueue< QueueItem_buffer_
std::optional< std::coroutine_handle<> > handle_
bool stop_receiving_ = true

Static Public Attributes

static constexpr unsigned packetQueueSize = 128

Member Typedef Documentation

◆ QueueItem_

Initial value:
std::variant<std::pair<std::string, AddressHandle>, uv_status>
int uv_status
Result of a libuv operation, an errno error code.
Definition internal_utils.h:22

Constructor & Destructor Documentation

◆ RecvAwaiter_() [1/3]

uvco::Udp::RecvAwaiter_::RecvAwaiter_ ( uv_udp_t & udp,
size_t queueSize = packetQueueSize )
explicit
380 : udp_{udp}, buffer_{queueSize} {}
uv_udp_t & udp_
Definition udp.cc:51
BoundedQueue< QueueItem_ > buffer_
Definition udp.cc:52

◆ RecvAwaiter_() [2/3]

uvco::Udp::RecvAwaiter_::RecvAwaiter_ ( const RecvAwaiter_ & )
default

◆ RecvAwaiter_() [3/3]

uvco::Udp::RecvAwaiter_::RecvAwaiter_ ( RecvAwaiter_ && )
delete

◆ ~RecvAwaiter_()

uvco::Udp::RecvAwaiter_::~RecvAwaiter_ ( )
default

Member Function Documentation

◆ await_ready()

bool uvco::Udp::RecvAwaiter_::await_ready ( ) const
nodiscard
390{ return !buffer_.empty(); }

◆ await_resume()

std::optional< std::pair< std::string, AddressHandle > > uvco::Udp::RecvAwaiter_::await_resume ( )
393 {
394 resetData(&udp_);
395 // Woken up without read packet: stop receiving.
396 if (buffer_.empty()) {
397 return std::nullopt;
398 }
399 QueueItem_ item = buffer_.get();
400 if (std::holds_alternative<uv_status>(item)) {
401 throw UvcoException(std::get<uv_status>(item),
402 "Udp::RecvAwaiter_::await_resume: error during recv");
403 }
404 return std::get<std::pair<std::string, AddressHandle>>(item);
405}
void resetData(Handle *handle)
Reset data pointer on handle to nullptr.
Definition internal_utils.h:83
std::variant< std::pair< std::string, AddressHandle >, uv_status > QueueItem_
Definition udp.cc:37

◆ await_suspend()

bool uvco::Udp::RecvAwaiter_::await_suspend ( std::coroutine_handle<> handle)
382 {
383 BOOST_ASSERT(dataIsNull(&udp_));
384 setData(&udp_, this);
385 BOOST_ASSERT(!handle_);
386 handle_ = handle;
387 return true;
388}
void setData(Handle *handle, Data *data)
Obtain data pointer set on request with type cast. Data may be nullptr.
Definition internal_utils.h:77
bool dataIsNull(Handle *handle)
Check if handle data is null.
Definition internal_utils.h:101
std::optional< std::coroutine_handle<> > handle_
Definition udp.cc:53

◆ operator=() [1/2]

RecvAwaiter_ & uvco::Udp::RecvAwaiter_::operator= ( const RecvAwaiter_ & )
delete

◆ operator=() [2/2]

RecvAwaiter_ & uvco::Udp::RecvAwaiter_::operator= ( RecvAwaiter_ && )
delete

Member Data Documentation

◆ buffer_

BoundedQueue<QueueItem_> uvco::Udp::RecvAwaiter_::buffer_

◆ handle_

std::optional<std::coroutine_handle<> > uvco::Udp::RecvAwaiter_::handle_

◆ packetQueueSize

unsigned uvco::Udp::RecvAwaiter_::packetQueueSize = 128
staticconstexpr

◆ stop_receiving_

bool uvco::Udp::RecvAwaiter_::stop_receiving_ = true

◆ udp_

uv_udp_t& uvco::Udp::RecvAwaiter_::udp_

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