WPILibC++ 2024.3.2
wpi::uv::Stream Class Reference

Stream handle. More...

#include <wpinet/uv/Stream.h>

Inheritance diagram for wpi::uv::Stream:
wpi::uv::Handle wpi::uv::StreamImpl< Tty, uv_tty_t > wpi::uv::NetworkStream wpi::uv::StreamImpl< T, U > wpi::uv::Tty wpi::uv::NetworkStreamImpl< Pipe, uv_pipe_t > wpi::uv::NetworkStreamImpl< Tcp, uv_tcp_t > wpi::uv::NetworkStreamImpl< T, U > wpi::uv::Pipe wpi::uv::Tcp

Public Member Functions

std::shared_ptr< Streamshared_from_this ()
 
std::shared_ptr< const Streamshared_from_this () const
 
void Shutdown (const std::shared_ptr< ShutdownReq > &req)
 Shutdown the outgoing (write) side of a duplex stream. More...
 
void Shutdown (std::function< void()> callback=nullptr)
 Shutdown the outgoing (write) side of a duplex stream. More...
 
void StartRead ()
 Start reading data from an incoming stream. More...
 
void StopRead ()
 Stop reading data from the stream. More...
 
void Write (std::span< const Buffer > bufs, const std::shared_ptr< WriteReq > &req)
 Write data to the stream. More...
 
void Write (std::initializer_list< Buffer > bufs, const std::shared_ptr< WriteReq > &req)
 Write data to the stream. More...
 
void Write (std::span< const Buffer > bufs, std::function< void(std::span< Buffer >, Error)> callback)
 Write data to the stream. More...
 
void Write (std::initializer_list< Buffer > bufs, std::function< void(std::span< Buffer >, Error)> callback)
 Write data to the stream. More...
 
int TryWrite (std::span< const Buffer > bufs)
 Queue a write request if it can be completed immediately. More...
 
int TryWrite (std::initializer_list< Buffer > bufs)
 Queue a write request if it can be completed immediately. More...
 
int TryWrite2 (std::span< const Buffer > bufs, Stream &send)
 Same as TryWrite() and extended write function for sending handles over a pipe. More...
 
int TryWrite2 (std::initializer_list< Buffer > bufs, Stream &send)
 Same as TryWrite() and extended write function for sending handles over a pipe. More...
 
bool IsReadable () const noexcept
 Check if the stream is readable. More...
 
bool IsWritable () const noexcept
 Checks if the stream is writable. More...
 
bool SetBlocking (bool enable) noexcept
 Enable or disable blocking mode for a stream. More...
 
size_t GetWriteQueueSize () const noexcept
 Gets the amount of queued bytes waiting to be sent. More...
 
uv_stream_tGetRawStream () const noexcept
 Get the underlying stream data structure. More...
 
- Public Member Functions inherited from wpi::uv::Handle
 Handle (const Handle &)=delete
 
 Handle (Handle &&)=delete
 
Handleoperator= (const Handle &)=delete
 
Handleoperator= (Handle &&)=delete
 
virtual ~Handle () noexcept
 
Type GetType () const noexcept
 Get the type of the handle. More...
 
std::string_view GetTypeName () const noexcept
 Get the name of the type of the handle. More...
 
std::shared_ptr< LoopGetLoop () const noexcept
 Get the loop where this handle runs. More...
 
LoopGetLoopRef () const noexcept
 Get the loop where this handle runs. More...
 
bool IsActive () const noexcept
 Check if the handle is active. More...
 
bool IsClosing () const noexcept
 Check if a handle is closing or closed. More...
 
void Close () noexcept
 Request handle to be closed. More...
 
void SetLoopClosing (bool loopClosing) noexcept
 Set if the loop is closing. More...
 
bool IsLoopClosing () const noexcept
 Get the loop closing status. More...
 
void Reference () noexcept
 Reference the given handle. More...
 
void Unreference () noexcept
 Unreference the given handle. More...
 
bool HasReference () const noexcept
 Check if the given handle is referenced. More...
 
size_t RawSize () const noexcept
 Return the size of the underlying handle type. More...
 
uv_handle_tGetRawHandle () const noexcept
 Get the underlying handle data structure. More...
 
void SetBufferAllocator (std::function< Buffer(size_t)> alloc, std::function< void(Buffer &)> dealloc)
 Set the functions used for allocating and releasing buffers. More...
 
