|
|
|
|
@ -36,19 +36,24 @@ namespace HttpRequestor
|
|
|
|
|
desc.m_cpuId = AFFINITY_MASK_USERTHREADS;
|
|
|
|
|
m_runThread = true;
|
|
|
|
|
AWSNativeSDKInit::InitializationManager::InitAwsApi();
|
|
|
|
|
auto function = AZStd::bind(&Manager::ThreadFunction, this);
|
|
|
|
|
auto function = [this]
|
|
|
|
|
{
|
|
|
|
|
ThreadFunction();
|
|
|
|
|
};
|
|
|
|
|
m_thread = AZStd::thread(desc, function);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Manager::~Manager()
|
|
|
|
|
{
|
|
|
|
|
AWSNativeSDKInit::InitializationManager::Shutdown();
|
|
|
|
|
m_runThread = false;
|
|
|
|
|
m_requestConditionVar.notify_all();
|
|
|
|
|
if (m_thread.joinable())
|
|
|
|
|
{
|
|
|
|
|
m_thread.join();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Shutdown after background thread has closed.
|
|
|
|
|
AWSNativeSDKInit::InitializationManager::Shutdown();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Manager::AddRequest(Parameters&& httpRequestParameters)
|
|
|
|
|
@ -80,9 +85,14 @@ namespace HttpRequestor
|
|
|
|
|
|
|
|
|
|
void Manager::HandleRequestBatch()
|
|
|
|
|
{
|
|
|
|
|
// Lock mutex and wait for work to be signalled via the condition variable
|
|
|
|
|
// Lock mutex and wait for work to be signaled via the condition variable
|
|
|
|
|
AZStd::unique_lock<AZStd::mutex> lock(m_requestMutex);
|
|
|
|
|
m_requestConditionVar.wait(lock, [&] { return !m_runThread || !m_requestsToHandle.empty() || !m_textRequestsToHandle.empty(); });
|
|
|
|
|
m_requestConditionVar.wait(
|
|
|
|
|
lock,
|
|
|
|
|
[&]
|
|
|
|
|
{
|
|
|
|
|
return !m_runThread || !m_requestsToHandle.empty() || !m_textRequestsToHandle.empty();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// Swap queues
|
|
|
|
|
AZStd::queue<Parameters> requestsToHandle;
|
|
|
|
|
@ -114,7 +124,8 @@ namespace HttpRequestor
|
|
|
|
|
config.enableTcpKeepAlive = AZ_TRAIT_AZFRAMEWORK_AWS_ENABLE_TCP_KEEP_ALIVE_SUPPORTED;
|
|
|
|
|
std::shared_ptr<Aws::Http::HttpClient> httpClient = Aws::Http::CreateHttpClient(config);
|
|
|
|
|
|
|
|
|
|
auto httpRequest = Aws::Http::CreateHttpRequest(httpRequestParameters.GetURI(), httpRequestParameters.GetMethod(), Aws::Utils::Stream::DefaultResponseStreamFactoryMethod);
|
|
|
|
|
auto httpRequest = Aws::Http::CreateHttpRequest(
|
|
|
|
|
httpRequestParameters.GetURI(), httpRequestParameters.GetMethod(), Aws::Utils::Stream::DefaultResponseStreamFactoryMethod);
|
|
|
|
|
|
|
|
|
|
AZ_Assert(httpRequest, "HttpRequest not created!");
|
|
|
|
|
|
|
|
|
|
@ -160,7 +171,8 @@ namespace HttpRequestor
|
|
|
|
|
config.enableTcpKeepAlive = AZ_TRAIT_AZFRAMEWORK_AWS_ENABLE_TCP_KEEP_ALIVE_SUPPORTED;
|
|
|
|
|
std::shared_ptr<Aws::Http::HttpClient> httpClient = Aws::Http::CreateHttpClient(config);
|
|
|
|
|
|
|
|
|
|
auto httpRequest = Aws::Http::CreateHttpRequest(httpRequestParameters.GetURI(), httpRequestParameters.GetMethod(), Aws::Utils::Stream::DefaultResponseStreamFactoryMethod);
|
|
|
|
|
auto httpRequest = Aws::Http::CreateHttpRequest(
|
|
|
|
|
httpRequestParameters.GetURI(), httpRequestParameters.GetMethod(), Aws::Utils::Stream::DefaultResponseStreamFactoryMethod);
|
|
|
|
|
|
|
|
|
|
for (const auto& it : httpRequestParameters.GetHeaders())
|
|
|
|
|
{
|
|
|
|
|
@ -172,7 +184,7 @@ namespace HttpRequestor
|
|
|
|
|
httpRequest->AddContentBody(httpRequestParameters.GetBodyStream());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
auto httpResponse = httpClient->MakeRequest(httpRequest);
|
|
|
|
|
const auto httpResponse = httpClient->MakeRequest(httpRequest);
|
|
|
|
|
|
|
|
|
|
if (!httpResponse)
|
|
|
|
|
{
|
|
|
|
|
@ -192,4 +204,4 @@ namespace HttpRequestor
|
|
|
|
|
AZStd::string data(std::istreambuf_iterator<char>(httpResponse->GetResponseBody()), eos);
|
|
|
|
|
httpRequestParameters.GetCallback()(AZStd::move(data), httpResponse->GetResponseCode());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} // namespace HttpRequestor
|
|
|
|
|
|