summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAGaliuzov <AGaliuzov@luxoft.com>2016-05-28 16:02:19 +0300
committerLevchenko <slevchenko@SLevchenko-lws-unq>2016-08-03 17:54:53 +0300
commit2b41357ed319cdc0606b23ef09643be24bf486bc (patch)
tree34af66c5c3c66c69ae1ab078d34b31bb3592c28f
parenta84b8ffa40d7ce29069716da0df9438e8360890e (diff)
downloadsdl_core-2b41357ed319cdc0606b23ef09643be24bf486bc.tar.gz
AppLaunch TM and CH implementation
Applaunch functionality in TransportMaanger and ConnectionHAndler implementation Related issue : APPLINK-24892
-rw-r--r--src/components/connection_handler/include/connection_handler/connection_handler.h10
-rw-r--r--src/components/connection_handler/include/connection_handler/connection_handler_impl.h10
-rw-r--r--src/components/connection_handler/src/connection_handler_impl.cc13
-rw-r--r--src/components/include/test/connection_handler/mock_connection_handler.h3
-rw-r--r--src/components/include/test/transport_manager/mock_transport_manager.h3
-rw-r--r--src/components/include/transport_manager/transport_adapter/device.h12
-rw-r--r--src/components/include/transport_manager/transport_adapter/transport_adapter.h10
-rw-r--r--src/components/include/transport_manager/transport_manager.h10
-rw-r--r--src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_impl.h11
-rw-r--r--src/components/transport_manager/include/transport_manager/transport_manager_impl.h10
-rw-r--r--src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc14
-rw-r--r--src/components/transport_manager/src/transport_manager_impl.cc28
-rw-r--r--src/components/transport_manager/test/include/transport_manager/transport_adapter_mock.h3
13 files changed, 136 insertions, 1 deletions
diff --git a/src/components/connection_handler/include/connection_handler/connection_handler.h b/src/components/connection_handler/include/connection_handler/connection_handler.h
index cb22b87bbb..c108758046 100644
--- a/src/components/connection_handler/include/connection_handler/connection_handler.h
+++ b/src/components/connection_handler/include/connection_handler/connection_handler.h
@@ -68,6 +68,16 @@ class ConnectionHandler {
virtual void ConnectToDevice(
connection_handler::DeviceHandle device_handle) = 0;
+ /**
+ * @brief RunAppOnDevice allows to run specific application on the certain device.
+ *
+ * @param device_handle device identifier to run application on.
+ *
+ * @param app_id application id also known as bundle id on some devices to run.
+ */
+ virtual void RunAppOnDevice(const std::string& device_handle,
+ const std::string& bundle_id) const = 0;
+
virtual void ConnectToAllDevices() = 0;
/**
diff --git a/src/components/connection_handler/include/connection_handler/connection_handler_impl.h b/src/components/connection_handler/include/connection_handler/connection_handler_impl.h
index d061e55491..3a35049b9b 100644
--- a/src/components/connection_handler/include/connection_handler/connection_handler_impl.h
+++ b/src/components/connection_handler/include/connection_handler/connection_handler_impl.h
@@ -102,6 +102,16 @@ class ConnectionHandlerImpl
*/
void ConnectToDevice(connection_handler::DeviceHandle device_handle) OVERRIDE;
+ /**
+ * @brief RunAppOnDevice allows to run specific application on the certain device.
+ *
+ * @param device_handle device identifier to run application on.
+ *
+ * @param app_id application id also known as bundle id on some devices to run.
+ */
+ void RunAppOnDevice(const std::string& device_mac,
+ const std::string& bundle_id) const OVERRIDE;
+
void ConnectToAllDevices() OVERRIDE;
void StartTransportManager() OVERRIDE;
diff --git a/src/components/connection_handler/src/connection_handler_impl.cc b/src/components/connection_handler/src/connection_handler_impl.cc
index d8c05e6e6e..96c55ad100 100644
--- a/src/components/connection_handler/src/connection_handler_impl.cc
+++ b/src/components/connection_handler/src/connection_handler_impl.cc
@@ -697,6 +697,19 @@ void ConnectionHandlerImpl::ConnectToDevice(
}
}
+void ConnectionHandlerImpl::RunAppOnDevice(const std::string& device_mac,
+ const std::string& bundle_id) const {
+ for (DeviceMap::const_iterator i = device_list_.begin();
+ i != device_list_.end(); ++i) {
+ const connection_handler::Device& device = i->second;
+ if (device.mac_address() == device_mac) {
+ transport_manager_.RunAppOnDevice(device.device_handle(), bundle_id);
+ return;
+ }
+ }
+ LOG4CXX_WARN(logger_, "No apps found on device " << device_mac);
+}
+
void ConnectionHandlerImpl::ConnectToAllDevices() {
for (DeviceMap::iterator i = device_list_.begin(); i != device_list_.end();
++i) {
diff --git a/src/components/include/test/connection_handler/mock_connection_handler.h b/src/components/include/test/connection_handler/mock_connection_handler.h
index eac82cc177..ed9fec7761 100644
--- a/src/components/include/test/connection_handler/mock_connection_handler.h
+++ b/src/components/include/test/connection_handler/mock_connection_handler.h
@@ -59,6 +59,9 @@ class MockConnectionHandler : public connection_handler::ConnectionHandler {
MOCK_METHOD0(StartTransportManager, void());
MOCK_METHOD1(ConnectToDevice,
void(connection_handler::DeviceHandle device_handle));
+ MOCK_CONST_METHOD2(RunAppOnDevice,
+ void(const std::string&,
+ const std::string&));
MOCK_METHOD0(ConnectToAllDevices, void());
MOCK_METHOD1(CloseRevokedConnection, void(uint32_t connection_key));
MOCK_METHOD1(CloseConnection, void(ConnectionHandle connection_handle));
diff --git a/src/components/include/test/transport_manager/mock_transport_manager.h b/src/components/include/test/transport_manager/mock_transport_manager.h
index 618e85a4fa..89534b4588 100644
--- a/src/components/include/test/transport_manager/mock_transport_manager.h
+++ b/src/components/include/test/transport_manager/mock_transport_manager.h
@@ -65,6 +65,9 @@ class MockTransportManager : public ::transport_manager::TransportManager,
MOCK_METHOD1(DisconnectForce, int(const ConnectionUID));
MOCK_METHOD1(SendMessageToDevice,
int(const ::protocol_handler::RawMessagePtr));
+ MOCK_METHOD2(RunAppOnDevice,
+ void(const DeviceHandle,
+ const std::string&));
MOCK_METHOD1(ReceiveEventFromDevice, int(const TransportAdapterEvent&));
MOCK_METHOD1(AddTransportAdapter, int(TransportAdapter* adapter));
MOCK_METHOD1(AddEventListener, int(TransportManagerListener* listener));
diff --git a/src/components/include/transport_manager/transport_adapter/device.h b/src/components/include/transport_manager/transport_adapter/device.h
index a1dd7b9bcf..c09fa4d21e 100644
--- a/src/components/include/transport_manager/transport_adapter/device.h
+++ b/src/components/include/transport_manager/transport_adapter/device.h
@@ -38,6 +38,7 @@
#include "transport_manager/common.h"
#include "utils/shared_ptr.h"
+#include "utils/macro.h"
namespace transport_manager {
namespace transport_adapter {
@@ -76,7 +77,16 @@ class Device {
virtual ApplicationList GetApplicationList() const = 0;
- virtual void Stop() {}
+ /**
+ * @brief LaunchApp allows to run appropriate application on the device.
+ *
+ * @param bundle_id application identifier to run.
+ */
+ virtual void LaunchApp(const std::string& bundle_id) const {
+ UNUSED(bundle_id);
+ }
+
+ virtual void Stop() { }
inline const DeviceUID& unique_device_id() const {
return unique_device_id_;
diff --git a/src/components/include/transport_manager/transport_adapter/transport_adapter.h b/src/components/include/transport_manager/transport_adapter/transport_adapter.h
index 3ff1aa6eee..c2d829fcbe 100644
--- a/src/components/include/transport_manager/transport_adapter/transport_adapter.h
+++ b/src/components/include/transport_manager/transport_adapter/transport_adapter.h
@@ -175,6 +175,16 @@ class TransportAdapter {
virtual Error ConnectDevice(const DeviceUID& device_handle) = 0;
/**
+ * @brief RunAppOnDevice allows to run specific application on the certain device.
+ *
+ * @param device_handle device identifier to run application on.
+ *
+ * @param app_id application id also known as bundle id on some devices to run.
+ */
+ virtual void RunAppOnDevice(const std::string& device_uid,
+ const std::string& bundle_id) = 0;
+
+ /**
* @brief Notify that listener of client connection is available.
*
* @return true - available, false - not available.
diff --git a/src/components/include/transport_manager/transport_manager.h b/src/components/include/transport_manager/transport_manager.h
index 718f9e12aa..2fcf614e62 100644
--- a/src/components/include/transport_manager/transport_manager.h
+++ b/src/components/include/transport_manager/transport_manager.h
@@ -121,6 +121,16 @@ class TransportManager {
const protocol_handler::RawMessagePtr message) = 0;
/**
+ * @brief RunAppOnDevice allows run specific application on the certain device.
+ *
+ * @param device_handle device identifier to run application on.
+ *
+ * @param bundle_id application id alsow known as bundle id on some devices to run.
+ */
+ virtual void RunAppOnDevice(const DeviceHandle device_handle,
+ const std::string& bundle_id) = 0;
+
+ /**
* @brief Post event in the event queue.
*
* @param event Current event information.
diff --git a/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_impl.h b/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_impl.h
index 3dedead540..5dd0dfbce4 100644
--- a/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_impl.h
+++ b/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_impl.h
@@ -478,6 +478,17 @@ class TransportAdapterImpl : public TransportAdapter,
*/
TransportAdapter::Error ConnectDevice(DeviceSptr device);
+
+ /**
+ * @brief RunAppOnDevice allows run specific application on the certain device.
+ *
+ * @param device_handle device identifier to run application on.
+ *
+ * @param bundle_id application id alsow known as bundle id on some devices to run.
+ */
+ void RunAppOnDevice(const DeviceUID &device_uid,
+ const std::string& bundle_id) OVERRIDE;
+
/**
* @brief Remove specified device
* @param device_handle Device unique identifier.
diff --git a/src/components/transport_manager/include/transport_manager/transport_manager_impl.h b/src/components/transport_manager/include/transport_manager/transport_manager_impl.h
index 289df3535d..bf7ec7324f 100644
--- a/src/components/transport_manager/include/transport_manager/transport_manager_impl.h
+++ b/src/components/transport_manager/include/transport_manager/transport_manager_impl.h
@@ -181,6 +181,16 @@ class TransportManagerImpl
const protocol_handler::RawMessagePtr message) OVERRIDE;
/**
+ * @brief RunAppOnDevice allows to run specific application on the certain device.
+ *
+ * @param device_handle device identifier to run application on.
+ *
+ * @param bundle_id application id also known as bundle id on some devices to run.
+ */
+ void RunAppOnDevice(const DeviceHandle device_handle,
+ const std::string& bundle_id) OVERRIDE;
+
+ /**
* @brief Post event in the event queue.
*
* @param event Current event information.
diff --git a/src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc b/src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc
index 5638eecdee..a481ed111e 100644
--- a/src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc
+++ b/src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc
@@ -952,6 +952,20 @@ TransportAdapter::Error TransportAdapterImpl::ConnectDevice(DeviceSptr device) {
}
}
+void TransportAdapterImpl::RunAppOnDevice(const DeviceUID& device_uid,
+ const std::string& bundle_id) {
+ LOG4CXX_AUTO_TRACE(logger_);
+
+ DeviceSptr device = FindDevice(device_uid);
+ if (!device) {
+ LOG4CXX_WARN(logger_, "Device with id: " << device_uid << " Not found"
+ << "withing list of connected deviced");
+ return;
+ }
+
+ device->LaunchApp(bundle_id);
+}
+
void TransportAdapterImpl::RemoveDevice(const DeviceUID& device_handle) {
LOG4CXX_AUTO_TRACE(logger_);
LOG4CXX_DEBUG(logger_, "Device_handle: " << &device_handle);
diff --git a/src/components/transport_manager/src/transport_manager_impl.cc b/src/components/transport_manager/src/transport_manager_impl.cc
index 113d280c8d..c5b1f5c89a 100644
--- a/src/components/transport_manager/src/transport_manager_impl.cc
+++ b/src/components/transport_manager/src/transport_manager_impl.cc
@@ -341,6 +341,34 @@ int TransportManagerImpl::SendMessageToDevice(
return E_SUCCESS;
}
+void TransportManagerImpl::RunAppOnDevice(const DeviceHandle device_handle,
+ const std::string& bundle_id) {
+ if (!this->is_initialized_) {
+ LOG4CXX_ERROR(logger_, "TransportManager is not initialized.");
+ return;
+ }
+ DeviceUID device_id = converter_.HandleToUid(device_handle);
+ LOG4CXX_DEBUG(logger_, "Convert handle to id:" << device_id);
+
+ sync_primitives::AutoReadLock lock(device_to_adapter_map_lock_);
+ DeviceToAdapterMap::iterator it = device_to_adapter_map_.find(device_id);
+ if (it == device_to_adapter_map_.end()) {
+ LOG4CXX_ERROR(logger_, "No device adapter found by id " << device_id);
+ return;
+ }
+ transport_adapter::TransportAdapter* ta = it->second;
+
+ if (!ta) {
+ LOG4CXX_ERROR(logger_, "Transport adapter for device: " << device_id
+ << " is NULL");
+ return;
+ }
+
+ ta->RunAppOnDevice(device_id, bundle_id);
+
+ return;
+}
+
int TransportManagerImpl::ReceiveEventFromDevice(
const TransportAdapterEvent& event) {
LOG4CXX_TRACE(logger_, "enter. TransportAdapterEvent: " << &event);
diff --git a/src/components/transport_manager/test/include/transport_manager/transport_adapter_mock.h b/src/components/transport_manager/test/include/transport_manager/transport_adapter_mock.h
index d12741f49a..2aca5e97bb 100644
--- a/src/components/transport_manager/test/include/transport_manager/transport_adapter_mock.h
+++ b/src/components/transport_manager/test/include/transport_manager/transport_adapter_mock.h
@@ -66,6 +66,9 @@ class MockTransportAdapter
MOCK_METHOD1(ConnectDevice,
::transport_manager::transport_adapter::TransportAdapter::Error(
const ::transport_manager::DeviceUID& device_handle));
+ MOCK_METHOD2(RunAppOnDevice,
+ void(const std::string&,
+ const std::string&));
MOCK_CONST_METHOD0(IsClientOriginatedConnectSupported, bool());
MOCK_METHOD0(
StartClientListening,