|
MayaFlux 0.4.0
Digital-First Multimedia Processing Framework
|
Awaiter for suspending a coroutine until a network message arrives. More...
#include <NetworkAwaiter.hpp>
Collaboration diagram for MayaFlux::Kriya::NetworkAwaiter:Public Member Functions | |
| bool | await_ready () |
| Check if a message is already queued. | |
| Core::NetworkMessage | await_resume () |
| Return the received message on resume. | |
| void | await_suspend (std::coroutine_handle<> handle) |
| Suspend the coroutine and register with the source. | |
| void | deliver (const Core::NetworkMessage &message) |
| Called by NetworkSource::signal() with the incoming message. | |
| NetworkAwaiter (const NetworkAwaiter &)=delete | |
| NetworkAwaiter (NetworkAwaiter &&) noexcept=default | |
| NetworkAwaiter (Vruta::NetworkSource &source) | |
| NetworkAwaiter & | operator= (const NetworkAwaiter &)=delete |
| NetworkAwaiter & | operator= (NetworkAwaiter &&) noexcept=delete |
| ~NetworkAwaiter () | |
Private Attributes | |
| std::coroutine_handle | m_handle |
| bool | m_is_suspended {} |
| std::atomic< NetworkAwaiter * > | m_next { nullptr } |
| Intrusive list link for lock-free waiter broadcast. | |
| Core::NetworkMessage | m_result |
| Vruta::NetworkSource & | m_source |
Friends | |
| class | Vruta::NetworkSource |
Awaiter for suspending a coroutine until a network message arrives.
Follows the same structural pattern as EventAwaiter. Works with any coroutine type: SoundRoutine, GraphicsRoutine, Event, ComplexRoutine.
Multiple awaiters may register against the same NetworkSource simultaneously. signal() delivers a copy of the message directly to each awaiter — no shared queue contention between waiters.
The queue on NetworkSource is used only by await_ready() for the no-suspend fast path. Once suspended, the awaiter receives its message via deliver() called directly from NetworkSource::signal().
The awaiter does not own the NetworkSource. The source must outlive any suspended awaiter.
Definition at line 38 of file NetworkAwaiter.hpp.