void FreeBuf (Buffer &buf) const noexcept
 Free a buffer. More...
 
template<typename T = void>
std::shared_ptr< T > GetData () const
 Gets user-defined data. More...
 
void SetData (std::shared_ptr< void > data)
 Sets user-defined data. More...
 
void SetLogger (Logger *logger)
 Sets logger. More...
 
LoggerGetLogger () const
 Gets logger. More...
 
void ReportError (int err) const
 Report an error. More...
 

Public Attributes

sig::Signal< Buffer &, size_t > data
 Signal generated when data was read on a stream. More...
 
sig::Signal end
 Signal generated when no more read data is available. More...
 
- Public Attributes inherited from wpi::uv::Handle
sig::Signal< Errorerror
 Error signal. More...
 
sig::Signal closed
 Closed signal. More...
 

Protected Member Functions

 Stream (uv_stream_t *uv_stream)
 
- Protected Member Functions inherited from wpi::uv::Handle
 Handle (uv_handle_t *uv_handle)
 
void Keep () noexcept
 
void Release () noexcept
 
void ForceClosed () noexcept
 
template<typename F , typename... Args>
bool Invoke (F &&f, Args &&... args) const
 

Additional Inherited Members

- Public Types inherited from wpi::uv::Handle
using Type = uv_handle_type
 
- Static Protected Member Functions inherited from wpi::uv::Handle
static void AllocBuf (uv_handle_t *handle, size_t size, uv_buf_t *buf)
 
static void DefaultFreeBuf (Buffer &buf)
 

Detailed Description

Stream handle.

Stream handles provide an abstraction of a duplex communication channel. This is an abstract type; there are three stream implementations (Tcp, Pipe, and Tty).

Constructor & Destructor Documentation

◆ Stream()

wpi::uv::Stream::Stream ( uv_stream_t uv_stream)
inlineexplicitprotected

Member Function Documentation

◆ GetRawStream()

uv_stream_t * wpi::uv::Stream::GetRawStream ( ) const
inlinenoexcept

Get the underlying stream data structure.

Returns
The underlying stream data structure.

◆ GetWriteQueueSize()

size_t wpi::uv::Stream::GetWriteQueueSize ( ) const
inlinenoexcept

Gets the amount of queued bytes waiting to be sent.

Returns
Amount of queued bytes waiting to be sent.

◆ IsReadable()

bool wpi::uv::Stream::IsReadable ( ) const
inlinenoexcept

Check if the stream is readable.

Returns
True if the stream is readable, false otherwise.

◆ IsWritable()

bool wpi::uv::Stream::IsWritable ( ) const
inlinenoexcept

Checks if the stream is writable.

Returns
True if the stream is writable, false otherwise.

◆ SetBlocking()

bool wpi::uv::Stream::SetBlocking ( bool  enable)
inlinenoexcept

Enable or disable blocking mode for a stream.

When blocking mode is enabled all writes complete synchronously. The interface remains unchanged otherwise, e.g. completion or failure of the operation will still be reported through events which are emitted asynchronously.

Parameters
enableTrue to enable blocking mode, false otherwise.
Returns
True in case of success, false otherwise.

◆ shared_from_this() [1/2]

std::shared_ptr< Stream > wpi::uv::Stream::shared_from_this ( )
inline

◆ shared_from_this() [2/2]

std::shared_ptr< const Stream > wpi::uv::Stream::shared_from_this ( ) const
inline

◆ Shutdown() [1/2]

void wpi::uv::Stream::Shutdown ( const std::shared_ptr< ShutdownReq > &  req)

Shutdown the outgoing (write) side of a duplex stream.

It waits for pending write requests to complete. HandleShutdownComplete() is called on the request after shutdown is complete.

Parameters
reqshutdown request

◆ Shutdown() [2/2]

void wpi::uv::Stream::Shutdown ( std::function< void()>  callback = nullptr)

Shutdown the outgoing (write) side of a duplex stream.

It waits for pending write requests to complete. The callback is called after shutdown is complete. Errors will be reported to the stream error handler.

Parameters
callbackCallback function to call when shutdown completes
Returns
Connection object for the callback

◆ StartRead()

void wpi::uv::Stream::StartRead ( )

Start reading data from an incoming stream.

This will only succeed after a connection has been established.

A data signal will be emitted several times until there is no more data to read or StopRead() is called. An end signal will be emitted when there is no more data to read.

