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;
39 std::atomic<bool> m_Initialized =
false;
41 std::vector<std::pair<std::string, std::string>> m_vRequestHeaders;
44 emscripten_fetch_t *m_pFetch =
nullptr;
45 uint64_t m_LowSpeedOffset;
46 std::chrono::nanoseconds m_LowSpeedCheckTime;
47 bool m_CallbackFinished =
false;
49 bool ConfigureAndRun();
53 void OnHeader(
const char *pName,
const char *pValue);
54 void OnCompletionInternal(
EHttpState State,
const char *pErrorDetail);
56 static void FetchCallbackSuccess(emscripten_fetch_t *pFetch);
57 static void FetchCallbackFailure(emscripten_fetch_t *pFetch);
58 static void FetchCallbackProgress(emscripten_fetch_t *pFetch);
63 friend CHttpRequestEmscripten;
67 bool Init(std::chrono::milliseconds ShutdownDelay)
override;
68 void Shutdown()
override;
72 void Run(std::shared_ptr<IHttpRequest> pRequest)
override;
73 bool HasIpresolveBug()
const override;
76 void *m_pThread =
nullptr;
79 std::condition_variable m_ConditionVariableInit;
80 std::condition_variable m_ConditionVariableLoop;
81 std::atomic<bool> m_Initialized =
false;
82 uint64_t m_NextRequestId = 0;
83 std::deque<std::shared_ptr<CHttpRequestEmscripten>> m_PendingRequests;
84 std::unordered_map<uint64_t, EHttpState> m_PendingFetchChanges;
85 std::unordered_map<uint64_t, std::shared_ptr<CHttpRequestEmscripten>> m_RunningRequests;
86 std::chrono::milliseconds m_ShutdownDelay{};
87 std::optional<std::chrono::time_point<std::chrono::steady_clock>> m_ShutdownTime;
88 std::atomic<bool> m_Shutdown =
false;
89 std::atomic<bool> m_StartedShutdown =
false;
91 static void ThreadMain(
void *pUser);
93 void AddPendingStateChange(uint64_t RequestId,
EHttpState State);
EHttpState
Definition http.h:21