| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 | 
							- // Copyright Takatoshi Kondo 2020
 
- //
 
- // Distributed under the Boost Software License, Version 1.0.
 
- // (See accompanying file LICENSE_1_0.txt or copy at
 
- // http://www.boost.org/LICENSE_1_0.txt)
 
- #if !defined(MQTT_BROKER_SHARED_TARGET_HPP)
 
- #define MQTT_BROKER_SHARED_TARGET_HPP
 
- #include <mqtt/config.hpp>
 
- #include <set>
 
- #include <boost/multi_index_container.hpp>
 
- #include <boost/multi_index/ordered_index.hpp>
 
- #include <boost/multi_index/composite_key.hpp>
 
- #include <boost/multi_index/member.hpp>
 
- #include <boost/multi_index/mem_fun.hpp>
 
- #include <mqtt/buffer.hpp>
 
- #include <mqtt/optional.hpp>
 
- #include <mqtt/time_point_t.hpp>
 
- #include <mqtt/broker/broker_namespace.hpp>
 
- #include <mqtt/broker/session_state_fwd.hpp>
 
- #include <mqtt/broker/tags.hpp>
 
- #include <mqtt/broker/mutex.hpp>
 
- MQTT_BROKER_NS_BEGIN
 
- namespace mi = boost::multi_index;
 
- class shared_target {
 
- public:
 
-     void insert(buffer share_name, buffer topic_filter, session_state& ss);
 
-     void erase(buffer share_name, buffer topic_filter, session_state const& ss);
 
-     void erase(session_state const& ss);
 
-     optional<session_state_ref> get_target(buffer const& share_name, buffer const& topic_filter);
 
- private:
 
-     struct entry {
 
-         entry(buffer share_name, session_state& ss, time_point_t tp);
 
-         buffer const& client_id() const;
 
-         buffer share_name;
 
-         session_state_ref ssr;
 
-         time_point_t tp;
 
-         std::set<buffer> topic_filters;
 
-     };
 
-     using mi_shared_target = mi::multi_index_container<
 
-         entry,
 
-         mi::indexed_by<
 
-             mi::ordered_unique<
 
-                 mi::tag<tag_cid_sn>,
 
-                 mi::composite_key<
 
-                     entry,
 
-                     BOOST_MULTI_INDEX_CONST_MEM_FUN(entry, buffer const&, client_id),
 
-                     BOOST_MULTI_INDEX_MEMBER(entry, buffer, share_name)
 
-                 >
 
-             >,
 
-             mi::ordered_non_unique<
 
-                 mi::tag<tag_sn_tp>,
 
-                 mi::composite_key<
 
-                     entry,
 
-                     BOOST_MULTI_INDEX_MEMBER(entry, buffer, share_name),
 
-                     BOOST_MULTI_INDEX_MEMBER(entry, time_point_t, tp)
 
-                 >
 
-             >
 
-         >
 
-     >;
 
-     mutable mutex mtx_targets_;
 
-     mi_shared_target targets_;
 
- };
 
- MQTT_BROKER_NS_END
 
- #endif // MQTT_BROKER_SHARED_TARGET_HPP
 
 
  |