Kea  1.5.0
io_service_signal.h
Go to the documentation of this file.
1 // Copyright (C) 2014-2017 Internet Systems Consortium, Inc. ("ISC")
2 //
3 // This Source Code Form is subject to the terms of the Mozilla Public
4 // License, v. 2.0. If a copy of the MPL was not distributed with this
5 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
6 
7 #ifndef IO_SERVICE_SIGNAL_H
8 #define IO_SERVICE_SIGNAL_H
9 
10 #include <asiolink/io_service.h>
12 #include <exceptions/exceptions.h>
13 
14 #include <map>
15 #include <stdint.h>
16 
17 namespace isc {
18 namespace process {
19 
21 class IOSignalError : public isc::Exception {
22 public:
23  IOSignalError(const char* file, size_t line, const char* what) :
24  isc::Exception(file, line, what) { };
25 };
26 
28 typedef uint64_t IOSignalId;
29 
33 typedef boost::function<void(IOSignalId sequence_id)> IOSignalHandler;
34 
93 class IOSignal {
94 public:
103  IOSignal(asiolink::IOService& io_service, int signum,
104  IOSignalHandler handler);
105 
107  ~IOSignal();
108 
118  static IOSignalId next_id_ = 0;
119  return (++next_id_);
120  }
121 
126  return (sequence_id_);
127  }
128 
132  int getSignum() const {
133  return (signum_);
134  }
135 
142  class TimerCallback : public std::unary_function<void, void> {
143  public:
150  TimerCallback(IOSignalId sequence_id, IOSignalHandler handler);
151 
156  void operator()();
157 
158  private:
160  IOSignalId sequence_id_;
161 
163  IOSignalHandler handler_;
164  };
165 
166 private:
168  IOSignalId sequence_id_;
169 
171  int signum_;
172 
175 };
176 
178 typedef boost::shared_ptr<IOSignal> IOSignalPtr;
179 
181 typedef std::map<IOSignalId, IOSignalPtr> IOSignalMap;
182 
195 public:
201 
203  ~IOSignalQueue();
204 
220  IOSignalId pushSignal(int signum, IOSignalHandler handler);
221 
235  IOSignalPtr popSignal(IOSignalId sequence_id);
236 
242  void clear();
243 
244 private:
246  asiolink::IOServicePtr io_service_;
247 
249  IOSignalMap signals_;
250 };
251 
253 typedef boost::shared_ptr<IOSignalQueue> IOSignalQueuePtr;
254 
255 
256 }; // end of isc::process namespace
257 }; // end of isc namespace
258 
259 #endif // IO_SERVICE_SIGNAL_H
isc::process::IOSignal::getSequenceId
IOSignalId getSequenceId() const
Gets the IOSignal's sequence_id.
Definition: io_service_signal.h:125
isc::process::IOSignalQueue::clear
void clear()
Erases the contents of the queue.
Definition: io_service_signal.cc:113
isc::process::IOSignalQueuePtr
boost::shared_ptr< IOSignalQueue > IOSignalQueuePtr
Defines a pointer to an IOSignalQueue.
Definition: io_service_signal.h:253
isc::process::IOSignalPtr
boost::shared_ptr< IOSignal > IOSignalPtr
Defines a pointer to an IOSignal.
Definition: io_service_signal.h:178
isc::process::IOSignal::IOSignal
IOSignal(asiolink::IOService &io_service, int signum, IOSignalHandler handler)
Constructor.
Definition: io_service_signal.cc:16
io_service.h
isc::process::IOSignalQueue::~IOSignalQueue
~IOSignalQueue()
Destructor.
Definition: io_service_signal.cc:69
isc::process::IOSignal::getSignum
int getSignum() const
Gets the OS signal value this IOSignal represents.
Definition: io_service_signal.h:132
isc::Exception
This is a base class for exceptions thrown from the DNS library module.
Definition: exceptions/exceptions.h:23
isc
Defines the logger used by the top-level component of kea-dhcp-ddns.
Definition: agent_parser.cc:144
isc::process::IOSignalId
uint64_t IOSignalId
Defines a unique identifier type for IOSignal.
Definition: io_service_signal.h:28
isc::Exception::what
virtual const char * what() const
Returns a C-style character string of the cause of the exception.
Definition: exceptions/exceptions.cc:32
isc::process::IOSignal::TimerCallback::TimerCallback
TimerCallback(IOSignalId sequence_id, IOSignalHandler handler)
Constructor.
Definition: io_service_signal.cc:41
isc::process::IOSignalQueue
Creates and manages IOSignals.
Definition: io_service_signal.h:194
isc::process::IOSignalQueue::popSignal
IOSignalPtr popSignal(IOSignalId sequence_id)
Removes an IOSignal from the map and returns it.
Definition: io_service_signal.cc:93
isc::process::IOSignal::nextSequenceId
static IOSignalId nextSequenceId()
Static method for generating IOSignal sequence_ids.
Definition: io_service_signal.h:117
isc::process::IOSignalError
Exception thrown if IOSignal encounters an error.
Definition: io_service_signal.h:21
isc::process::IOSignalHandler
boost::function< void(IOSignalId sequence_id)> IOSignalHandler
Defines a handler function for an IOSignal.
Definition: io_service_signal.h:33
exceptions.h
isc::process::IOSignal::TimerCallback
Defines the callback used by IOSignal's internal timer.
Definition: io_service_signal.h:142
isc::process::IOSignalError::IOSignalError
IOSignalError(const char *file, size_t line, const char *what)
Definition: io_service_signal.h:23
isc::process::IOSignal::~IOSignal
~IOSignal()
Destructor.
Definition: io_service_signal.cc:33
interval_timer.h
isc::process::IOSignalMap
std::map< IOSignalId, IOSignalPtr > IOSignalMap
Defines a map of IOSignalPtr keyed by id.
Definition: io_service_signal.h:181
isc::process::IOSignal::TimerCallback::operator()
void operator()()
() Operator which serves as the timer's callback
Definition: io_service_signal.cc:50
isc::process::IOSignalQueue::IOSignalQueue
IOSignalQueue(asiolink::IOServicePtr &io_service)
Constructor.
Definition: io_service_signal.cc:62
isc::process::IOSignalQueue::pushSignal
IOSignalId pushSignal(int signum, IOSignalHandler handler)
Creates an IOSignal.
Definition: io_service_signal.cc:74
isc::process::IOSignal
Implements an asynchronous "signal" for IOService driven processing.
Definition: io_service_signal.h:93