class ugcs::vsm::Piped_request_waiter

Overview

Request waiter which uses a pipe to signal about request submissions. More…

#include <piped_request_waiter.h>

class Piped_request_waiter: public ugcs::vsm::Request_container::Request_waiter
{
public:
    // typedefs

    typedef std::shared_ptr<Piped_request_waiter> Ptr;
    typedef std::weak_ptr<Piped_request_waiter> Weak_ptr;

    // methods

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

    virtual void Notify();
    bool Wait(std::chrono::milliseconds timeout = std::chrono::milliseconds(-1));
    void Ack();
    sockets::Socket_handle Get_wait_pipe();
};

Inherited Members

public:
    // typedefs

    typedef std::shared_ptr<Request_waiter> Ptr;
    typedef std::weak_ptr<Request_waiter> Weak_ptr;
    typedef Callback_base<bool>::Ptr<> Predicate;

    // classes

    class Locker;

    // methods

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

    virtual void Notify();
    Locker Lock();
    Locker Lock_notify();

    int Wait_and_process(
        const std::initializer_list<Request_container::Ptr>& containers,
        std::chrono::milliseconds timeout = std::chrono::milliseconds::zero(),
        int requests_limit = 0,
        Predicate predicate = Predicate()
        );

    int Wait_and_process(
        const std::list<Request_container::Ptr>& containers,
        std::chrono::milliseconds timeout = std::chrono::milliseconds::zero(),
        int requests_limit = 0,
        Predicate predicate = Predicate()
        );

Detailed Documentation

Request waiter which uses a pipe to signal about request submissions.

Typedefs

typedef std::shared_ptr<Piped_request_waiter> Ptr

Pointer type.

typedef std::weak_ptr<Piped_request_waiter> Weak_ptr

Pointer type.

Methods

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

Create an instance.

virtual void Notify()

Notify all listeners about request submission.

bool Wait(std::chrono::milliseconds timeout = std::chrono::milliseconds(-1))

Wait for an event for specific amount of time.

void Ack()

Consume one notification event.

sockets::Socket_handle Get_wait_pipe()

Get the platform handler of the wait pipe.