qb  2.0.0.0
C++17 Actor Framework
qb Issue Watch Star Fork Follow @isndev
Loading...
Searching...
No Matches
qb::io::async::udp::server< _Derived > Class Template Reference

Asynchronous UDP server implementation. More...

#include <server.h>

Inheritance diagram for qb::io::async::udp::server< _Derived >:
Collaboration diagram for qb::io::async::udp::server< _Derived >:

Public Member Functions

 server () noexcept
 Constructor.
Public Member Functions inherited from qb::io::async::io< _Derived >
 io ()=default
 Default constructor.
 io (IProtocol *protocol) noexcept
 Constructor with an initial protocol instance.
 io (io const &)=delete
 Deleted copy constructor.
 ~io () noexcept
 Destructor.
template<typename _Protocol, typename... _Args>
_Protocol * switch_protocol (_Args &&...args)
 Switches to a new protocol for I/O processing, taking ownership.
void clear_protocols ()
 Clears all owned protocol instances.
IProtocolprotocol ()
 Gets a pointer to the current active protocol instance.
void start () noexcept
 Starts bidirectional asynchronous I/O operations.
void ready_to_read () noexcept
 Ensures the I/O watcher is listening for read events (EV_READ).
void ready_to_write () noexcept
 Ensures the I/O watcher is listening for write events (EV_WRITE).
void close_after_deliver () const noexcept
 Requests connection closure after all pending output data is delivered.
template<typename... _Args>
auto & publish (_Args &&...args) noexcept
 Publishes data to the output buffer and ensures write readiness.
template<typename T>
auto & operator<< (T &&data)
 Stream operator for publishing data.
void disconnect (int reason=1)
 Initiates a graceful disconnection.
Public Member Functions inherited from qb::io::transport::udp
constexpr bool is_secure () const noexcept
 Indicates that this transport implementation is not secure.
const udp::identitygetSource () const noexcept
 Get the source udp::identity (endpoint) of the last successfully received datagram.
void setDestination (udp::identity const &to) noexcept
 Set the destination udp::identity for subsequent outgoing datagrams sent via out() or operator<<.
auto & out ()
 Get the output proxy (ProxyOut) for stream-like sending to the current destination.
int read () noexcept
 Read a single datagram from the UDP socket.
int write () noexcept
 Write the next complete datagram from the output buffer to its destination.
char * publish (char const *data, std::size_t size) noexcept
 Publish (enqueue) data to be sent to the current default destination (_remote_dest).
char * publish_to (udp::identity const &to, char const *data, std::size_t size) noexcept
 Publish (enqueue) data to be sent to a specific udp::identity destination.
Public Member Functions inherited from qb::io::stream< io::udp::socket >
output_buffer_typeout () noexcept
 Get the output buffer.
std::size_t pendingWrite () const noexcept
 Get the number of bytes pending for writing.
int write (std::enable_if_t< has_method_write< io::udp::socket, int, const char *, std::size_t >::value, Available > *=nullptr) noexcept
 Write data from the output buffer to the transport.
char * publish (char const *data, std::size_t size) noexcept
 Add data to the output buffer for later writing.
void close () noexcept
 Close the stream.
Public Member Functions inherited from qb::io::istream< _IO_ >
 ~istream () noexcept
 Destructor.
_IO_ & transport () noexcept
 Get the underlying transport object.
const _IO_ & transport () const noexcept
 Get the underlying transport object (const version)
input_buffer_typein () noexcept
 Get the input buffer.
std::size_t pendingRead () const noexcept
 Get the number of bytes available for reading.
template<typename Available = void>
int read (std::enable_if_t< has_method_read< _IO_, int, char *, std::size_t >::value, Available > *=nullptr) noexcept
 Read data from the transport into the input buffer.
void flush (std::size_t size) noexcept
 Remove data from the front of the input buffer.
void eof () noexcept
 Handle end-of-file condition.
void close () noexcept
 Close the stream.

Static Public Attributes

static constexpr const bool has_server
 Flag indicating server association (false for UDP servers)
Static Public Attributes inherited from qb::io::async::io< _Derived >
static constexpr const bool has_server = false
 Indicates this component is not inherently a server.
Static Public Attributes inherited from qb::io::transport::udp
static constexpr const bool has_reset_on_pending_read = true
 Indicates that this transport implementation resets its input buffer state when a read operation is pending (characteristic of datagram processing).
Static Public Attributes inherited from qb::io::stream< io::udp::socket >
static constexpr const bool has_reset_on_pending_read
 Flag indicating whether the implementation resets pending reads.

Additional Inherited Members

Public Types inherited from qb::io::async::io< _Derived >
typedef io< _Derived > base_io_t
 Base I/O type alias for CRTP.
Public Types inherited from qb::io::stream< io::udp::socket >
using transport_io_type
 Type of the underlying transport IO.
using output_buffer_type
 Type of the output buffer.
Public Types inherited from qb::io::istream< _IO_ >
using transport_io_type = _IO_
 Type of the underlying transport IO.
using input_buffer_type = qb::allocator::pipe<char>
 Type of the input buffer.
Public Attributes inherited from qb::io::transport::udp
friend ProxyOut
 ProxyOut needs access to private members.
Protected Member Functions inherited from qb::io::async::io< _Derived >
void dispose ()
 Disposes of resources and finalizes disconnection for the I/O component.
Protected Member Functions inherited from qb::io::async::base< io< _Derived >, event::io >
 base ()
 Constructor that registers the event watcher with the current listener.
 ~base ()
 Destructor that unregisters the event watcher.
Protected Attributes inherited from qb::io::async::base< io< _Derived >, event::io >
event::io & _async_event
 Reference to the registered libev-based event watcher.
Protected Attributes inherited from qb::io::stream< io::udp::socket >
output_buffer_type _out_buffer
 Buffer for outgoing data.
Protected Attributes inherited from qb::io::istream< _IO_ >
_IO_ _in
 The underlying IO object.
input_buffer_type _in_buffer
 Buffer for incoming data.

Detailed Description

template<typename _Derived>
class qb::io::async::udp::server< _Derived >

Asynchronous UDP server implementation.

Alternative UDP server implementation with session tracking.

This template class implements a simple asynchronous UDP server. It combines the io class for asynchronous operations with the UDP transport for handling UDP communications. If the derived class defines a Protocol type, it will be used for processing UDP messages.

Template Parameters
_DerivedThe derived class type (CRTP pattern)

This template class implements a more complex UDP server that tracks client sessions based on their endpoint identity.

Template Parameters
_DerivedThe derived class type (CRTP pattern)
_SessionThe session class type for handling client communications

Constructor & Destructor Documentation

◆ server()

template<typename _Derived>
qb::io::async::udp::server< _Derived >::server ( )
inlinenoexcept

Constructor.

Creates a new UDP server. If the derived class defines a Protocol type that is not void, an instance of that protocol is created and attached to the server.

Member Data Documentation

◆ has_server

template<typename _Derived>
const bool qb::io::async::udp::server< _Derived >::has_server
staticconstexpr
Initial value:
=
false

Flag indicating server association (false for UDP servers)