summaryrefslogtreecommitdiff
path: root/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/interior_data_manager_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/interior_data_manager_impl.cc')
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/interior_data_manager_impl.cc95
1 files changed, 69 insertions, 26 deletions
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/interior_data_manager_impl.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/interior_data_manager_impl.cc
index 0c42f6e3de..50568de63a 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/interior_data_manager_impl.cc
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/interior_data_manager_impl.cc
@@ -1,8 +1,8 @@
#include "rc_rpc_plugin/interior_data_manager_impl.h"
-#include "rc_rpc_plugin/rc_helpers.h"
-#include "rc_rpc_plugin/rc_rpc_plugin.h"
#include "application_manager/application_manager.h"
#include "application_manager/rpc_service.h"
+#include "rc_rpc_plugin/rc_helpers.h"
+#include "rc_rpc_plugin/rc_rpc_plugin.h"
namespace rc_rpc_plugin {
CREATE_LOGGERPTR_GLOBAL(logger_, "RemoteControlModule");
@@ -33,7 +33,7 @@ void InteriorDataManagerImpl::OnApplicationEvent(
void InteriorDataManagerImpl::OnDisablingRC() {
LOG4CXX_AUTO_TRACE(logger_);
auto existing_subscription = AppsSubscribedModules();
- std::set<std::string> subscribed_modules;
+ std::set<ModuleUid> subscribed_modules;
for (auto& pair : existing_subscription) {
auto& app = pair.first;
auto rc_extension = RCHelpers::GetRCExtension(*app);
@@ -43,36 +43,37 @@ void InteriorDataManagerImpl::OnDisablingRC() {
}
}
for (auto& module : subscribed_modules) {
- LOG4CXX_TRACE(logger_, "unsubscribe " << module);
+ LOG4CXX_TRACE(logger_,
+ "unsubscribe from module type: " << module.first
+ << " id: " << module.second);
UnsubscribeFromInteriorVehicleData(module);
}
}
-void InteriorDataManagerImpl::StoreRequestToHMITime(
- const std::string& module_type) {
+void InteriorDataManagerImpl::StoreRequestToHMITime(const ModuleUid& module) {
LOG4CXX_AUTO_TRACE(logger_);
sync_primitives::AutoLock autolock(requests_to_hmi_history_lock_);
- requests_to_hmi_history_[module_type].push_back(date_time::getCurrentTime());
+ requests_to_hmi_history_[module].push_back(date_time::getCurrentTime());
}
bool InteriorDataManagerImpl::CheckRequestsToHMIFrequency(
- const std::string& module_type) {
+ const ModuleUid& module) {
LOG4CXX_AUTO_TRACE(logger_);
sync_primitives::AutoLock autolock(requests_to_hmi_history_lock_);
ClearOldRequestsToHMIHistory();
- const auto& history = requests_to_hmi_history_[module_type];
+ const auto& history = requests_to_hmi_history_[module];
const auto limit =
app_mngr_.get_settings().get_interior_vehicle_data_frequency().first;
return history.size() < limit;
}
void InteriorDataManagerImpl::UpdateHMISubscriptionsOnPolicyUpdated() {
- auto apps_allowed_modules =
- RCHelpers::GetApplicationsAllowedModules(app_mngr_);
- auto apps_subscribed_modules = AppsSubscribedModules();
- InteriorDataManagerImpl::AppsModules apps_disallowed_modules;
- for (auto& pair : apps_subscribed_modules) {
- auto& allowed = apps_allowed_modules[pair.first];
+ auto apps_allowed_module_types =
+ RCHelpers::GetApplicationsAllowedModuleTypes(app_mngr_);
+ auto apps_subscribed_module_types = AppsSubscribedModuleTypes();
+ InteriorDataManagerImpl::AppsModuleTypes apps_disallowed_modules;
+ for (auto& pair : apps_subscribed_module_types) {
+ auto& allowed = apps_allowed_module_types[pair.first];
auto& subscribed = pair.second;
std::vector<std::string> disallowed_modules;
std::set_difference(subscribed.begin(),
@@ -80,18 +81,25 @@ void InteriorDataManagerImpl::UpdateHMISubscriptionsOnPolicyUpdated() {
allowed.begin(),
allowed.end(),
std::back_inserter(disallowed_modules));
+
+ std::sort(disallowed_modules.begin(), disallowed_modules.end());
+
+ auto unique_result =
+ std::unique(disallowed_modules.begin(), disallowed_modules.end());
+
+ disallowed_modules.erase(unique_result, disallowed_modules.end());
apps_disallowed_modules[pair.first] = disallowed_modules;
}
for (auto& pair : apps_disallowed_modules) {
auto& app = pair.first;
auto rc_extension = RCHelpers::GetRCExtension(*app);
- for (const auto& module : pair.second) {
- rc_extension->UnsubscribeFromInteriorVehicleData(module);
+ for (const auto& module_type : pair.second) {
+ rc_extension->UnsubscribeFromInteriorVehicleDataOfType(module_type);
auto apps_subscribed =
- RCHelpers::AppsSubscribedToModuleType(app_mngr_, module);
+ RCHelpers::AppsSubscribedToModuleType(app_mngr_, module_type);
if (apps_subscribed.empty()) {
- UnsubscribeFromInteriorVehicleData(module);
+ UnsubscribeFromInteriorVehicleDataOfType(module_type);
}
}
}
@@ -104,8 +112,7 @@ void InteriorDataManagerImpl::UpdateHMISubscriptionsOnAppUnregistered(
auto subscribed_data = rc_extension->InteriorVehicleDataSubscriptions();
rc_extension->UnsubscribeFromInteriorVehicleData();
for (auto& data : subscribed_data) {
- auto apps_subscribed =
- RCHelpers::AppsSubscribedToModuleType(app_mngr_, data);
+ auto apps_subscribed = RCHelpers::AppsSubscribedToModule(app_mngr_, data);
if (apps_subscribed.empty()) {
UnsubscribeFromInteriorVehicleData(data);
}
@@ -117,14 +124,31 @@ void InteriorDataManagerImpl::UpdateHMISubscriptionsOnAppUnregistered(
}
void InteriorDataManagerImpl::UnsubscribeFromInteriorVehicleData(
- const std::string& module_type) {
- cache_.Remove(module_type);
+ const ModuleUid& module) {
+ cache_.Remove(module);
auto unsubscribe_request = RCHelpers::CreateUnsubscribeRequestToHMI(
- module_type, app_mngr_.GetNextHMICorrelationID());
- LOG4CXX_DEBUG(logger_, "Send Unsubscribe from " << module_type);
+ module, app_mngr_.GetNextHMICorrelationID());
+ LOG4CXX_DEBUG(logger_,
+ "Send Unsubscribe from module type: " << module.first << " id: "
+ << module.second);
rpc_service_.ManageHMICommand(unsubscribe_request);
}
+void InteriorDataManagerImpl::UnsubscribeFromInteriorVehicleDataOfType(
+ const std::string& module_type) {
+ const auto& modules = cache_.GetCachedModulesByType(module_type);
+
+ for (const auto& module : modules) {
+ cache_.Remove(module);
+ auto unsubscribe_request = RCHelpers::CreateUnsubscribeRequestToHMI(
+ module, app_mngr_.GetNextHMICorrelationID());
+ LOG4CXX_DEBUG(logger_,
+ "Send Unsubscribe from module type: "
+ << module.first << " id: " << module.second);
+ rpc_service_.ManageHMICommand(unsubscribe_request);
+ }
+}
+
void InteriorDataManagerImpl::ClearOldRequestsToHMIHistory() {
auto limit =
app_mngr_.get_settings().get_interior_vehicle_data_frequency().second;
@@ -148,11 +172,30 @@ InteriorDataManagerImpl::AppsSubscribedModules() {
for (auto& app_ptr : apps_list) {
const auto rc_extension = RCHelpers::GetRCExtension(*app_ptr);
auto app_subscriptions = rc_extension->InteriorVehicleDataSubscriptions();
- result[app_ptr] = std::vector<std::string>(app_subscriptions.size());
+ result[app_ptr] = std::vector<ModuleUid>(app_subscriptions.size());
std::copy(app_subscriptions.begin(),
app_subscriptions.end(),
result[app_ptr].begin());
}
return result;
}
+
+InteriorDataManagerImpl::AppsModuleTypes
+InteriorDataManagerImpl::AppsSubscribedModuleTypes() {
+ auto apps_list = RCRPCPlugin::GetRCApplications(app_mngr_);
+ RCHelpers::AppsModuleTypes result;
+ for (auto& app_ptr : apps_list) {
+ const auto rc_extension = RCHelpers::GetRCExtension(*app_ptr);
+ auto app_subscriptions = rc_extension->InteriorVehicleDataSubscriptions();
+ std::vector<std::string> app_module_types;
+
+ for (auto& app_subscription : app_subscriptions) {
+ app_module_types.push_back(app_subscription.first);
+ }
+
+ std::sort(app_module_types.begin(), app_module_types.end());
+ result[app_ptr] = app_module_types;
+ }
+ return result;
+}
} // namespace rc_rpc_plugin