14#include <boost/bind.hpp>
54 : interval_timer_(io_service),
55 user_callback_(user_callback),
57 scheduling_mode_(mode) { };
139 void setup(
const std::string& timer_name);
146 void cancel(
const std::string& timer_name);
154 void timerCallback(
const std::string& timer_name);
165 io_service_(new
IOService()), registered_timers_() {
173 io_service_ = io_service;
183 if (timer_name.empty()) {
188 if (registered_timers_.find(timer_name) != registered_timers_.end()) {
190 << timer_name <<
"'");
196 TimerInfoPtr timer_info(
new TimerInfo(*io_service_, callback,
197 interval, scheduling_mode));
200 registered_timers_.insert(std::pair<std::string, TimerInfoPtr>(timer_name,
208 TimerInfoMap::iterator timer_info_it = registered_timers_.find(timer_name);
211 if (timer_info_it == registered_timers_.end()) {
213 << timer_name <<
"'");
220 registered_timers_.erase(timer_info_it);
234 TimerInfoMap registered_timers_copy(registered_timers_);
237 for (TimerInfoMap::iterator timer_info_it = registered_timers_copy.begin();
238 timer_info_it != registered_timers_copy.end(); ++timer_info_it) {
245 return (registered_timers_.find(timer_name) != registered_timers_.end());
250 return (registered_timers_.size());
257 TimerInfoMap::const_iterator timer_info_it = registered_timers_.find(timer_name);
258 if (timer_info_it == registered_timers_.end()) {
260 "no such timer registered");
268 timer_info->interval_timer_.setup(cb, timer_info->interval_,
269 timer_info->scheduling_mode_);
276 TimerInfoMap::const_iterator timer_info_it = registered_timers_.find(timer_name);
277 if (timer_info_it == registered_timers_.end()) {
279 "no such timer registered");
282 timer_info_it->second->interval_timer_.cancel();
286TimerMgrImpl::timerCallback(
const std::string& timer_name) {
288 TimerInfoMap::iterator timer_info_it = registered_timers_.find(timer_name);
289 if (timer_info_it != registered_timers_.end()) {
295 DHCPSRV_TIMERMGR_RUN_TIMER_OPERATION)
296 .arg(timer_info_it->first);
298 std::string error_string;
300 timer_info_it->second->user_callback_();
302 }
catch (
const std::exception& ex){
303 error_string = ex.what();
306 error_string =
"unknown reason";
310 if (!error_string.empty()) {
312 .arg(timer_info_it->first)
340 DHCPSRV_TIMERMGR_REGISTER_TIMER)
344 impl_->
registerTimer(timer_name, callback, interval, scheduling_mode);
351 DHCPSRV_TIMERMGR_UNREGISTER_TIMER)
361 DHCPSRV_TIMERMGR_UNREGISTER_ALL_TIMERS);
380 DHCPSRV_TIMERMGR_START_TIMER)
383 impl_->
setup(timer_name);
390 DHCPSRV_TIMERMGR_STOP_TIMER)
393 impl_->
cancel(timer_name);
A generic exception that is thrown if a parameter given to a method is considered invalid in that con...
The IOService class is a wrapper for the ASIO io_service class.
The IntervalTimer class is a wrapper for the ASIO boost::asio::deadline_timer class.
boost::function< void()> Callback
Mode
Defines possible timer modes used to setup a timer.
Implementation of the TimerMgr.
void unregisterTimers()
Unregisters all timers.
size_t timersCount() const
Returns the number of registered timers.
void cancel(const std::string &timer_name)
Cancels the execution of the interval timer.
void registerTimer(const std::string &timer_name, const asiolink::IntervalTimer::Callback &callback, const long interval, const asiolink::IntervalTimer::Mode &scheduling_mode)
Registers new timer in the TimerMgr.
void unregisterTimer(const std::string &timer_name)
Unregisters specified timer.
void setup(const std::string &timer_name)
Schedules the execution of the interval timer.
void setIOService(const IOServicePtr &io_service)
Sets IO service to be used by the Timer Manager.
TimerMgrImpl()
Constructor.
bool isTimerRegistered(const std::string &timer_name)
Checks if the timer with a specified name has been registered.
Manages a pool of asynchronous interval timers.
bool isTimerRegistered(const std::string &timer_name)
Checks if the timer with a specified name has been registered.
void setIOService(const asiolink::IOServicePtr &io_service)
Sets IO service to be used by the Timer Manager.
void setup(const std::string &timer_name)
Schedules the execution of the interval timer.
size_t timersCount() const
Returns the number of registered timers.
void unregisterTimers()
Unregisters all timers.
void cancel(const std::string &timer_name)
Cancels the execution of the interval timer.
void registerTimer(const std::string &timer_name, const asiolink::IntervalTimer::Callback &callback, const long interval, const asiolink::IntervalTimer::Mode &scheduling_mode)
Registers new timer in the TimerMgr.
void unregisterTimer(const std::string &timer_name)
Unregisters specified timer.
static const TimerMgrPtr & instance()
Returns pointer to the sole instance of the TimerMgr.
#define isc_throw(type, stream)
A shortcut macro to insert known values into exception arguments.
#define LOG_ERROR(LOGGER, MESSAGE)
Macro to conveniently test error output and log it.
#define LOG_DEBUG(LOGGER, LEVEL, MESSAGE)
Macro to conveniently test debug output and log it.
boost::shared_ptr< IOService > IOServicePtr
Defines a smart pointer to an IOService instance.
isc::log::Logger dhcpsrv_logger("dhcpsrv")
DHCP server library Logger.
boost::shared_ptr< TimerMgr > TimerMgrPtr
Type definition of the shared pointer to TimerMgr.
std::map< std::string, TimerInfoPtr > TimerInfoMap
A type definition for the map holding timers configuration.
const int DHCPSRV_DBG_TRACE_DETAIL
Additional information.
boost::shared_ptr< TimerInfo > TimerInfoPtr
A type definition for the pointer to TimerInfo structure.
const int DHCPSRV_DBG_TRACE
DHCP server library logging levels.
Defines the logger used by the top-level component of kea-dhcp-ddns.