From ad32fca1735ff424f20c574cfde62395382f861a Mon Sep 17 00:00:00 2001 From: JackLivio Date: Wed, 14 Oct 2020 07:44:13 -0700 Subject: Add error handling for failed hmi message send (#3537) --- .../application_manager/src/rpc_handler_impl.cc | 20 ++++++++++++++++++++ .../include/hmi_message_handler/mb_controller.h | 2 +- .../hmi_message_handler/src/mb_controller.cc | 9 +++++---- .../hmi_message_handler/src/messagebroker_adapter.cc | 4 +++- 4 files changed, 29 insertions(+), 6 deletions(-) diff --git a/src/components/application_manager/src/rpc_handler_impl.cc b/src/components/application_manager/src/rpc_handler_impl.cc index b8dad59830..4137ab93bb 100644 --- a/src/components/application_manager/src/rpc_handler_impl.cc +++ b/src/components/application_manager/src/rpc_handler_impl.cc @@ -283,6 +283,26 @@ void RPCHandlerImpl::OnMessageReceived( void RPCHandlerImpl::OnErrorSending( hmi_message_handler::MessageSharedPointer message) { + SDL_LOG_AUTO_TRACE(); + smart_objects::SmartObjectSPtr smart_object = + std::make_shared(); + std::string warning_info; + bool allow_unknown_parameters = true; + if (ConvertMessageToSO( + *message, *smart_object, warning_info, allow_unknown_parameters)) { + (*smart_object)[strings::params][strings::message_type] = + application_manager::MessageType::kResponse; + (*smart_object).erase(strings::msg_params); + (*smart_object)[strings::params][hmi_response::code] = + hmi_apis::Common_Result::GENERIC_ERROR; + (*smart_object)[strings::params][strings::error_msg] = + std::string("Error sending message, mb component not registered"); + + if (!app_manager_.GetRPCService().ManageHMICommand( + smart_object, commands::Command::SOURCE_HMI, warning_info)) { + SDL_LOG_ERROR("Received command didn't run successfully"); + } + } return; } diff --git a/src/components/hmi_message_handler/include/hmi_message_handler/mb_controller.h b/src/components/hmi_message_handler/include/hmi_message_handler/mb_controller.h index 2b7f9d6976..5a10ccee38 100644 --- a/src/components/hmi_message_handler/include/hmi_message_handler/mb_controller.h +++ b/src/components/hmi_message_handler/include/hmi_message_handler/mb_controller.h @@ -98,7 +98,7 @@ class CMessageBrokerController { void sendResponse(Json::Value& message); - void sendJsonMessage(Json::Value& message); + bool sendJsonMessage(Json::Value& message); void subscribeTo(std::string property); diff --git a/src/components/hmi_message_handler/src/mb_controller.cc b/src/components/hmi_message_handler/src/mb_controller.cc index bea05cde1a..e74f719780 100644 --- a/src/components/hmi_message_handler/src/mb_controller.cc +++ b/src/components/hmi_message_handler/src/mb_controller.cc @@ -176,13 +176,13 @@ void CMessageBrokerController::sendResponse(Json::Value& message) { } } -void CMessageBrokerController::sendJsonMessage(Json::Value& message) { +bool CMessageBrokerController::sendJsonMessage(Json::Value& message) { if (isNotification(message)) { sendNotification(message); - return; + return true; } else if (isResponse(message)) { sendResponse(message); - return; + return true; } // Send request @@ -205,10 +205,11 @@ void CMessageBrokerController::sendJsonMessage(Json::Value& message) { if (!ws) { SDL_LOG_ERROR( "A controller is not found for the method: " << component_name); - return; + return false; } ws->sendJsonMessage(message); + return true; } void CMessageBrokerController::subscribeTo(std::string property) {} diff --git a/src/components/hmi_message_handler/src/messagebroker_adapter.cc b/src/components/hmi_message_handler/src/messagebroker_adapter.cc index ca3d03dd91..cc13341ca0 100644 --- a/src/components/hmi_message_handler/src/messagebroker_adapter.cc +++ b/src/components/hmi_message_handler/src/messagebroker_adapter.cc @@ -70,7 +70,9 @@ void MessageBrokerAdapter::SendMessageToHMI( return; } - sendJsonMessage(json_value); + if (!sendJsonMessage(json_value)) { + handler()->OnErrorSending(message); + } } void MessageBrokerAdapter::processResponse(std::string method, -- cgit v1.2.1