summaryrefslogtreecommitdiff
path: root/src/components/transport_manager/include/transport_manager/transport_adapter/threaded_socket_connection.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/transport_manager/include/transport_manager/transport_adapter/threaded_socket_connection.h')
-rw-r--r--src/components/transport_manager/include/transport_manager/transport_adapter/threaded_socket_connection.h43
1 files changed, 24 insertions, 19 deletions
diff --git a/src/components/transport_manager/include/transport_manager/transport_adapter/threaded_socket_connection.h b/src/components/transport_manager/include/transport_manager/transport_adapter/threaded_socket_connection.h
index ab0c5cbf85..dad5e1d931 100644
--- a/src/components/transport_manager/include/transport_manager/transport_adapter/threaded_socket_connection.h
+++ b/src/components/transport_manager/include/transport_manager/transport_adapter/threaded_socket_connection.h
@@ -35,13 +35,14 @@
#ifndef SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TRANSPORT_ADAPTER_THREADED_SOCKET_CONNECTION_H_
#define SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TRANSPORT_ADAPTER_THREADED_SOCKET_CONNECTION_H_
-#include <poll.h>
#include <queue>
#include "transport_manager/transport_adapter/connection.h"
#include "protocol/common.h"
#include "utils/threads/thread_delegate.h"
#include "utils/lock.h"
+#include "utils/socket.h"
+#include "utils/atomic_object.h"
using ::transport_manager::transport_adapter::Connection;
@@ -55,7 +56,8 @@ class TransportAdapterController;
/**
* @brief Class responsible for communication over sockets.
*/
-class ThreadedSocketConnection : public Connection {
+class ThreadedSocketConnection : public Connection,
+ public utils::TcpConnectionEventHandler {
public:
/**
* @brief Send data frame.
@@ -81,18 +83,21 @@ class ThreadedSocketConnection : public Connection {
TransportAdapter::Error Start();
/**
- * @brief Checks is queue with frames to send empty or not.
- *
- * @return Information about queue is empty or not.
+ * @brief Set variable that hold socket No. Takes the ownership.
*/
- bool IsFramesToSendQueueEmpty() const;
+ void SetSocket(utils::TcpSocketConnection& socket_connection);
- /**
- * @brief Set variable that hold socket No.
- */
- void set_socket(int socket) {
- socket_ = socket;
- }
+ // Implementation of the TcpConnectionEventHandler
+
+ void OnError(int error) OVERRIDE;
+
+ void OnData(const uint8_t* const buffer, std::size_t buffer_size) OVERRIDE;
+
+ void OnCanWrite() OVERRIDE;
+
+ void OnClose() OVERRIDE;
+
+ // End of implementation
protected:
/**
@@ -145,14 +150,12 @@ class ThreadedSocketConnection : public Connection {
ThreadedSocketConnection* connection_;
};
- int read_fd_;
- int write_fd_;
void threadMain();
void Transmit();
void Finalize();
- TransportAdapter::Error Notify() const;
+ TransportAdapter::Error Notify();
bool Receive();
- bool Send();
+ void Send();
void Abort();
TransportAdapterController* controller_;
@@ -163,9 +166,11 @@ class ThreadedSocketConnection : public Connection {
FrameQueue frames_to_send_;
mutable sync_primitives::Lock frames_to_send_mutex_;
- int socket_;
- bool terminate_flag_;
- bool unexpected_disconnect_;
+ utils::TcpSocketConnection socket_connection_;
+
+ sync_primitives::atomic_bool terminate_flag_;
+ sync_primitives::atomic_bool unexpected_disconnect_;
+
const DeviceUID device_uid_;
const ApplicationHandle app_handle_;
threads::Thread* thread_;