@@ -38,12 +38,12 @@ namespace rmqio {
3838//
3939// rmqio::AsioTimer: Provides a class for scheduling a cancellable
4040// callback to be executed after a given timeout
41+ typedef boost::asio::chrono::system_clock DefaultClockType;
4142
42- template <typename TIME = boost::asio::deadline_timer::time_type,
43- typename TIME_TRAITS = boost::asio::time_traits<TIME> >
43+ template <typename ClockType = DefaultClockType>
4444class basic_AsioTimer
4545: public Timer,
46- public bsl::enable_shared_from_this<basic_AsioTimer<TIME, TIME_TRAITS > > {
46+ public bsl::enable_shared_from_this<basic_AsioTimer<ClockType > > {
4747 public:
4848 basic_AsioTimer (boost::asio::io_context& context,
4949 const bsls::TimeInterval& timeout);
@@ -60,23 +60,22 @@ class basic_AsioTimer
6060 basic_AsioTimer& operator =(const basic_AsioTimer&) BSLS_KEYWORD_DELETED;
6161
6262 static void
63- handler_internal (bsl::weak_ptr<basic_AsioTimer<TIME, TIME_TRAITS > > timer,
63+ handler_internal (bsl::weak_ptr<basic_AsioTimer<ClockType > > timer,
6464 const Timer::Callback callback,
6565 const boost::system::error_code& error);
6666 void handler (const Timer::Callback& callback,
6767 const boost::system::error_code& error);
6868 void startTimer ();
6969
70- boost::asio::basic_deadline_timer<TIME, TIME_TRAITS > d_timer;
70+ boost::asio::basic_waitable_timer<ClockType > d_timer;
7171 Timer::Callback d_callback;
7272 bsls::TimeInterval d_timeout;
7373 BALL_LOG_SET_CLASS_CATEGORY (" RMQIO.ASIOTIMER" );
7474};
7575
7676typedef basic_AsioTimer<> AsioTimer;
7777
78- template <typename TIME = boost::asio::deadline_timer::time_type,
79- typename TIME_TRAITS = boost::asio::time_traits<TIME> >
78+ template <typename ClockType = DefaultClockType>
8079class basic_AsioTimerFactory : public TimerFactory {
8180 public:
8281 basic_AsioTimerFactory (rmqio::AsioEventLoop& eventLoop);
@@ -95,33 +94,33 @@ class basic_AsioTimerFactory : public TimerFactory {
9594
9695typedef basic_AsioTimerFactory<> AsioTimerFactory;
9796
98- template <typename T, typename TT >
99- basic_AsioTimer<T, TT >::basic_AsioTimer(boost::asio::io_context& io_context,
100- const bsls::TimeInterval& timeout)
97+ template <typename ClockType >
98+ basic_AsioTimer<ClockType >::basic_AsioTimer(boost::asio::io_context& io_context,
99+ const bsls::TimeInterval& timeout)
101100: Timer()
102101, d_timer(io_context)
103102, d_callback()
104103, d_timeout(timeout)
105104{
106105}
107106
108- template <typename T, typename TT >
109- basic_AsioTimer<T, TT >::basic_AsioTimer(boost::asio::io_context& io_context,
110- const Timer::Callback& callback)
107+ template <typename ClockType >
108+ basic_AsioTimer<ClockType >::basic_AsioTimer(boost::asio::io_context& io_context,
109+ const Timer::Callback& callback)
111110: Timer()
112111, d_timer(io_context)
113112, d_callback(callback)
114113, d_timeout()
115114{
116115}
117116
118- template <typename T, typename TT >
119- basic_AsioTimer<T, TT >::~basic_AsioTimer ()
117+ template <typename ClockType >
118+ basic_AsioTimer<ClockType >::~basic_AsioTimer ()
120119{
121120}
122121
123- template <typename T, typename TT >
124- void basic_AsioTimer<T, TT >::reset(const bsls::TimeInterval& timeout)
122+ template <typename ClockType >
123+ void basic_AsioTimer<ClockType >::reset(const bsls::TimeInterval& timeout)
125124{
126125 if (!d_callback) {
127126 BALL_LOG_ERROR << " reset() called before start()" ;
@@ -131,42 +130,42 @@ void basic_AsioTimer<T, TT>::reset(const bsls::TimeInterval& timeout)
131130 startTimer ();
132131}
133132
134- template <typename T, typename TT >
135- void basic_AsioTimer<T, TT >::cancel()
133+ template <typename ClockType >
134+ void basic_AsioTimer<ClockType >::cancel()
136135{
137136 d_timer.cancel ();
138137}
139138
140- template <typename T, typename TT >
141- void basic_AsioTimer<T, TT >::resetCallback(const Callback& callback)
139+ template <typename ClockType >
140+ void basic_AsioTimer<ClockType >::resetCallback(const Callback& callback)
142141{
143142 d_callback = callback;
144143}
145144
146- template <typename T, typename TT >
147- void basic_AsioTimer<T, TT >::start(const Timer::Callback& callback)
145+ template <typename ClockType >
146+ void basic_AsioTimer<ClockType >::start(const Timer::Callback& callback)
148147{
149148 d_callback = callback;
150149 startTimer ();
151150}
152151
153- template <typename T, typename TT >
154- void basic_AsioTimer<T, TT >::handler_internal(
155- bsl::weak_ptr<basic_AsioTimer<T, TT > > timer,
152+ template <typename ClockType >
153+ void basic_AsioTimer<ClockType >::handler_internal(
154+ bsl::weak_ptr<basic_AsioTimer<ClockType > > timer,
156155 const Timer::Callback callback,
157156 const boost::system::error_code& error)
158157{
159- bsl::shared_ptr<basic_AsioTimer<T, TT > > t = timer.lock ();
158+ bsl::shared_ptr<basic_AsioTimer<ClockType > > t = timer.lock ();
160159 if (t) {
161160 t->handler (callback, error);
162161 }
163162}
164163
165- template <typename T, typename TT >
166- void basic_AsioTimer<T, TT >::handler(const Timer::Callback& callback,
167- const boost::system::error_code& error)
164+ template <typename ClockType >
165+ void basic_AsioTimer<ClockType >::handler(const Timer::Callback& callback,
166+ const boost::system::error_code& error)
168167{
169- if (!error && d_timer. expires_at () <= TT::now () ) {
168+ if (!error) {
170169 callback (Timer::EXPIRE);
171170 }
172171 else {
@@ -178,38 +177,40 @@ void basic_AsioTimer<T, TT>::handler(const Timer::Callback& callback,
178177 }
179178}
180179
181- template <typename T, typename TT >
182- void basic_AsioTimer<T, TT >::startTimer()
180+ template <typename ClockType >
181+ void basic_AsioTimer<ClockType >::startTimer()
183182{
184- d_timer.expires_from_now (
185- boost::posix_time ::milliseconds (d_timeout.totalMilliseconds ()));
183+ d_timer.expires_after (
184+ boost::asio::chrono ::milliseconds (d_timeout.totalMilliseconds ()));
186185 d_timer.async_wait (
187- bdlf::BindUtil::bind (&basic_AsioTimer<T, TT >::handler_internal,
186+ bdlf::BindUtil::bind (&basic_AsioTimer<ClockType >::handler_internal,
188187 this ->weak_from_this (),
189188 d_callback,
190189 bdlf::PlaceHolders::_1));
191190}
192191
193- template <typename T, typename TT >
194- basic_AsioTimerFactory<T, TT >::basic_AsioTimerFactory(
192+ template <typename ClockType >
193+ basic_AsioTimerFactory<ClockType >::basic_AsioTimerFactory(
195194 rmqio::AsioEventLoop& eventLoop)
196195: d_eventLoop(eventLoop)
197196{
198197}
199198
200- template <typename T, typename TT>
201- bsl::shared_ptr<rmqio::Timer> basic_AsioTimerFactory<T, TT>::createWithTimeout(
199+ template <typename ClockType>
200+ bsl::shared_ptr<rmqio::Timer>
201+ basic_AsioTimerFactory<ClockType>::createWithTimeout(
202202 const bsls::TimeInterval& timeout)
203203{
204- return bsl::make_shared<rmqio::basic_AsioTimer<T, TT > >(
204+ return bsl::make_shared<rmqio::basic_AsioTimer<ClockType > >(
205205 bsl::ref (d_eventLoop.context ()), timeout);
206206}
207207
208- template <typename T, typename TT>
209- bsl::shared_ptr<rmqio::Timer> basic_AsioTimerFactory<T, TT>::createWithCallback(
208+ template <typename ClockType>
209+ bsl::shared_ptr<rmqio::Timer>
210+ basic_AsioTimerFactory<ClockType>::createWithCallback(
210211 const Timer::Callback& callback)
211212{
212- return bsl::make_shared<rmqio::basic_AsioTimer<T, TT > >(
213+ return bsl::make_shared<rmqio::basic_AsioTimer<ClockType > >(
213214 bsl::ref (d_eventLoop.context ()), callback);
214215}
215216
0 commit comments