1#ifndef ENGINE_SHARED_HTTP_EMSCRIPTEN_H
2#define ENGINE_SHARED_HTTP_EMSCRIPTEN_H
5#if defined(CONF_PLATFORM_EMSCRIPTEN)
11#include <condition_variable>
17#include <unordered_map>
21typedef struct emscripten_fetch_t emscripten_fetch_t;
27 friend CHttpEmscripten;
30 CHttpRequestEmscripten(
const char *pUrl);
31 ~CHttpRequestEmscripten()
override;
33 void Header(
const char *pNameColonValue)
override;
35 void Abort()
override;
38 CHttpEmscripten *m_pHttp;
40 std::vector<std::pair<std::string, std::string>> m_vRequestHeaders;
43 emscripten_fetch_t *m_pFetch =
nullptr;
44 bool m_CallbackFinished =
false;
46 bool ConfigureAndRun();
50 void OnHeader(
const char *pName,
const char *pValue);
51 void OnCompletionInternal(
EHttpState State,
const char *pErrorDetail);
53 static void FetchCallbackSuccess(emscripten_fetch_t *pFetch);
54 static void FetchCallbackFailure(emscripten_fetch_t *pFetch);
55 static void FetchCallbackProgress(emscripten_fetch_t *pFetch);
60 friend CHttpRequestEmscripten;
64 bool Init(std::chrono::milliseconds ShutdownDelay)
override;
65 void Shutdown()
override;
69 void Run(std::shared_ptr<IHttpRequest> pRequest)
override;
70 bool HasIpresolveBug()
const override;
73 void *m_pThread =
nullptr;
76 std::condition_variable m_ConditionVariableInit;
77 std::condition_variable m_ConditionVariableLoop;
78 std::atomic<bool> m_Initialized =
false;
79 uint64_t m_NextRequestId = 0;
80 std::deque<std::shared_ptr<CHttpRequestEmscripten>> m_PendingRequests;
81 std::unordered_map<uint64_t, EHttpState> m_PendingFetchChanges;
82 std::unordered_map<uint64_t, std::shared_ptr<CHttpRequestEmscripten>> m_RunningRequests;
83 std::chrono::milliseconds m_ShutdownDelay{};
84 std::optional<std::chrono::time_point<std::chrono::steady_clock>> m_ShutdownTime;
85 std::atomic<bool> m_Shutdown =
false;
86 std::atomic<bool> m_StartedShutdown =
false;
88 static void ThreadMain(
void *pUser);
90 void AddPendingStateChange(uint64_t RequestId,
EHttpState State);
EHttpState
Definition http.h:21