Github   Telegram
Loading...
Searching...
No Matches
processor.hpp
Go to the documentation of this file.
1#pragma once
2
3/// @file userver/os_signals/processor.hpp
4/// @brief @copybrief os_signals::Processor
5
6#include <userver/concurrent/async_event_channel.hpp>
7#include <userver/engine/task/task_processor_fwd.hpp>
8#include <userver/os_signals/subscriber.hpp>
9#include <userver/utils/internal_tag_fwd.hpp>
10
11USERVER_NAMESPACE_BEGIN
12
13namespace os_signals {
14
15/// @brief A manager that allows to subscribe
16/// to OS signals, example: SIGUSR1, SIGUSR2
17class Processor final {
18 public:
19 explicit Processor(engine::TaskProcessor& task_processor);
20
21 template <class Class>
22 Subscriber AddListener(Class* obj, std::string_view name, int signum,
23 void (Class::*func)()) {
24 auto execute = [obj, func, signum](int sig) {
25 if (sig == signum) {
26 (obj->*func)();
27 }
28 };
29
30 return {channel_.AddListener(concurrent::FunctionId(obj), name,
31 std::move(execute))};
32 }
33
34 /// @cond
35 void Notify(int signum, utils::InternalTag);
36 /// @endcond
37
38 private:
39 concurrent::AsyncEventChannel<int> channel_;
40 engine::TaskProcessor& task_processor_;
41};
42
43} // namespace os_signals
44
45USERVER_NAMESPACE_END