summaryrefslogtreecommitdiff
path: root/src/components/transport_manager/include/transport_manager/transport_manager_impl.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/transport_manager/include/transport_manager/transport_manager_impl.h')
-rw-r--r--src/components/transport_manager/include/transport_manager/transport_manager_impl.h156
1 files changed, 96 insertions, 60 deletions
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 4c38716f3f..289df3535d 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
@@ -36,28 +36,46 @@
#include <queue>
#include <map>
#include <list>
+#include <vector>
+#include <utility>
#include <algorithm>
-#include "utils/timer_thread.h"
+#include "utils/timer.h"
+#include "utils/timer_task_impl.h"
+#include "utils/rwlock.h"
#include "transport_manager/transport_manager.h"
#include "transport_manager/transport_manager_listener.h"
#include "transport_manager/transport_adapter/transport_adapter_listener_impl.h"
#include "protocol/common.h"
-#ifdef TIME_TESTER
-#include "transport_manager/time_metric_observer.h"
-#endif // TIME_TESTER
+#ifdef TELEMETRY_MONITOR
+#include "transport_manager/telemetry_observer.h"
+#include "telemetry_monitor/telemetry_observable.h"
+#endif // TELEMETRY_MONITOR
#include "utils/threads/message_loop_thread.h"
#include "transport_manager/transport_adapter/transport_adapter_event.h"
+#include "transport_manager/transport_manager_settings.h"
namespace transport_manager {
+typedef threads::MessageLoopThread<std::queue<protocol_handler::RawMessagePtr> >
+ RawMessageLoopThread;
+typedef threads::MessageLoopThread<std::queue<TransportAdapterEvent> >
+ TransportAdapterEventLoopThread;
+typedef utils::SharedPtr<timer::Timer> TimerSPtr;
+
/**
* @brief Implementation of transport manager.s
*/
-class TransportManagerImpl : public TransportManager,
- public threads::MessageLoopThread<std::queue<protocol_handler::RawMessagePtr> >::Handler,
- public threads::MessageLoopThread<std::queue<TransportAdapterEvent> >::Handler {
+class TransportManagerImpl
+ : public TransportManager,
+ public RawMessageLoopThread::Handler,
+ public TransportAdapterEventLoopThread::Handler
+#ifdef TELEMETRY_MONITOR
+ ,
+ public telemetry_monitor::TelemetryObservable<TMTelemetryObserver>
+#endif // TELEMETRY_MONITOR
+ {
public:
struct Connection {
ConnectionUID id;
@@ -69,24 +87,29 @@ class TransportManagerImpl : public TransportManager,
/**
* @brief Structure that contains internal connection parameters
*/
- struct ConnectionInternal: public Connection {
+ struct ConnectionInternal : public Connection {
TransportManagerImpl* transport_manager;
TransportAdapter* transport_adapter;
- typedef timer::TimerThread<ConnectionInternal> TimerInternal;
- typedef utils::SharedPtr<TimerInternal> TimerInternalSharedPointer;
- TimerInternalSharedPointer timer;
- bool shutDown;
+ TimerSPtr timer;
+ bool shutdown_;
DeviceHandle device_handle_;
int messages_count;
ConnectionInternal(TransportManagerImpl* transport_manager,
TransportAdapter* transport_adapter,
- const ConnectionUID& id, const DeviceUID& dev_id,
+ const ConnectionUID id,
+ const DeviceUID& dev_id,
const ApplicationHandle& app_id,
- const DeviceHandle& device_handle);
+ const DeviceHandle device_handle);
+
void DisconnectFailedRoutine();
};
+
public:
+ /**
+ * @brief Constructor.
+ **/
+ explicit TransportManagerImpl(const TransportManagerSettings& settings);
/**
* @brief Destructor.
@@ -98,20 +121,20 @@ class TransportManagerImpl : public TransportManager,
*
* @return Code error.
*/
- virtual int Init();
+ int Init(resumption::LastState& last_state) OVERRIDE;
/**
* Reinitializes transport manager
* @return Error code
*/
- virtual int Reinit();
+ virtual int Reinit() OVERRIDE;
/**
* @brief Start scanning for new devices.
*
* @return Code error.
**/
- virtual int SearchDevices();
+ int SearchDevices() OVERRIDE;
/**
* @brief Connect to all applications discovered on device.
@@ -120,7 +143,7 @@ class TransportManagerImpl : public TransportManager,
*
* @return Code error.
**/
- virtual int ConnectDevice(const DeviceHandle& device_id);
+ int ConnectDevice(const DeviceHandle device_id) OVERRIDE;
/**
* @brief Disconnect from all applications connected on device.
@@ -129,7 +152,7 @@ class TransportManagerImpl : public TransportManager,
*
* @return Code error.
**/
- virtual int DisconnectDevice(const DeviceHandle& device_id);
+ int DisconnectDevice(const DeviceHandle device_id) OVERRIDE;
/**
* @brief Disconnect from applications connected on device by connection
@@ -139,14 +162,14 @@ class TransportManagerImpl : public TransportManager,
*
* @return Code error.
**/
- virtual int Disconnect(const ConnectionUID& connection_id);
+ int Disconnect(const ConnectionUID connection_id) OVERRIDE;
/**
* @brief Disconnect and clear all unreceived data.
*
* @param connection Connection unique identifier.
*/
- virtual int DisconnectForce(const ConnectionUID& connection_id);
+ int DisconnectForce(const ConnectionUID connection_id) OVERRIDE;
/**
* @brief Post new message in queue for massages destined to device.
*
@@ -154,7 +177,8 @@ class TransportManagerImpl : public TransportManager,
*
* @return Code error.
**/
- virtual int SendMessageToDevice(const protocol_handler::RawMessagePtr message);
+ int SendMessageToDevice(
+ const protocol_handler::RawMessagePtr message) OVERRIDE;
/**
* @brief Post event in the event queue.
@@ -163,7 +187,7 @@ class TransportManagerImpl : public TransportManager,
*
* @return Code error.
**/
- virtual int ReceiveEventFromDevice(const TransportAdapterEvent& event);
+ int ReceiveEventFromDevice(const TransportAdapterEvent& event) OVERRIDE;
/**
* @brief Post listener to the container of transport manager listeners.
@@ -172,9 +196,9 @@ class TransportManagerImpl : public TransportManager,
*
* @return Code error.
**/
- virtual int AddEventListener(TransportManagerListener* listener);
+ int AddEventListener(TransportManagerListener* listener) OVERRIDE;
- virtual int Stop();
+ int Stop() OVERRIDE;
/**
* @brief Add device adapter to the container of device adapters.
@@ -183,8 +207,8 @@ class TransportManagerImpl : public TransportManager,
*
* @return Code error.
**/
- virtual int AddTransportAdapter(
- transport_adapter::TransportAdapter* transport_adapter);
+ int AddTransportAdapter(
+ transport_adapter::TransportAdapter* transport_adapter) OVERRIDE;
/**
* @brief Remove device from the container that hold devices.
@@ -193,7 +217,7 @@ class TransportManagerImpl : public TransportManager,
*
* @return Code error.
**/
- virtual int RemoveDevice(const DeviceHandle& device);
+ int RemoveDevice(const DeviceHandle device) OVERRIDE;
/**
* @brief Turns on or off visibility of SDL to mobile devices
@@ -202,7 +226,7 @@ class TransportManagerImpl : public TransportManager,
*
* @return Code error.
*/
- virtual int Visibility(const bool& on_off) const;
+ int Visibility(const bool& on_off) const OVERRIDE;
/**
* @brief Updates total device list with info from specific transport adapter.
@@ -210,28 +234,29 @@ class TransportManagerImpl : public TransportManager,
*/
void UpdateDeviceList(TransportAdapter* ta);
-#ifdef TIME_TESTER
+#ifdef TELEMETRY_MONITOR
/**
* @brief Setup observer for time metric.
*
* @param observer - pointer to observer
*/
- void SetTimeMetricObserver(TMMetricObserver* observer);
-#endif // TIME_TESTER
-
+ void SetTelemetryObserver(TMTelemetryObserver* observer);
+#endif // TELEMETRY_MONITOR
/**
* @brief Constructor.
**/
TransportManagerImpl();
- protected:
+ const TransportManagerSettings& get_settings() const;
+ protected:
template <class Proc, class... Args>
void RaiseEvent(Proc proc, Args... args) {
for (TransportManagerListenerList::iterator it =
transport_manager_listener_.begin();
- it != transport_manager_listener_.end(); ++it) {
+ it != transport_manager_listener_.end();
+ ++it) {
((*it)->*proc)(args...);
}
}
@@ -264,9 +289,9 @@ class TransportManagerImpl : public TransportManager,
*/
bool is_initialized_;
-#ifdef TIME_TESTER
- TMMetricObserver* metric_observer_;
-#endif // TIME_TESTER
+#ifdef TELEMETRY_MONITOR
+ TMTelemetryObserver* metric_observer_;
+#endif // TELEMETRY_MONITOR
private:
/**
@@ -282,19 +307,24 @@ class TransportManagerImpl : public TransportManager,
}
DeviceHandle UidToHandle(const DeviceUID& dev_uid, bool& is_new) {
- ConversionTable::iterator it = std::find(
- conversion_table_.begin(), conversion_table_.end(), dev_uid);
- if (it != conversion_table_.end()) {
- is_new = false;
- return std::distance(conversion_table_.begin(), it) +
- 1; // handle begin since 1 (one)
+ {
+ sync_primitives::AutoReadLock lock(conversion_table_lock);
+ ConversionTable::iterator it = std::find(
+ conversion_table_.begin(), conversion_table_.end(), dev_uid);
+ if (it != conversion_table_.end()) {
+ is_new = false;
+ return std::distance(conversion_table_.begin(), it) +
+ 1; // handle begin since 1 (one)
+ }
}
is_new = true;
+ sync_primitives::AutoWriteLock lock(conversion_table_lock);
conversion_table_.push_back(dev_uid);
return conversion_table_.size(); // handle begin since 1 (one)
}
- DeviceUID HandleToUid(DeviceHandle handle) {
+ DeviceUID HandleToUid(const DeviceHandle handle) {
+ sync_primitives::AutoReadLock lock(conversion_table_lock);
if (handle == 0 || handle > conversion_table_.size()) {
return DeviceUID();
}
@@ -302,6 +332,7 @@ class TransportManagerImpl : public TransportManager,
}
ConversionTable conversion_table_;
+ sync_primitives::RWLock conversion_table_lock;
};
/**
@@ -312,22 +343,27 @@ class TransportManagerImpl : public TransportManager,
explicit TransportManagerImpl(const TransportManagerImpl&);
int connection_id_counter_;
+ sync_primitives::RWLock connections_lock_;
std::vector<ConnectionInternal> connections_;
- std::map<DeviceUID, TransportAdapter*> device_to_adapter_map_;
+ sync_primitives::RWLock device_to_adapter_map_lock_;
+ typedef std::map<DeviceUID, TransportAdapter*> DeviceToAdapterMap;
+ DeviceToAdapterMap device_to_adapter_map_;
std::vector<TransportAdapter*> transport_adapters_;
/** For keep listeners which were add TMImpl */
std::map<TransportAdapter*, TransportAdapterListenerImpl*>
transport_adapter_listeners_;
- threads::MessageLoopThread<std::queue<protocol_handler::RawMessagePtr> > message_queue_;
- threads::MessageLoopThread<std::queue<TransportAdapterEvent> > event_queue_;
-
+ RawMessageLoopThread message_queue_;
+ TransportAdapterEventLoopThread event_queue_;
+ const TransportManagerSettings& settings_;
typedef std::vector<std::pair<const TransportAdapter*, DeviceInfo> >
- DeviceInfoList;
+ DeviceInfoList;
+ sync_primitives::RWLock device_list_lock_;
DeviceInfoList device_list_;
void AddConnection(const ConnectionInternal& c);
- void RemoveConnection(uint32_t id);
- ConnectionInternal* GetConnection(const ConnectionUID& id);
+ void RemoveConnection(const uint32_t id,
+ transport_adapter::TransportAdapter* transport_adapter);
+ ConnectionInternal* GetConnection(const ConnectionUID id);
ConnectionInternal* GetConnection(const DeviceUID& device,
const ApplicationHandle& application);
@@ -335,12 +371,15 @@ class TransportManagerImpl : public TransportManager,
ConnectionUID id,
std::map<ConnectionUID, std::pair<unsigned int, unsigned char*> >&
container,
- unsigned char* data, unsigned int data_size);
- bool GetFrameSize(unsigned char* data, unsigned int data_size,
+ unsigned char* data,
+ unsigned int data_size);
+ bool GetFrameSize(unsigned char* data,
+ unsigned int data_size,
unsigned int& frame_size);
bool GetFrame(std::map<ConnectionUID,
std::pair<unsigned int, unsigned char*> >& container,
- ConnectionUID id, unsigned int frame_size,
+ ConnectionUID id,
+ unsigned int frame_size,
unsigned char** frame);
void OnDeviceListUpdated(TransportAdapter* ta);
@@ -348,9 +387,6 @@ class TransportManagerImpl : public TransportManager,
void TerminateAllAdapters();
int InitAllAdapters();
static Connection convert(const ConnectionInternal& p);
-};
-// class ;
-
+}; // class TransportManagerImpl
} // namespace transport_manager
-
-#endif
+#endif // SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TRANSPORT_MANAGER_IMPL_H_