RESTinio
asio_timer_manager.hpp
Go to the documentation of this file.
1 /*
2  restinio
3 */
4 
9 #pragma once
10 
11 #include <memory>
12 #include <chrono>
13 
15 
17 
20 
21 namespace restinio
22 {
23 
24 //
25 // asio_timer_manager_t
26 //
27 
30  : public std::enable_shared_from_this< asio_timer_manager_t >
31 {
32  public:
34  asio_ns::io_context & io_context,
35  std::chrono::steady_clock::duration check_period )
36  : m_io_context{ io_context }
37  , m_check_period{ check_period }
38  {}
39 
41  class timer_guard_t final
42  {
43  public:
45  asio_ns::io_context & io_context,
46  std::chrono::steady_clock::duration check_period ) noexcept
47  : m_operation_timer{ io_context }
48  , m_check_period{ check_period }
49  {}
50 
52  void
54  {
55  m_operation_timer.expires_after( m_check_period );
56  m_operation_timer.async_wait(
57  [ weak_handle = std::move( weak_handle ) ]( const auto & ec ){
58  if( !ec )
59  {
60  if( auto h = weak_handle.lock() )
61  {
62  h->check_timeout( h );
63  }
64  }
65  } );
66  }
67 
69 
73  void
74  cancel() noexcept
75  {
77  [this]{ m_operation_timer.cancel(); } );
78  }
79 
80  private:
81  asio_ns::steady_timer m_operation_timer;
82  const std::chrono::steady_clock::duration m_check_period;
84  };
85 
89  {
91  }
92 
95  void start() const noexcept {}
96  void stop() const noexcept {}
98 
99  struct factory_t final
100  {
102  const std::chrono::steady_clock::duration
103  m_check_period{ std::chrono::seconds{ 1 } };
104 
105  factory_t() noexcept {}
106  factory_t( std::chrono::steady_clock::duration check_period ) noexcept
107  : m_check_period{ check_period }
108  {}
109 
111  auto
112  create( asio_ns::io_context & io_context ) const
113  {
114  return std::make_shared< asio_timer_manager_t >( io_context, m_check_period );
115  }
116  };
117 
118  private:
120  asio_ns::io_context & m_io_context;
121 
123  const std::chrono::steady_clock::duration m_check_period;
124 };
125 
126 } /* namespace restinio */
restinio::asio_timer_manager_t::m_check_period
const std::chrono::steady_clock::duration m_check_period
Check period for timer events.
Definition: asio_timer_manager.hpp:123
restinio::asio_timer_manager_t::asio_timer_manager_t
asio_timer_manager_t(asio_ns::io_context &io_context, std::chrono::steady_clock::duration check_period)
Definition: asio_timer_manager.hpp:33
nonstd::optional_lite::std11::move
T & move(T &t)
Definition: optional.hpp:421
asio_include.hpp
restinio::asio_timer_manager_t::m_io_context
asio_ns::io_context & m_io_context
An instanse of io_context to work with.
Definition: asio_timer_manager.hpp:120
restinio::utils::suppress_exceptions_quietly
void suppress_exceptions_quietly(Lambda &&lambda) noexcept
Helper function for execution a block of code with suppression of any exceptions raised inside that b...
Definition: suppress_exceptions.hpp:133
restinio::asio_timer_manager_t::factory_t
Definition: asio_timer_manager.hpp:100
timer_common.hpp
restinio::asio_timer_manager_t::factory_t::m_check_period
const std::chrono::steady_clock::duration m_check_period
Check period for timer events.
Definition: asio_timer_manager.hpp:103
restinio::asio_timer_manager_t::start
void start() const noexcept
Definition: asio_timer_manager.hpp:95
restinio::asio_timer_manager_t::factory_t::create
auto create(asio_ns::io_context &io_context) const
Create an instance of timer manager.
Definition: asio_timer_manager.hpp:112
restinio::asio_timer_manager_t::timer_guard_t::m_operation_timer
asio_ns::steady_timer m_operation_timer
Definition: asio_timer_manager.hpp:81
restinio::asio_timer_manager_t::factory_t::factory_t
factory_t() noexcept
Definition: asio_timer_manager.hpp:105
suppress_exceptions.hpp
Utilities for suppressing exceptions from some code block.
restinio::asio_timer_manager_t::factory_t::factory_t
factory_t(std::chrono::steady_clock::duration check_period) noexcept
Definition: asio_timer_manager.hpp:106
restinio::asio_timer_manager_t
Timer factory implementation using asio timers.
Definition: asio_timer_manager.hpp:31
restinio::asio_timer_manager_t::timer_guard_t::cancel
void cancel() noexcept
Cancel timeout guard if any.
Definition: asio_timer_manager.hpp:74
restinio
Definition: asio_include.hpp:21
restinio::asio_timer_manager_t::timer_guard_t::timer_guard_t
timer_guard_t(asio_ns::io_context &io_context, std::chrono::steady_clock::duration check_period) noexcept
Definition: asio_timer_manager.hpp:44
restinio::asio_timer_manager_t::timer_guard_t::m_check_period
const std::chrono::steady_clock::duration m_check_period
Definition: asio_timer_manager.hpp:82
restinio::asio_timer_manager_t::create_timer_guard
timer_guard_t create_timer_guard() const
Create guard for connection.
Definition: asio_timer_manager.hpp:88
restinio::asio_timer_manager_t::timer_guard_t::schedule
void schedule(tcp_connection_ctx_weak_handle_t weak_handle)
Schedule timeouts check invocation.
Definition: asio_timer_manager.hpp:53
restinio::asio_timer_manager_t::stop
void stop() const noexcept
Definition: asio_timer_manager.hpp:96
compiler_features.hpp
Detection of compiler version and absence of various features.
restinio::tcp_connection_ctx_weak_handle_t
std::weak_ptr< tcp_connection_ctx_base_t > tcp_connection_ctx_weak_handle_t
Alias for http connection weak handle.
Definition: tcp_connection_ctx_base.hpp:65
restinio::asio_timer_manager_t::timer_guard_t
Timer guard for async operations.
Definition: asio_timer_manager.hpp:42
const
#define const
Definition: zconf.h:230