mqtt_cpp
shared_target.hpp
Go to the documentation of this file.
1 // Copyright Takatoshi Kondo 2020
2 //
3 // Distributed under the Boost Software License, Version 1.0.
4 // (See accompanying file LICENSE_1_0.txt or copy at
5 // http://www.boost.org/LICENSE_1_0.txt)
6 
7 #if !defined(MQTT_BROKER_SHARED_TARGET_HPP)
8 #define MQTT_BROKER_SHARED_TARGET_HPP
9 
10 #include <mqtt/config.hpp>
11 
12 #include <set>
13 
14 #include <boost/multi_index_container.hpp>
15 #include <boost/multi_index/ordered_index.hpp>
16 #include <boost/multi_index/composite_key.hpp>
17 #include <boost/multi_index/member.hpp>
18 #include <boost/multi_index/mem_fun.hpp>
19 
20 #include <mqtt/buffer.hpp>
21 #include <mqtt/optional.hpp>
22 #include <mqtt/time_point_t.hpp>
23 
26 #include <mqtt/broker/tags.hpp>
27 
29 
30 namespace mi = boost::multi_index;
31 
33 public:
34  void insert(buffer share_name, buffer topic_filter, session_state& ss);
35  void erase(buffer share_name, buffer topic_filter, session_state const& ss);
36  void erase(session_state const& ss);
37  optional<session_state_ref> get_target(buffer const& share_name, buffer const& topic_filter);
38 
39 private:
40  struct entry {
41  entry(buffer share_name, session_state& ss, time_point_t tp);
42 
43  buffer const& client_id() const;
44  buffer share_name;
46  time_point_t tp;
47  std::set<buffer> topic_filters;
48  };
49 
50  using mi_shared_target = mi::multi_index_container<
51  entry,
52  mi::indexed_by<
53  mi::ordered_unique<
54  mi::tag<tag_cid_sn>,
55  mi::composite_key<
56  entry,
57  BOOST_MULTI_INDEX_CONST_MEM_FUN(entry, buffer const&, client_id),
58  BOOST_MULTI_INDEX_MEMBER(entry, buffer, share_name)
59  >
60  >,
61  mi::ordered_non_unique<
62  mi::tag<tag_sn_tp>,
63  mi::composite_key<
64  entry,
65  BOOST_MULTI_INDEX_MEMBER(entry, buffer, share_name),
66  BOOST_MULTI_INDEX_MEMBER(entry, time_point_t, tp)
67  >
68  >
69  >
70  >;
71 
72  mi_shared_target targets_;
73 };
74 
76 
77 #endif // MQTT_BROKER_SHARED_TARGET_HPP
std::chrono::time_point< std::chrono::steady_clock > time_point_t
Definition: time_point_t.hpp:18
#define MQTT_BROKER_NS_END
Definition: broker_namespace.hpp:22
#define MQTT_BROKER_NS_BEGIN
Definition: broker_namespace.hpp:21
Definition: shared_target.hpp:32
void insert(buffer share_name, buffer topic_filter, session_state &ss)
Definition: shared_target_impl.hpp:15
optional< session_state_ref > get_target(buffer const &share_name, buffer const &topic_filter)
Definition: shared_target_impl.hpp:64
void erase(buffer share_name, buffer topic_filter, session_state const &ss)
Definition: shared_target_impl.hpp:40
const_buffer buffer(MQTT_NS::buffer const &data)
create boost::asio::const_buffer from the MQTT_NS::buffer boost::asio::const_buffer is a kind of view...
Definition: buffer.hpp:253
std::reference_wrapper< session_state > session_state_ref
Definition: session_state_fwd.hpp:20
Definition: session_state.hpp:53