-
Notifications
You must be signed in to change notification settings - Fork 3
/
MyClockTick.hpp
55 lines (50 loc) · 1.25 KB
/
MyClockTick.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#ifndef MY_CLOCK_TICK
#define MY_CLOCK_TICK
#include "OpenVPNClientBase.hpp"
#include <openvpn/client/clievent.hpp>
#include <openvpn/time/asiotimer.hpp>
namespace libopenvpn
{
using namespace openvpn;
class MyClockTick
{
public:
MyClockTick(openvpn_io::io_context &io_context,
OpenVPNClientBase *parent_arg,
const unsigned int ms)
: timer(io_context),
parent(parent_arg),
period(Time::Duration::milliseconds(ms))
{
}
void cancel()
{
timer.cancel();
}
void detach_from_parent()
{
parent = nullptr;
}
void schedule()
{
timer.expires_after(period);
timer.async_wait([this](const openvpn_io::error_code &error) {
if (!parent || error)
return;
try
{
parent->clock_tick();
}
catch (...)
{
}
schedule();
});
}
private:
AsioTimer timer;
OpenVPNClientBase *parent;
const Time::Duration period;
};
} // namespace libopenvpn
#endif