Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Yershov <yershov@corp.mail.ru>2016-10-21 19:54:02 +0300
committerSergey Yershov <yershov@corp.mail.ru>2016-10-25 17:33:35 +0300
commit1f1d0a58713f4f4817827aa108f75e0657014813 (patch)
treeeff7e58b59addf80982788177617215f4f840622 /platform
parent8314310c0e8a63bed40abf95b7741b10c24521eb (diff)
[tracking] Made tracking work
Diffstat (limited to 'platform')
-rw-r--r--platform/platform_tests_support/test_socket.cpp4
-rw-r--r--platform/platform_tests_support/test_socket.hpp8
-rw-r--r--platform/socket.hpp12
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