summaryrefslogtreecommitdiff
path: root/src/components/application_manager/src/commands/hmi/navi_start_stream_request.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/application_manager/src/commands/hmi/navi_start_stream_request.cc')
-rw-r--r--src/components/application_manager/src/commands/hmi/navi_start_stream_request.cc111
1 files changed, 105 insertions, 6 deletions
diff --git a/src/components/application_manager/src/commands/hmi/navi_start_stream_request.cc b/src/components/application_manager/src/commands/hmi/navi_start_stream_request.cc
index cb9dbd61e..1ff7916b9 100644
--- a/src/components/application_manager/src/commands/hmi/navi_start_stream_request.cc
+++ b/src/components/application_manager/src/commands/hmi/navi_start_stream_request.cc
@@ -1,4 +1,4 @@
-/**
+/*
* Copyright (c) 2013, Ford Motor Company
* All rights reserved.
*
@@ -31,6 +31,9 @@
*/
#include "application_manager/commands/hmi/navi_start_stream_request.h"
+#include "application_manager/application_manager_impl.h"
+#include "protocol_handler/protocol_handler.h"
+#include "config_profile/profile.h"
namespace application_manager {
@@ -38,20 +41,116 @@ namespace commands {
NaviStartStreamRequest::NaviStartStreamRequest(
const MessageSharedPtr& message)
- : RequestToHMI(message) {
+ : RequestToHMI(message),
+ retry_number_(0) {
+ LOG4CXX_AUTO_TRACE(logger_);
+ std::pair<uint32_t, int32_t> stream_retry =
+ profile::Profile::instance()->start_stream_retry_amount();
+ default_timeout_ = stream_retry.second;
+ retry_number_ = stream_retry.first;
+ LOG4CXX_DEBUG(logger_, "default_timeout_ = " << default_timeout_
+ <<"; retry_number_ = " << retry_number_);
}
NaviStartStreamRequest::~NaviStartStreamRequest() {
}
void NaviStartStreamRequest::Run() {
- LOG4CXX_INFO(logger_, "NaviStartStreamRequest::Run");
+ LOG4CXX_AUTO_TRACE(logger_);
- SendRequest();
+ SetAllowedToTerminate(false);
+ subscribe_on_event(hmi_apis::FunctionID::Navigation_StartStream,
+ correlation_id());
+
+ ApplicationSharedPtr app = ApplicationManagerImpl::instance()->
+ application_by_hmi_app(application_id());
+ if (app) {
+ app->set_video_streaming_allowed(true);
+ SendRequest();
+ } else {
+ LOG4CXX_ERROR(logger_, "Applcation with hmi_app_id "
+ << application_id() << "does not exist");
+ }
}
-} // namespace commands
+void NaviStartStreamRequest::on_event(const event_engine::Event& event) {
+ using namespace protocol_handler;
+ LOG4CXX_AUTO_TRACE(logger_);
-} // namespace application_manager
+ ApplicationSharedPtr app = ApplicationManagerImpl::instance()->
+ application_by_hmi_app(application_id());
+ if (!app) {
+ LOG4CXX_ERROR(logger_,
+ "NaviStartStreamRequest aborted. Application not found");
+ return;
+ }
+
+ const smart_objects::SmartObject& message = event.smart_object();
+ switch (event.id()) {
+ case hmi_apis::FunctionID::Navigation_StartStream: {
+ LOG4CXX_DEBUG(logger_, "Received StartStream event");
+
+ const hmi_apis::Common_Result::eType code =
+ static_cast<hmi_apis::Common_Result::eType>(
+ message[strings::params][hmi_response::code].asInt());
+
+ if (hmi_apis::Common_Result::SUCCESS == code) {
+ LOG4CXX_DEBUG(logger_, "NaviStartStreamResponse SUCCESS");
+ if (ApplicationManagerImpl::instance()->
+ HMILevelAllowsStreaming(app->app_id(), ServiceType::kMobileNav)) {
+ app->set_video_streaming_approved(true);
+ } else {
+ LOG4CXX_DEBUG(logger_,
+ "NaviStartStreamRequest aborted. Application can not stream");
+ }
+ }
+ break;
+ }
+ default: {
+ LOG4CXX_ERROR(logger_,"Received unknown event" << event.id());
+ return;
+ }
+ }
+}
+
+void NaviStartStreamRequest::onTimeOut() {
+ RetryStartSession();
+ ApplicationManagerImpl::instance()->TerminateRequest(
+ connection_key(), correlation_id());
+}
+
+void NaviStartStreamRequest::RetryStartSession() {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ ApplicationSharedPtr app = ApplicationManagerImpl::instance()->
+ application_by_hmi_app(application_id());
+ if (!app) {
+ LOG4CXX_ERROR(logger_,
+ "NaviStartStreamRequest aborted. Application not found");
+ return;
+ }
+ if (app->video_streaming_approved()) {
+ LOG4CXX_DEBUG(logger_, "NaviStartStream retry sequence stopped. "
+ << "SUCCESS received");
+ app->set_video_stream_retry_number(0);
+ return;
+ }
+
+ uint32_t curr_retry_number = app->video_stream_retry_number();
+ if (curr_retry_number < retry_number_ - 1) {
+ LOG4CXX_DEBUG(logger_, "Send NaviStartStream retry. retry_number = "
+ << curr_retry_number);
+ MessageHelper::SendNaviStartStream(app->app_id());
+ app->set_video_stream_retry_number(++curr_retry_number);
+ } else {
+ LOG4CXX_DEBUG(logger_, "NaviStartStream retry sequence stopped. "
+ << "Attempts expired");
+ app->set_video_stream_retry_number(0);
+ ApplicationManagerImpl::instance()->EndNaviServices(app->app_id());
+ }
+}
+
+} // namespace commands
+} // namespace application_manager