17 #ifndef CYBER_BLOCKER_BLOCKER_MANAGER_H_ 18 #define CYBER_BLOCKER_BLOCKER_MANAGER_H_ 23 #include <unordered_map> 34 std::unordered_map<std::string, std::shared_ptr<BlockerBase>>;
38 static const std::shared_ptr<BlockerManager>&
Instance() {
39 static auto instance =
45 bool Publish(
const std::string& channel_name,
49 bool Publish(
const std::string& channel_name,
53 bool Subscribe(
const std::string& channel_name,
size_t capacity,
54 const std::string& callback_id,
59 const std::string& callback_id);
62 std::shared_ptr<Blocker<T>>
GetBlocker(
const std::string& channel_name);
76 std::mutex blocker_mutex_;
82 auto blocker = GetOrCreateBlocker<T>(
BlockerAttr(channel_name));
83 if (blocker ==
nullptr) {
86 blocker->Publish(msg);
93 auto blocker = GetOrCreateBlocker<T>(
BlockerAttr(channel_name));
94 if (blocker ==
nullptr) {
97 blocker->Publish(msg);
101 template <
typename T>
103 const std::string& callback_id,
105 auto blocker = GetOrCreateBlocker<T>(
BlockerAttr(capacity, channel_name));
106 if (blocker ==
nullptr) {
109 return blocker->Subscribe(callback_id, callback);
112 template <
typename T>
114 const std::string& callback_id) {
115 auto blocker = GetBlocker<T>(channel_name);
116 if (blocker ==
nullptr) {
119 return blocker->Unsubscribe(callback_id);
122 template <
typename T>
124 const std::string& channel_name) {
125 std::shared_ptr<Blocker<T>> blocker =
nullptr;
127 std::lock_guard<std::mutex> lock(blocker_mutex_);
128 auto search = blockers_.find(channel_name);
129 if (search != blockers_.end()) {
130 blocker = std::dynamic_pointer_cast<
Blocker<T>>(search->second);
136 template <
typename T>
139 std::shared_ptr<Blocker<T>> blocker =
nullptr;
141 std::lock_guard<std::mutex> lock(blocker_mutex_);
143 if (search != blockers_.end()) {
144 blocker = std::dynamic_pointer_cast<
Blocker<T>>(search->second);
146 blocker = std::make_shared<Blocker<T>>(attr);
157 #endif // CYBER_BLOCKER_BLOCKER_MANAGER_H_ std::shared_ptr< T > MessagePtr
Definition: blocker.h:69
bool Subscribe(const std::string &channel_name, size_t capacity, const std::string &callback_id, const typename Blocker< T >::Callback &callback)
Definition: blocker_manager.h:102
bool Unsubscribe(const std::string &channel_name, const std::string &callback_id)
Definition: blocker_manager.h:113
bool Publish(const std::string &channel_name, const typename Blocker< T >::MessagePtr &msg)
Definition: blocker_manager.h:80
std::function< void(const MessagePtr &)> Callback
Definition: blocker.h:71
PlanningContext is the runtime context in planning. It is persistent across multiple frames...
Definition: atomic_hash_map.h:25
std::string channel_name
Definition: blocker.h:60
static const std::shared_ptr< BlockerManager > & Instance()
Definition: blocker_manager.h:38
std::unordered_map< std::string, std::shared_ptr< BlockerBase > > BlockerMap
Definition: blocker_manager.h:34
virtual ~BlockerManager()
T MessageType
Definition: blocker.h:68
std::shared_ptr< Blocker< T > > GetBlocker(const std::string &channel_name)
Definition: blocker_manager.h:123
std::shared_ptr< Blocker< T > > GetOrCreateBlocker(const BlockerAttr &attr)
Definition: blocker_manager.h:137
Definition: blocker_manager.h:31