88#include < unordered_map>
99namespace infinite_sense {
1010class Messenger {
11- public:
12- static Messenger & GetInstance () {
11+ public:
12+ static Messenger& GetInstance () {
1313 static Messenger instance;
1414 return instance;
1515 }
16- Messenger (const Messenger &) = delete ;
17- Messenger (const Messenger &&) = delete ;
18- Messenger & operator =(const Messenger &) = delete ;
16+ Messenger (const Messenger&) = delete ;
17+ Messenger (const Messenger&&) = delete ;
18+ Messenger& operator =(const Messenger&) = delete ;
1919 std::string GetPubEndpoint () const ;
20- void Pub (const std::string &topic, const std::string &metadata);
21- void PubStruct (const std::string &topic, const void *data, size_t size);
22- private:
20+ void Pub (const std::string& topic, const std::string& metadata);
21+ void PubStruct (const std::string& topic, const void * data, size_t size);
22+
23+ private:
2324 Messenger ();
2425 ~Messenger ();
2526 zmq::context_t context_{};
@@ -28,50 +29,50 @@ class Messenger {
2829};
2930
3031class TopicMonitor {
31- public:
32- static TopicMonitor& GetInstance () {
33- static TopicMonitor instance;
34- return instance;
35- }
36- TopicMonitor (const TopicMonitor&) = delete ;
37- TopicMonitor (TopicMonitor&&) = delete ;
38- TopicMonitor& operator =(const TopicMonitor&) = delete ;
39- TopicMonitor& operator =(TopicMonitor&&) = delete ;
40- std::unordered_set<std::string> GetTopics () const ;
41- friend std::ostream& operator <<(std::ostream& os, const TopicMonitor& monitor) {
42- std::lock_guard lock (monitor.topics_mutex_ );
43- os << " \n --- Topic Monitor ---\n " ;
44- if (monitor.topic_frequencies_ .empty ()) {
45- os << " No active topics\n " ;
46- } else {
47- os << " Active Topics (" << monitor.topic_frequencies_ .size () << " ):\n " ;
48- std::vector<std::pair<std::string, size_t >> sorted_topics (
49- monitor.topic_frequencies_ .begin (),
50- monitor.topic_frequencies_ .end ());
51- std::sort (sorted_topics.begin (), sorted_topics.end (),
52- [](const auto & a, const auto & b) { return b.second < a.second ; });
32+ public:
33+ static TopicMonitor& GetInstance () {
34+ static TopicMonitor instance;
35+ return instance;
36+ }
37+ TopicMonitor (const TopicMonitor&) = delete ;
38+ TopicMonitor (TopicMonitor&&) = delete ;
39+ TopicMonitor& operator =(const TopicMonitor&) = delete ;
40+ TopicMonitor& operator =(TopicMonitor&&) = delete ;
41+ std::unordered_set<std::string> GetTopics () const ;
42+ friend std::ostream& operator <<(std::ostream& os, const TopicMonitor& monitor) {
43+ std::lock_guard lock (monitor.topics_mutex_ );
44+ os << " \n --- Topic Monitor ---\n " ;
45+ if (monitor.topic_frequencies_ .empty ()) {
46+ os << " No active topics\n " ;
47+ } else {
48+ os << " Active Topics (" << monitor.topic_frequencies_ .size () << " ):\n " ;
49+ std::vector<std::pair<std::string, size_t >> sorted_topics (monitor.topic_frequencies_ .begin (),
50+ monitor.topic_frequencies_ .end ());
51+ std::sort (sorted_topics.begin (), sorted_topics.end (),
52+ [](const auto & a, const auto & b) { return b.second < a.second ; });
5353
54- for (const auto & [topic, count] : sorted_topics) {
55- os << " • " << topic << " (num: " << count << " )\n " ;
56- }
54+ for (const auto & [topic, count] : sorted_topics) {
55+ os << " • " << topic << " (num: " << count << " )\n " ;
5756 }
58- return os << " ---------------------\n " ;
5957 }
60- // 启动监控线程
61- void Start ();
62- // 停止监控
63- void Stop ();
64- private:
65- TopicMonitor ();
66- ~TopicMonitor ();
67- // 监控线程主循环
68- void MonitorLoop () ;
69- std::unordered_map<std::string, size_t > topic_frequencies_; // 新增:topic频率统计
70- zmq::context_t context_;
71- zmq::socket_t subscriber_;
72- std::unordered_set<std::string> topics_;
73- mutable std::mutex topics_mutex_;
74- std::thread monitor_thread_;
75- std::atomic<bool > should_run_;
58+ return os << " ---------------------\n " ;
59+ }
60+ // 启动监控线程
61+ void Start ();
62+ // 停止监控
63+ void Stop ();
64+
65+ private:
66+ TopicMonitor ();
67+ ~TopicMonitor ();
68+ // 监控线程主循环
69+ void MonitorLoop ();
70+ std::unordered_map<std::string, size_t > topic_frequencies_; // 新增:topic频率统计
71+ zmq::context_t context_;
72+ zmq::socket_t subscriber_;
73+ std::unordered_set<std::string> topics_;
74+ mutable std::mutex topics_mutex_;
75+ std::thread monitor_thread_;
76+ std::atomic<bool > should_run_;
7677};
77- }
78+ } // namespace infinite_sense
0 commit comments