zmqpp 4.1.2
C++ bindings for 0mq (libzmq)
Loading...
Searching...
No Matches
Classes | Public Types | Public Member Functions | Private Types | Private Member Functions | Static Private Member Functions | Private Attributes | List of all members
zmqpp::loop Class Reference

Loop object that helps to manage multiple socket by calling a user-defined handler for each socket when a watched event occurs. More...

#include <loop.hpp>

Collaboration diagram for zmqpp::loop:
Collaboration graph
[legend]

Classes

struct  timer_t
 

Public Types

typedef void * timer_id_t
 Type used to identify created timers withing loop. More...
 
typedef std::function< bool(void) > Callable
 

Public Member Functions

 loop ()
 Construct an empty polling model. More...
 
virtual ~loop ()
 Cleanup reactor. More...
 
void add (socket_t &socket, Callable callable, short const event=poller::poll_in)
 Add a socket to the loop, providing a handler that will be called when the monitored events occur. More...
 
void add (raw_socket_t const descriptor, Callable callable, short const event=poller::poll_in|poller::poll_error)
 
timer_id_t add (std::chrono::milliseconds delay, size_t times, Callable callable)
 Add a timed event to the loop, providing a handler that will be called when timer fires. More...
 
void reset (timer_id_t const timer)
 Reset timer in the loop, it will start counting delay time again. More...
 
void remove (timer_id_t const timer)
 Remove timer event from the loop. More...
 
void remove (socket_t const &socket)
 Stop monitoring a socket. More...
 
void remove (raw_socket_t const descriptor)
 Stop monitoring a standard socket. More...
 
void start ()
 Starts loop. More...
 

Private Types

typedef std::pair< zmq_pollitem_t, CallablePollItemCallablePair
 
typedef std::pair< std::unique_ptr< timer_t >, CallableTimerItemCallablePair
 

Private Member Functions

void add (const zmq_pollitem_t &item, Callable callable)
 
void add (std::unique_ptr< timer_t >, Callable callable)
 
bool start_handle_timers ()
 
bool start_handle_poller ()
 
void flush_remove_later ()
 Flush the fdRemoveLater_ and sockRemoveLater_ vector, effectively removing the item for the reactor and poller. More...
 
long tickless ()
 Calculate min time to wait in poller. More...
 

Static Private Member Functions

static bool TimerItemCallablePairComp (const TimerItemCallablePair &lhs, const TimerItemCallablePair &rhs)
 

Private Attributes

std::vector< PollItemCallablePairitems_
 
std::list< TimerItemCallablePairtimers_
 
std::vector< const socket_t * > sockRemoveLater_
 
std::vector< raw_socket_tfdRemoveLater_
 
std::vector< timer_id_ttimerRemoveLater_
 
poller poller_
 
bool dispatching_
 
bool rebuild_poller_
 

Detailed Description

Loop object that helps to manage multiple socket by calling a user-defined handler for each socket when a watched event occurs.

Calls assigned user-defined handler for timed events - repeaded and one-shot.

It uses zmq::poller as the underlying polling mechanism.

Member Typedef Documentation

◆ Callable

typedef std::function<bool (void) > zmqpp::loop::Callable

◆ PollItemCallablePair

typedef std::pair<zmq_pollitem_t, Callable> zmqpp::loop::PollItemCallablePair
private

◆ timer_id_t

typedef void* zmqpp::loop::timer_id_t

Type used to identify created timers withing loop.

◆ TimerItemCallablePair

typedef std::pair<std::unique_ptr<timer_t>, Callable> zmqpp::loop::TimerItemCallablePair
private

Constructor & Destructor Documentation

◆ loop()

zmqpp::loop::loop ( )

Construct an empty polling model.

◆ ~loop()

zmqpp::loop::~loop ( )
virtual

Cleanup reactor.

Any sockets will need to be closed separately.

Member Function Documentation

◆ add() [1/5]

void zmqpp::loop::add ( const zmq_pollitem_t &  item,
Callable  callable 
)
private

◆ add() [2/5]

void zmqpp::loop::add ( raw_socket_t const  descriptor,
Callable  callable,
short const  event = poller::poll_in | poller::poll_error 
)

Add a standard socket to the loop, providing a handler that will be called when the monitored events occur.

Parameters
descriptorthe standard socket to monitor (SOCKET under Windows, a file descriptor otherwise).
callablethe function that will be called by the loop when a registered event occurs on fd.
eventthe event flags to monitor.

◆ add() [3/5]

void zmqpp::loop::add ( socket_t socket,
Callable  callable,
short const  event = poller::poll_in 
)

Add a socket to the loop, providing a handler that will be called when the monitored events occur.

Parameters
socketthe socket to monitor.
callablethe function that will be called by the loop when a registered event occurs on socket.
eventthe event flags to monitor on the socket.

◆ add() [4/5]

loop::timer_id_t zmqpp::loop::add ( std::chrono::milliseconds  delay,
size_t  times,
Callable  callable 
)

Add a timed event to the loop, providing a handler that will be called when timer fires.

Parameters
delaytime after which handler will be executed.
timeshow many times should timer be reneved - 0 for infinte ammount.
callablethe function that will be called by the loop after delay.

◆ add() [5/5]

void zmqpp::loop::add ( std::unique_ptr< timer_t item,
Callable  callable 
)
private

◆ flush_remove_later()

void zmqpp::loop::flush_remove_later ( )
private

Flush the fdRemoveLater_ and sockRemoveLater_ vector, effectively removing the item for the reactor and poller.

◆ remove() [1/3]

void zmqpp::loop::remove ( raw_socket_t const  descriptor)

Stop monitoring a standard socket.

Parameters
descriptorthe standard socket to stop monitoring.

◆ remove() [2/3]

void zmqpp::loop::remove ( socket_t const &  socket)

Stop monitoring a socket.

Parameters
socketthe socket to stop monitoring.

◆ remove() [3/3]

void zmqpp::loop::remove ( timer_id_t const  timer)

Remove timer event from the loop.

Parameters
timeridentifier in the loop.

◆ reset()

void zmqpp::loop::reset ( timer_id_t const  timer)

Reset timer in the loop, it will start counting delay time again.

Times argument is preserved.

Parameters
timeridentifier in the loop.

◆ start()

void zmqpp::loop::start ( )

Starts loop.

It will block until one of handlers returns false.

◆ start_handle_poller()

bool zmqpp::loop::start_handle_poller ( )
private

◆ start_handle_timers()

bool zmqpp::loop::start_handle_timers ( )
private

◆ tickless()

long zmqpp::loop::tickless ( )
private

Calculate min time to wait in poller.

◆ TimerItemCallablePairComp()

bool zmqpp::loop::TimerItemCallablePairComp ( const TimerItemCallablePair lhs,
const TimerItemCallablePair rhs 
)
staticprivate

Member Data Documentation

◆ dispatching_

bool zmqpp::loop::dispatching_
private

◆ fdRemoveLater_

std::vector<raw_socket_t> zmqpp::loop::fdRemoveLater_
private

◆ items_

std::vector<PollItemCallablePair> zmqpp::loop::items_
private

◆ poller_

poller zmqpp::loop::poller_
private

◆ rebuild_poller_

bool zmqpp::loop::rebuild_poller_
private

◆ sockRemoveLater_

std::vector<const socket_t *> zmqpp::loop::sockRemoveLater_
private

◆ timerRemoveLater_

std::vector<timer_id_t> zmqpp::loop::timerRemoveLater_
private

◆ timers_

std::list<TimerItemCallablePair> zmqpp::loop::timers_
private

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