Async destination abstraction where bytes can be written to. More...
#include <AsyncStreams.h>
Classes | |
struct | Request |
Public Member Functions | |
Result | init (AsyncBuffersPool &buffersPool, Span< Request > requests) |
Emitted when no more data can be written. More... | |
Result | write (AsyncBufferView::ID bufferID, Function< void(AsyncBufferView::ID)> cb={}) |
Writes a buffer (that must be allocated by the AsyncBuffersPool passed in AsyncWritableStream) When the buffer it will be actually written, AsyncWritableStream::eventWritten will be raised and its reference count will be decreased. More... | |
Result | write (Span< const char > data, Function< void(AsyncBufferView::ID)> cb={}) |
Try requesting a buffer big enough and copy data into it. More... | |
template<size_t N> | |
Result | write (const char(&str)[N]) |
Write a C-string literal in the stream. More... | |
void | end () |
Ends the writable stream, waiting for all in-flight and queued writes to finish. More... | |
AsyncBuffersPool & | getBuffersPool () |
Obtains the buffers pool to access its data. More... | |
void | finishedWriting (AsyncBufferView::ID bufferID, Function< void(AsyncBufferView::ID)> &&cb, Result res) |
Signals that the given buffer (previously queued by write) has been fully written. More... | |
void | resumeWriting () |
Resumes writing queued requests for this stream. More... | |
Result | unshift (AsyncBufferView::ID bufferID, Function< void(AsyncBufferView::ID)> &&cb) |
Puts back a buffer at the top of the write queue. More... | |
void | emitError (Result error) |
Signals an async error received. More... | |
void | tryAsync (Result potentialError) |
Will emit error if the passed in Result is false. More... | |
void | stop () |
Public Attributes | |
Function< Result(AsyncBufferView::ID, Function< void(AsyncBufferView::ID)>)> | asyncWrite |
Function that every stream must define to implement its custom write operation. More... | |
Event< MaxListeners, Result > | eventError |
Event< MaxListeners > | eventDrain |
Emitted when an error occurs. More... | |
Event< MaxListeners > | eventFinish |
Emitted when write queue is empty. More... | |
Function< bool()> | canEndWritable |
Allows keeping a writable in ENDING state until it has finished flushing all pending data. More... | |
Static Public Attributes | |
static constexpr int | MaxListeners = 8 |
Async destination abstraction where bytes can be written to.
When buffers are pushed faster than the stream can handle, they will get queued. Queuing process happens with a linked list stored in the AsyncBufferView itself. As AsyncBufferView contains a fixed (at init) number of buffers, the queue is bounded by the fact that user will be unable to allocate buffers to write until at least one will be made available again (i.e. a write finishes). User can listen to AsyncWritableStream::eventWritten to know when a buffer is written (and its refcount decreased) or AsyncWritableStream::eventDrain when the queue is empty.
void SC::AsyncWritableStream::emitError | ( | Result | error | ) |
Signals an async error received.
void SC::AsyncWritableStream::end | ( | ) |
Ends the writable stream, waiting for all in-flight and queued writes to finish.
After this happens, AsyncWritableStream::eventFinished will be raised
void SC::AsyncWritableStream::finishedWriting | ( | AsyncBufferView::ID | bufferID, |
Function< void(AsyncBufferView::ID)> && | cb, | ||
Result | res | ||
) |
Signals that the given buffer (previously queued by write) has been fully written.
AsyncBuffersPool & SC::AsyncWritableStream::getBuffersPool | ( | ) |
Obtains the buffers pool to access its data.
Result SC::AsyncWritableStream::init | ( | AsyncBuffersPool & | buffersPool, |
Span< Request > | requests | ||
) |
Emitted when no more data can be written.
Inits the writable stream
buffersPool | An instance of AsyncBuffersPool providing write buffers |
requests | User owned memory to hold a circular buffer for write requests |
void SC::AsyncWritableStream::resumeWriting | ( | ) |
Resumes writing queued requests for this stream.
void SC::AsyncWritableStream::tryAsync | ( | Result | potentialError | ) |
Will emit error if the passed in Result is false.
Result SC::AsyncWritableStream::unshift | ( | AsyncBufferView::ID | bufferID, |
Function< void(AsyncBufferView::ID)> && | cb | ||
) |
Puts back a buffer at the top of the write queue.
Result SC::AsyncWritableStream::write | ( | AsyncBufferView::ID | bufferID, |
Function< void(AsyncBufferView::ID)> | cb = {} |
||
) |
Writes a buffer (that must be allocated by the AsyncBuffersPool passed in AsyncWritableStream) When the buffer it will be actually written, AsyncWritableStream::eventWritten will be raised and its reference count will be decreased.
bufferID | Buffer allocated from the associated AsyncBuffersPool (AsyncWritableStream::getBuffersPool) |
cb | Callback that will be invoked when the write is finished |
Write a C-string literal in the stream.
Result SC::AsyncWritableStream::write | ( | Span< const char > | data, |
Function< void(AsyncBufferView::ID)> | cb = {} |
||
) |
Try requesting a buffer big enough and copy data into it.
Function<Result(AsyncBufferView::ID, Function<void(AsyncBufferView::ID)>)> SC::AsyncWritableStream::asyncWrite |
Function that every stream must define to implement its custom write operation.
Function<bool()> SC::AsyncWritableStream::canEndWritable |
Allows keeping a writable in ENDING state until it has finished flushing all pending data.
If a writable stream redefines this function it should return true to allow transitioning to ENDED state and return false to keep staying in ENDING state.
Event<MaxListeners> SC::AsyncWritableStream::eventDrain |
Emitted when an error occurs.
Event<MaxListeners> SC::AsyncWritableStream::eventFinish |
Emitted when write queue is empty.