Fix RegisterEvent 86/319286/1
authorpjh9216 <jh9216.park@samsung.com>
Mon, 21 Oct 2024 05:43:44 +0000 (14:43 +0900)
committerpjh9216 <jh9216.park@samsung.com>
Mon, 21 Oct 2024 05:43:44 +0000 (14:43 +0900)
- support multiple register

Change-Id: I2784c56dc8bc13a67a892b0baed58b4e8326acd3
Signed-off-by: pjh9216 <jh9216.park@samsung.com>
modules/group/event_system_service.cc
modules/group/event_system_service.hh

index 041443a8dfc0126d237367afd98882737e427cc8..b7bcfcde4b99eb275ffb1dd8531bd9960805cff3 100644 (file)
@@ -38,7 +38,8 @@ int EventSystemService::RegisterEvent(
     rpc_stub::EventSystem::EventType type, std::string event_name,
     std::unique_ptr<rpc_stub::EventSystem::EventListener> cb) {
   int id = cb->GetSeqId();
-  listeners_[event_name] = {type, std::move(cb)};
+  listeners_.insert(std::make_pair<std::string, EventData>(
+      std::string(event_name), {type, std::move(cb)}));
 
   if (type == rpc_stub::EventSystem::EventType::User) {
     const auto* data = evt_listener_.OnRequestGetData(event_name);
@@ -49,9 +50,10 @@ int EventSystemService::RegisterEvent(
 }
 
 bool EventSystemService::UnregisterEvent(int id) {
-  auto itr = std::find_if(
-      listeners_.begin(), listeners_.end(),
-      [id](const auto& pair) { return pair.second.listener_->GetSeqId() == id; });
+  auto itr = std::find_if(listeners_.begin(), listeners_.end(),
+                          [id](const auto& pair) {
+                            return pair.second.listener_->GetSeqId() == id;
+                          });
 
   if (itr != listeners_.end()) {
     listeners_.erase(itr);
@@ -112,27 +114,30 @@ bool EventSystemService::GetEarlierData(std::string event_name,
 
 void EventSystemService::NotifyEvent(const std::string& event_name,
                                      const rpc::Bundle& data) {
-  auto i = listeners_.find(event_name);
-  if (i == listeners_.end()) return;
-  (*i).second.listener_->Invoke(event_name,
-                                rpc::Bundle(data.GetHandle(), false, false));
+  for (auto& [ename, event_data] : listeners_) {
+    if (ename == event_name) {
+      event_data.listener_->Invoke(event_name,
+                                   rpc::Bundle(data.GetHandle(), false, false));
+    }
+  }
 }
 
 void EventSystemService::NotifyTrustedEvent(const std::string& event_name,
                                             const rpc::Bundle& data,
                                             const std::string& sender,
                                             const std::string& receiver) {
-  auto i = listeners_.find(event_name);
-  if (i == listeners_.end()) return;
-
   int val = CertificateMatcher::Match(sender, receiver);
   if (val != ES_R_OK) {
     _E("CertificateMatcher failed. Skip!");
     return;
   }
 
-  (*i).second.listener_->Invoke(event_name,
-                                rpc::Bundle(data.GetHandle(), false, false));
+  for (auto& [ename, event_data] : listeners_) {
+    if (ename == event_name) {
+      event_data.listener_->Invoke(event_name,
+                                   rpc::Bundle(data.GetHandle(), false, false));
+    }
+  }
 }
 
 }  // namespace esd::module
index ecbd7cd077fab63e251c1cdbbf4074ba56e47c00..fde0697000ab28f7a5a37c277abb058912316798 100644 (file)
@@ -84,7 +84,7 @@ class EventSystemService : public rpc_stub::EventSystem::ServiceBase {
 
   const rpc_stub::EventSystem& parent_;
   IEvent& evt_listener_;
-  std::map<std::string, EventData> listeners_;
+  std::multimap<std::string, EventData> listeners_;
 };
 
 }  // namespace esd::module