diff options
author | Sergey Yershov <yershov@corp.mail.ru> | 2016-10-21 19:54:02 +0300 |
---|---|---|
committer | Sergey Yershov <yershov@corp.mail.ru> | 2016-10-25 17:33:35 +0300 |
commit | 1f1d0a58713f4f4817827aa108f75e0657014813 (patch) | |
tree | eff7e58b59addf80982788177617215f4f840622 /platform | |
parent | 8314310c0e8a63bed40abf95b7741b10c24521eb (diff) |
[tracking] Made tracking work
Diffstat (limited to 'platform')
-rw-r--r-- | platform/platform_tests_support/test_socket.cpp | 4 | ||||
-rw-r--r-- | platform/platform_tests_support/test_socket.hpp | 8 | ||||
-rw-r--r-- | platform/socket.hpp | 12 |
3 files changed, 22 insertions, 2 deletions
diff --git a/platform/platform_tests_support/test_socket.cpp b/platform/platform_tests_support/test_socket.cpp index 3924da379c..df36d2a1e0 100644 --- a/platform/platform_tests_support/test_socket.cpp +++ b/platform/platform_tests_support/test_socket.cpp @@ -27,8 +27,9 @@ bool TestSocket::Read(uint8_t * data, uint32_t count) if (!m_isConnected) return false; - lock_guard<mutex> lg(m_inputMutex); + unique_lock<mutex> lock(m_inputMutex); + m_inputCondition.wait_for(lock, milliseconds(m_timeoutMs), [this]() { return !m_input.empty(); }); if (m_input.size() < count) return false; @@ -51,7 +52,6 @@ bool TestSocket::Write(uint8_t const * data, uint32_t count) } void TestSocket::SetTimeout(uint32_t milliseconds) { m_timeoutMs = milliseconds; } - size_t TestSocket::ReadServer(vector<uint8_t> & destination) { unique_lock<mutex> lock(m_outputMutex); diff --git a/platform/platform_tests_support/test_socket.hpp b/platform/platform_tests_support/test_socket.hpp index 8d19071121..66613791dd 100644 --- a/platform/platform_tests_support/test_socket.hpp +++ b/platform/platform_tests_support/test_socket.hpp @@ -28,6 +28,13 @@ public: // Waits for some data or timeout. // Returns size of read data. size_t ReadServer(vector<uint8_t> & destination); + template <typename Container> + void WriteServer(Container const & answer) + { + lock_guard<mutex> lg(m_inputMutex); + m_input.insert(m_input.begin(), begin(answer), end(answer)); + m_inputCondition.notify_one(); + } private: atomic<bool> m_isConnected = {false}; @@ -35,6 +42,7 @@ private: deque<uint8_t> m_input; mutex m_inputMutex; + condition_variable m_inputCondition; vector<uint8_t> m_output; mutex m_outputMutex; diff --git a/platform/socket.hpp b/platform/socket.hpp index 9e0c2f75d3..ab955523d2 100644 --- a/platform/socket.hpp +++ b/platform/socket.hpp @@ -1,5 +1,6 @@ #pragma once +#include "std/cstdint.hpp" #include "std/string.hpp" #include "std/unique_ptr.hpp" @@ -25,5 +26,16 @@ public: virtual void SetTimeout(uint32_t milliseconds) = 0; }; +class StubSocket final : public Socket +{ +public: + // Socket overrides: + bool Open(string const & host, uint16_t port) override { return false; } + void Close() override {} + bool Read(uint8_t * data, uint32_t count) override { return false; } + bool Write(uint8_t const * data, uint32_t count) override { return false; } + void SetTimeout(uint32_t milliseconds) override {} +}; + unique_ptr<Socket> CreateSocket(); } // namespace platform |