zmqpp 4.1.2
C++ bindings for 0mq (libzmq)
Loading...
Searching...
No Matches
loop.hpp
Go to the documentation of this file.
1/*
2 * This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
5 *
6 * This file is part of zmqpp.
7 * Copyright (c) 2011-2015 Contributors as noted in the AUTHORS file.
8 */
9
10#pragma once
11
12#include <tuple>
13#include <vector>
14#include <list>
15#include <chrono>
16#include <functional>
17#include <memory>
18
19#include "compatibility.hpp"
20#include "poller.hpp"
21
22namespace zmqpp
23{
24
25 class socket;
27
35 class loop
36 {
37 public:
41 typedef void * timer_id_t;
42 typedef std::function<bool (void) > Callable;
43
47 loop();
48
54 virtual ~loop();
55
63 void add(socket_t& socket, Callable callable, short const event = poller::poll_in);
64
72 void add(raw_socket_t const descriptor, Callable callable, short const event = poller::poll_in | poller::poll_error);
73
81 timer_id_t add(std::chrono::milliseconds delay, size_t times, Callable callable);
82
88 void reset(timer_id_t const timer);
89
95 void remove(timer_id_t const timer);
96
102 void remove(socket_t const& socket);
103
109 void remove(raw_socket_t const descriptor);
110
114 void start();
115
116 private:
117 struct timer_t {
118 size_t times;
119 std::chrono::milliseconds delay;
120 std::chrono::steady_clock::time_point when;
121
122 timer_t(size_t times, std::chrono::milliseconds delay);
123
124 void reset();
125 void update();
126 };
127
128 typedef std::pair<zmq_pollitem_t, Callable> PollItemCallablePair;
129 typedef std::pair<std::unique_ptr<timer_t>, Callable> TimerItemCallablePair;
131
132 std::vector<PollItemCallablePair> items_;
133 std::list<TimerItemCallablePair> timers_;
134 std::vector<const socket_t *> sockRemoveLater_;
135 std::vector<raw_socket_t> fdRemoveLater_;
136 std::vector<timer_id_t> timerRemoveLater_;
137
138
139 void add(const zmq_pollitem_t &item, Callable callable);
140 void add(std::unique_ptr<timer_t>, Callable callable);
141
142 bool start_handle_timers();
143 bool start_handle_poller();
144
149 void flush_remove_later();
150
154 long tickless();
155
159 };
160
161}
Loop object that helps to manage multiple socket by calling a user-defined handler for each socket wh...
Definition loop.hpp:36
static bool TimerItemCallablePairComp(const TimerItemCallablePair &lhs, const TimerItemCallablePair &rhs)
Definition loop.cpp:231
void start()
Starts loop.
Definition loop.cpp:145
bool dispatching_
Definition loop.hpp:157
void * timer_id_t
Type used to identify created timers withing loop.
Definition loop.hpp:41
loop()
Construct an empty polling model.
Definition loop.cpp:23
std::vector< timer_id_t > timerRemoveLater_
Definition loop.hpp:136
std::function< bool(void) > Callable
Definition loop.hpp:42
bool start_handle_poller()
Definition loop.cpp:195
bool rebuild_poller_
Definition loop.hpp:158
void flush_remove_later()
Flush the fdRemoveLater_ and sockRemoveLater_ vector, effectively removing the item for the reactor a...
Definition loop.cpp:208
long tickless()
Calculate min time to wait in poller.
Definition loop.cpp:221
std::vector< raw_socket_t > fdRemoveLater_
Definition loop.hpp:135
std::vector< PollItemCallablePair > items_
Definition loop.hpp:132
std::pair< zmq_pollitem_t, Callable > PollItemCallablePair
Definition loop.hpp:128
bool start_handle_timers()
Definition loop.cpp:173
std::vector< const socket_t * > sockRemoveLater_
Definition loop.hpp:134
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.
Definition loop.cpp:50
void remove(timer_id_t const timer)
Remove timer event from the loop.
Definition loop.cpp:93
std::list< TimerItemCallablePair > timers_
Definition loop.hpp:133
void reset(timer_id_t const timer)
Reset timer in the loop, it will start counting delay time again.
Definition loop.cpp:83
std::pair< std::unique_ptr< timer_t >, Callable > TimerItemCallablePair
Definition loop.hpp:129
poller poller_
Definition loop.hpp:156
virtual ~loop()
Cleanup reactor.
Definition loop.cpp:29
Polling wrapper.
Definition poller.hpp:37
@ poll_in
Definition poller.hpp:45
@ poll_error
Definition poller.hpp:47
The socket class represents the zmq sockets.
Definition socket.hpp:76
C++ wrapper around zmq.
Definition actor.cpp:30
socket socket_t
socket type
Definition loop.hpp:26
int raw_socket_t
Definition compatibility.hpp:134
Definition loop.hpp:117
std::chrono::steady_clock::time_point when
Definition loop.hpp:120
void update()
Definition loop.cpp:45
size_t times
Definition loop.hpp:118
std::chrono::milliseconds delay
Definition loop.hpp:119
void reset()
Definition loop.cpp:40