1#ifndef ENGINE_SHARED_HTTP_EMSCRIPTEN_H
2#define ENGINE_SHARED_HTTP_EMSCRIPTEN_H
5#if defined(CONF_PLATFORM_EMSCRIPTEN)
11#include <condition_variable>
16#include <unordered_map>
20typedef struct emscripten_fetch_t emscripten_fetch_t;
26 friend CHttpEmscripten;
29 CHttpRequestEmscripten(
const char *pUrl);
30 ~CHttpRequestEmscripten()
override;
32 void Header(
const char *pNameColonValue)
override;
34 void Abort()
override;
37 CHttpEmscripten *m_pHttp;
39 std::vector<std::pair<std::string, std::string>> m_vRequestHeaders;
41 emscripten_fetch_t *m_pFetch =
nullptr;
42 bool m_CallbackFinished =
false;
44 bool ConfigureAndRun();
48 void OnHeader(
const char *pName,
const char *pValue);
51 static void FetchCallbackSuccess(emscripten_fetch_t *pFetch);
52 static void FetchCallbackFailure(emscripten_fetch_t *pFetch);
53 static void FetchCallbackProgress(emscripten_fetch_t *pFetch);
58 friend CHttpRequestEmscripten;
62 bool Init(std::chrono::milliseconds ShutdownDelay)
override;
67 void Run(std::shared_ptr<IHttpRequest> pRequest)
override;
71 void *m_pThread =
nullptr;
74 std::condition_variable m_ConditionVariableInit;
75 std::condition_variable m_ConditionVariableLoop;
76 std::atomic<bool> m_Initialized =
false;
77 std::deque<std::shared_ptr<CHttpRequestEmscripten>> m_PendingRequests;
78 std::unordered_map<emscripten_fetch_t *, EHttpState> m_PendingFetchChanges;
79 std::unordered_map<emscripten_fetch_t *, std::shared_ptr<CHttpRequestEmscripten>> m_RunningRequests;
80 std::chrono::milliseconds m_ShutdownDelay{};
81 std::optional<std::chrono::time_point<std::chrono::steady_clock>> m_ShutdownTime;
82 std::atomic<bool> m_Shutdown =
false;
83 std::atomic<bool> m_StartedShutdown =
false;
85 static void ThreadMain(
void *pUser);
87 void AddPendingStateChange(emscripten_fetch_t *pFetch,
EHttpState State);
virtual bool Init(std::chrono::milliseconds ShutdownDelay)=0
void Shutdown() override=0
virtual void Header(const char *pNameColonValue)=0
virtual void Abort()
Definition http.h:96
void OnCompletionInternal(EHttpState State)
Definition http.cpp:313
virtual bool HasIpresolveBug() const =0
virtual void Run(std::shared_ptr< IHttpRequest > pRequest)=0
EHttpState
Definition http.h:21