12#ifndef ROC_NETIO_NETWORK_LOOP_H_
13#define ROC_NETIO_NETWORK_LOOP_H_
25#include "roc_core/semaphore.h"
217 static void task_sem_cb_(uv_async_t* handle);
218 static void stop_sem_cb_(uv_async_t* handle);
220 virtual void handle_terminate_completed(
IConn&,
void*);
221 virtual void handle_close_completed(
BasicPort&,
void*);
226 void process_pending_tasks_();
235 void update_num_ports_();
237 void close_all_sems_();
238 void close_all_ports_();
254 bool loop_initialized_;
256 uv_async_t stop_sem_;
257 bool stop_sem_initialized_;
259 uv_async_t task_sem_;
260 bool task_sem_initialized_;
Atomic integer. Provides sequential consistency. For a fine-grained memory order control,...
Memory allocator interface.
Intrusive doubly-linked list.
Thread-safe lock-free node-based intrusive multi-producer single-consumer queue.
Shared ownership intrusive pointer.
Base class for thread objects.
Connection acceptor interface.
Connection event handler interface.
Network task completion handler.
Resolver request result handler interface.
Termination handler interface.
PortHandle get_handle() const
Get created port handle.
AddTcpClientPort(TcpClientConfig &config, IConnHandler &conn_handler)
Set task parameters.
AddTcpServerPort(TcpServerConfig &config, IConnAcceptor &conn_acceptor)
Set task parameters.
PortHandle get_handle() const
Get created port handle.
Add UDP datagram receiver port.
AddUdpReceiverPort(UdpReceiverConfig &config, packet::IWriter &writer)
Set task parameters.
PortHandle get_handle() const
Get created port handle.
Add UDP datagram sender port.
PortHandle get_handle() const
Get created port handle.
AddUdpSenderPort(UdpSenderConfig &config)
Set task parameters.
packet::IWriter * get_writer() const
Get created port writer;.
RemovePort(PortHandle handle)
Set task parameters.
Resolve endpoint address.
const address::SocketAddr & get_address() const
Get resolved address.
ResolveEndpointAddress(const address::EndpointUri &endpoint_uri)
Set task parameters.
Subclasses for specific tasks.
Network event loop thread.
size_t num_ports() const
Get number of receiver and sender ports.
NetworkLoop(packet::PacketFactory &packet_factory, core::BufferFactory< uint8_t > &buffer_factory, core::IAllocator &allocator)
Initialize.
bool valid() const
Check if the object was successfully constructed.
void schedule(NetworkTask &task, INetworkTaskCompleter &completer)
Enqueue a task for asynchronous execution and return. The task should not be destroyed until the call...
bool schedule_and_wait(NetworkTask &task)
Enqueue a task for asynchronous execution and wait for its completion. The task should not be destroy...
virtual ~NetworkLoop()
Destroy. Stop all receivers and senders.
struct PortHandle * PortHandle
Opaque port handle.
Base class for network loop tasks.
Memory allocator interface.
Connection acceptor interface.
Connection event handler interface.
Network task completion handler.
Termination handler interface.
Intrusive doubly-linked list.
Multi-producer single-consumer queue.
AsyncOperationStatus
Asynchronous operation status.
Optionally constructed object.
TCP connection parameters.