Github   Telegram
Loading...
Searching...
No Matches
conflated_event_channel.hpp
1#pragma once
2
3#include <atomic>
4#include <vector>
5
9
10USERVER_NAMESPACE_BEGIN
11
12namespace concurrent {
13
25 public:
26 explicit ConflatedEventChannel(std::string name);
27 ~ConflatedEventChannel() override;
28
30 template <typename... Args>
32
34
37 template <typename Class>
39 std::string_view name,
40 void (Class::*func)());
41
42 void SendEvent();
43
44 private:
45 template <typename... Args>
46 void OnChannelEvent(Args...);
47
48 std::atomic<bool> stop_flag_;
50 std::vector<concurrent::AsyncEventSubscriberScope> subscriptions_;
52};
53
54template <typename... Args>
57 subscriptions_.push_back(channel.AddListener(
58 this, Name(), &ConflatedEventChannel::OnChannelEvent<Args...>));
59}
60
61template <typename Class>
63 Class* obj, std::string_view name, void (Class::*func)()) {
64 return DoUpdateAndListen(obj, name, func, [&] { (obj->*func)(); });
65}
66
67template <typename... Args>
68void ConflatedEventChannel::OnChannelEvent(Args...) {
69 SendEvent();
70}
71
72} // namespace concurrent
73
74USERVER_NAMESPACE_END