17 "Cannot open NetworkSource: NetworkService not available");
25 "NetworkSource: endpoint open failed");
30 [
this](uint64_t
id,
const uint8_t* data,
size_t size, std::string_view addr) {
59 auto* w =
m_waiters_head.exchange(
nullptr, std::memory_order_acq_rel);
63 auto* next = w->m_next.load(std::memory_order_relaxed);
79 return !
m_queue.snapshot().empty();
84 return m_queue.snapshot().size();
101 awaiter->
m_next.store(head, std::memory_order_relaxed);
103 std::memory_order_release, std::memory_order_relaxed));
108 auto* expected = awaiter;
110 awaiter->
m_next.load(std::memory_order_relaxed),
111 std::memory_order_acq_rel)) {
117 auto* next = cur->
m_next.load(std::memory_order_relaxed);
118 if (next == awaiter) {
119 cur->m_next.compare_exchange_strong(next,
120 awaiter->
m_next.load(std::memory_order_relaxed),
121 std::memory_order_acq_rel);
#define MF_WARN(comp, ctx,...)
#define MF_DEBUG(comp, ctx,...)
std::atomic< NetworkAwaiter * > m_next
Intrusive list link for lock-free waiter broadcast.
Awaiter for suspending a coroutine until a network message arrives.
Interface * get_service()
Query for a backend service.
static BackendRegistry & instance()
Get the global registry instance.
void register_waiter(Kriya::NetworkAwaiter *awaiter)
~NetworkSource()
Close the endpoint and release all resources.
void unregister_waiter(Kriya::NetworkAwaiter *awaiter)
Kriya::NetworkAwaiter next_message()
Create an awaiter for the next message.
void clear()
Clear all pending messages.
std::optional< Core::NetworkMessage > pop_message()
Memory::LockFreeQueue< Core::NetworkMessage, QUEUE_CAPACITY > m_queue
std::atomic< Kriya::NetworkAwaiter * > m_waiters_head
Head of the intrusive lock-free waiter list.
bool has_pending() const
Check if messages are pending.
size_t pending_count() const
Get number of pending messages.
void signal(const Core::NetworkMessage &message)
Signal that a message arrived (called from Asio IO thread)
NetworkSource(const Core::EndpointInfo &info)
Open a network endpoint and begin receiving.
@ Networking
Network operations (data transfer, protocol handling)
@ Vruta
Coroutines, schedulers, clocks, task management.
Describes one logical send/receive endpoint managed by a backend.
std::vector< uint8_t > data
std::string sender_address
A received datagram or framed message with sender metadata.
std::function< void(uint64_t endpoint_id, std::function< void(uint64_t, const uint8_t *, size_t, std::string_view)> callback)> set_endpoint_receive_callback
Register a per-endpoint receive callback.
Backend network transport service interface.