◆ StopRead()

void wpi::uv::Stream::StopRead ( )
inline

Stop reading data from the stream.

This function is idempotent and may be safely called on a stopped stream.

◆ TryWrite() [1/2]

int wpi::uv::Stream::TryWrite ( std::initializer_list< Buffer bufs)
inline

Queue a write request if it can be completed immediately.

Same as Write(), but won’t queue a write request if it can’t be completed immediately. An error signal will be emitted in case of errors.

Parameters
bufsThe buffers to be written to the stream.
Returns
Number of bytes written, or negative (error code) on error

◆ TryWrite() [2/2]

int wpi::uv::Stream::TryWrite ( std::span< const Buffer bufs)

Queue a write request if it can be completed immediately.

Same as Write(), but won’t queue a write request if it can’t be completed immediately. An error signal will be emitted in case of errors.

Parameters
bufsThe buffers to be written to the stream.
Returns
Number of bytes written, or negative (error code) on error

◆ TryWrite2() [1/2]

int wpi::uv::Stream::TryWrite2 ( std::initializer_list< Buffer bufs,
Stream send 
)
inline

Same as TryWrite() and extended write function for sending handles over a pipe.

Try to send a handle is not supported on Windows, where it returns UV_EAGAIN.

Parameters
bufsThe buffers to be written to the stream.
sendsend stream
Returns
Number of bytes written, or negative (error code) on error

◆ TryWrite2() [2/2]

int wpi::uv::Stream::TryWrite2 ( std::span< const Buffer bufs,
Stream send 
)

Same as TryWrite() and extended write function for sending handles over a pipe.

Try to send a handle is not supported on Windows, where it returns UV_EAGAIN.

Parameters
bufsThe buffers to be written to the stream.
sendsend stream
Returns
Number of bytes written, or negative (error code) on error

◆ Write() [1/4]

void wpi::uv::Stream::Write ( std::initializer_list< Buffer bufs,
const std::shared_ptr< WriteReq > &  req 
)
inline

Write data to the stream.

Data are written in order. The lifetime of the data pointers passed in the bufs parameter must exceed the lifetime of the write request. An easy way to ensure this is to have the write request keep track of the data and use either its Complete() function or destructor to free the data.

The finish signal will be emitted on the request object when the data has been written (or if an error occurs). The error signal will be emitted on the request object in case of errors.

Parameters
bufsThe buffers to be written to the stream.
reqwrite request

◆ Write() [2/4]

void wpi::uv::Stream::Write ( std::initializer_list< Buffer bufs,
std::function< void(std::span< Buffer >, Error)>  callback 
)
inline

Write data to the stream.

Data are written in order. The lifetime of the data pointers passed in the bufs parameter must exceed the lifetime of the write request. The callback can be used to free data after the request completes.

The callback will be called when the data has been written (even if an error occurred). Errors will be reported to the stream error handler.

Parameters
bufsThe buffers to be written to the stream.
callbackCallback function to call when the write completes

◆ Write() [3/4]

void wpi::uv::Stream::Write ( std::span< const Buffer bufs,
const std::shared_ptr< WriteReq > &  req 
)

Write data to the stream.

Data are written in order. The lifetime of the data pointers passed in the bufs parameter must exceed the lifetime of the write request. An easy way to ensure this is to have the write request keep track of the data and use either its Complete() function or destructor to free the data.

The finish signal will be emitted on the request object when the data has been written (or if an error occurs). The error signal will be emitted on the request object in case of errors.

Parameters
bufsThe buffers to be written to the stream.
reqwrite request

◆ Write() [4/4]

void wpi::uv::Stream::Write ( std::span< const Buffer bufs,
std::function< void(std::span< Buffer >, Error)>  callback 
)

Write data to the stream.

Data are written in order. The lifetime of the data pointers passed in the bufs parameter must exceed the lifetime of the write request. The callback can be used to free data after the request completes.

The callback will be called when the data has been written (even if an error occurred). Errors will be reported to the stream error handler.

Parameters
bufsThe buffers to be written to the stream.
callbackCallback function to call when the write completes

Member Data Documentation

◆ data

sig::Signal<Buffer&, size_t> wpi::uv::Stream::data

Signal generated when data was read on a stream.

◆ end

sig::Signal wpi::uv::Stream::end

Signal generated when no more read data is available.


The documentation for this class was generated from the following file: