class ugcs::vsm::Socket_processor::Stream

Overview

Socket specific stream. More…

#include <socket_processor.h>

class Stream: public ugcs::vsm::Io_stream
{
public:
    // typedefs

    typedef std::shared_ptr<Stream> Ptr;
    typedef std::weak_ptr<Stream> Weak_ptr;
    typedef Reference_guard<Stream::Ptr> Ref;
    typedef Callback_proxy<void, Io_buffer::Ptr, Io_result, Socket_address::Ptr> Read_from_handler;
    typedef std::unique_ptr<std::vector<uint8_t>> Buf_ptr;

    // classes

    template <typename T>
    class Circular_buffer;

    // construction

    template <typename... Args>
    Stream(
        Socket_processor::Ptr processor,
        Args&&... args
        );

    // methods

    template <typename... Args>
    static Ptr Create(Args&&... args);

    void Set_state(Io_stream::State state);
    void Set_connect_request(Io_request::Ptr request);
    void Close_socket();
    Io_request::Ptr Get_connect_request();
    void Abort_pending_requests(Io_result result = Io_result::CLOSED);
    virtual Operation_waiter Read_from(size_t max_to_read, Read_from_handler completion_handler, Request_completion_context::Ptr comp_ctx = Request_temp_completion_context::Create());
    virtual Operation_waiter Write_to(Io_buffer::Ptr, Socket_address::Ptr dest_addr, Write_handler completion_handler, Request_completion_context::Ptr comp_ctx = Request_temp_completion_context::Create());
    Socket_address::Ptr Get_peer_address();
    void Set_peer_address(Socket_address::Ptr);
    Socket_address::Ptr Get_local_address();

    bool Add_multicast_group(
        Socket_address::Ptr interface,
        Socket_address::Ptr multicast
        );

    bool Remove_multicast_group(
        Socket_address::Ptr interface,
        Socket_address::Ptr multicast
        );

    bool Enable_broadcast(bool enable);
};

Inherited Members

public:
    // typedefs

    typedef std::shared_ptr<Io_stream> Ptr;
    typedef std::weak_ptr<Io_stream> Weak_ptr;
    typedef Reference_guard<Io_stream::Ptr> Ref;
    typedef int64_t Offset;
    typedef Callback_proxy<void, Io_result> Write_handler;
    typedef Callback_proxy<void, Io_buffer::Ptr, Io_result> Read_handler;
    typedef Callback_proxy<void> Close_handler;

    // enums

    enum State;
    enum Type;

    // fields

    static const Offset OFFSET_NONE;
    static const Offset OFFSET_END;

    // methods

    template <typename... Args>
    static Ptr Create(Args&&... args);

    static const char* Io_result_as_char(const Io_result res);
    void Add_ref();
    void Release_ref();
    Operation_waiter Write(Io_buffer::Ptr buffer, Offset offset, Write_handler completion_handler = Make_dummy_callback<void, Io_result>(), Request_completion_context::Ptr comp_ctx = Request_temp_completion_context::Create());
    Operation_waiter Write(Io_buffer::Ptr buffer, Write_handler completion_handler = Make_dummy_callback<void, Io_result>(), Request_completion_context::Ptr comp_ctx = Request_temp_completion_context::Create());

    Operation_waiter Read(
        size_t max_to_read,
        size_t min_to_read,
        Offset offset,
        Read_handler completion_handler = Make_dummy_callback<void, Io_buffer::Ptr, Io_result>(),
        Request_completion_context::Ptr comp_ctx = Request_temp_completion_context::Create()
        );

    Operation_waiter Read(
        size_t max_to_read,
        size_t min_to_read = 1,
        Read_handler completion_handler = Make_dummy_callback<void, Io_buffer::Ptr, Io_result>(),
        Request_completion_context::Ptr comp_ctx = Request_temp_completion_context::Create()
        );

    Operation_waiter Close(Close_handler completion_handler = Make_dummy_callback<void>(), Request_completion_context::Ptr comp_ctx = Request_temp_completion_context::Create());
    State Get_state() const;
    bool Is_closed() const;
    std::string Get_name() const;
    Type Get_type() const;

Detailed Documentation

Socket specific stream.

Typedefs

typedef std::shared_ptr<Stream> Ptr

Pointer type.

typedef std::weak_ptr<Stream> Weak_ptr

Pointer type.

typedef Callback_proxy<void, Io_buffer::Ptr, Io_result, Socket_address::Ptr> Read_from_handler

Default prototype for read operation completion handler.

Methods

template <typename... Args>
static Ptr Create(Args&&... args)

Create an instance.

virtual Operation_waiter Read_from(size_t max_to_read, Read_from_handler completion_handler, Request_completion_context::Ptr comp_ctx = Request_temp_completion_context::Create())

Used to read from udp socket.

Wrapper for recvfrom() call completion handler has source address as parameters. It can be used to subsequent Write_to() calls.

virtual Operation_waiter Write_to(
    Io_buffer::Ptr,
    Socket_address::Ptr dest_addr,
    Write_handler completion_handler,
    Request_completion_context::Ptr comp_ctx = Request_temp_completion_context::Create()
    )

Used to write to udp socket.

Wrapper for sendto() call.