blob: 547e7258d20a164f709c5cbddd742f96aa75949d [file] [log] [blame]
Krzysztof Grobelnye6d48872022-02-08 13:41:30 +01001#pragma once
2
3#include "messanger_service.hpp"
4
5#include <boost/asio.hpp>
6
7namespace utils
8{
9
10template <class Service>
11class MessangerT
12{
13 public:
14 explicit MessangerT(boost::asio::execution_context& execution_context) :
15 service_(boost::asio::use_service<Service>(execution_context)),
16 context_(service_.create())
17 {}
18
Piotr Sulewskic1dbac12025-11-12 14:14:09 +010019 MessangerT(const MessangerT&) = delete;
20 MessangerT& operator=(const MessangerT&) = delete;
21 MessangerT(MessangerT&&) = delete;
22 MessangerT& operator=(MessangerT&&) = delete;
23
Krzysztof Grobelnye6d48872022-02-08 13:41:30 +010024 ~MessangerT()
25 {
26 service_.destroy(context_);
27 }
28
29 template <class EventType>
30 void on_receive(std::function<void(const EventType&)> handler)
31 {
32 context_.handlers.emplace_back(std::move(handler));
33 }
34
35 template <class EventType>
36 void send(const EventType& event)
37 {
38 service_.send(event);
39 }
40
41 private:
42 Service& service_;
43 typename Service::Context& context_;
44};
45
46using Messanger = MessangerT<MessangerService>;
47
48} // namespace utils