Network/WebService: Make Pool return a boolean indicating if a request finished

This commit is contained in:
SirLynix 2023-08-17 18:04:12 +02:00
parent 0989a25a99
commit ae62e1f6c9
2 changed files with 21 additions and 14 deletions

View File

@ -44,7 +44,7 @@ namespace Nz
inline const std::string& GetUserAgent() const;
void Poll();
bool Poll();
void QueueRequest(std::unique_ptr<WebRequest>&& request);

View File

@ -45,7 +45,7 @@ namespace Nz
#endif
}
void WebService::Poll()
bool WebService::Poll()
{
#ifndef NAZARA_PLATFORM_WEB
assert(m_curlMulti);
@ -55,9 +55,11 @@ namespace Nz
if (err != CURLM_OK)
{
NazaraError(fmt::format("[WebService] curl_multi_perform failed with {0}: {1}", UnderlyingCast(err), m_curl.multi_strerror(err)));
return;
return false;
}
bool finishedRequest = false;
CURLMsg* m;
do
{
@ -80,22 +82,27 @@ namespace Nz
m_curl.multi_remove_handle(m_curlMulti, handle);
m_activeRequests.erase(handle);
finishedRequest = true;
}
}
while (m);
#else
if (!m_finishedRequests.empty())
{
for (auto&& [request, succeeded] : m_finishedRequests)
{
if (succeeded)
request->TriggerSuccessCallback();
else
request->TriggerErrorCallback(request->GetFetchHandle()->statusText);
}
m_finishedRequests.clear();
return finishedRequest; //< returns true if at least one request finished
#else
if (m_finishedRequests.empty())
return false;
for (auto&& [request, succeeded] : m_finishedRequests)
{
if (succeeded)
request->TriggerSuccessCallback();
else
request->TriggerErrorCallback(request->GetFetchHandle()->statusText);
}
m_finishedRequests.clear();
return true;
#endif
}