- // New observer
- afb_event_t event = afb_daemon_make_event(LCM_EVENT_STATUS_CHANGED);
- //afb_event_t event = afb_daemon_make_event(LCM_EVENT_STATUS_CHANGED);
- (this->map_observers[target])[observer] = {
- event,
- std::bitset<NUM_STATUS>(ACTIVITY_FILTER_ALL_SET)
- };
+ if (this->map_observers.count(target)) {
+ // already registered
+ HMI_DEBUG("observer(%p, target=\"%s\") is already exist", obs, target.c_str());
+ std::vector<observer*> obs_v = this->map_observers[target];
+ auto result = std::find(obs_v.begin(), obs_v.end(), obs);
+ if (result != obs_v.end()) {
+ HMI_DEBUG("observer(%p, target=\"%s\") is already registered", obs, target.c_str());
+ return;
+ }
+ }
+ HMI_DEBUG("observer(%p, target=\"%s\") is registered", obs, target.c_str());
+ (this->map_observers[target]).push_back(obs);
+}