UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
OnDemandHttpThread.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Async/Mutex.h"
7#include "CVarUtilities.h"
9#include "HAL/Event.h"
11#include "HAL/Runnable.h"
12#include "IO/IoAllocators.h"
13#include "IO/IoBuffer.h"
14#include "IO/IoOffsetLength.h"
16#include "Templates/UniquePtr.h"
18
19#define UE_ALLOW_HTTP_PAUSE (1 && !NO_CVARS && !UE_BUILD_SHIPPING)
20
21class FRunnableThread;
22
23namespace UE::IoStore
24{
25
26class FMultiEndpointHttpClient;
27struct FHttpRequest;
28struct FOnDemandChunkInfo;
29
40extern bool GIasHttpAllowChunkedXfer;
41
44{
45 Streaming = 0,
46 Installed,
49};
50
53{
54 None = 0,
55
56 Streaming = 1 << 0,
57 Installed = 1 << 1,
60};
61
63 : public FRunnable
65{
66public:
67 using FCompletionCallback = TUniqueFunction<void(uint32 /*StatusCode*/ , FStringView/*ErrorReason*/, FIoBuffer&& /*Data*/)>;
68 using FRequestHandle = void*;
70
72 virtual ~FOnDemandHttpThread();
73
75
89
103
105 void CancelRequest(FRequestHandle Request);
106
108 {
109 return OnTickIdleDelegate;
110 }
111
112 virtual class FSingleThreadRunnable* GetSingleThreadInterface() override { return this; }
113
114private:
115
116 virtual bool Init() override;
117 virtual uint32 Run() override;
118 virtual void Stop() override;
119 virtual void Exit() override;
120 virtual void Tick() override;
121
122 void TickRequests();
123 void DrainHttpRequests();
124
125 bool TryCreateHttpClient();
126 void UpdateThreadPriorityIfNeeded();
127
128 FHttpRequest* AllocateRequest(FOnDemandChunkInfo&& ChunkInfo);
129
130 void DestroyRequest(FHttpRequest* Request);
131
132#if UE_ALLOW_HTTP_PAUSE
134 bool PauseRequest(FHttpRequest* Request);
135 void OnPauseCommand(bool bPause, const TArray<FString>& Args, FOutputDevice& Ar);
136 void OnTogglePause(bool bPause, EHttpRequestTypeFilter Filter);
137
138 bool IsPaused(EHttpRequestType RequestType) const;
139#endif // UE_ALLOW_HTTP_PAUSE
140
141private:
143
144 FEventRef TickThreadEvent;
145
146 FOnTickIdle OnTickIdleDelegate;
148
149 FDelegateHandle OnRecreateHttpClientHandle;
150 FDelegateHandle OnHostGroupDisconnectedHandle;
151
152 UE::FMutex RecreateMutex;
153
155
156#if UE_ALLOW_HTTP_PAUSE
158 FConsoleCommandPtr PauseCommand;
159 FConsoleCommandPtr UnpauseCommand;
160
161 UE::FMutex PausedMutex;
163#endif // UE_ALLOW_HTTP_PAUSE
164
166
167 std::atomic_bool bStopRequested = false;
168 std::atomic_bool bRecreateHttpClient = false;
169 std::atomic_bool bHttpEnabled = true;
170
171 UE::FMutex AllocatorMutex;
173};
174
175} //namespace UE::IoStore
176
177//#undef UE_ALLOW_HTTP_PAUSE
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
EThreadPriority
Definition GenericPlatformAffinity.h:26
@ TPri_Normal
Definition GenericPlatformAffinity.h:27
void Init()
Definition LockFreeList.h:4
@ Stop
Definition PrecomputedVolumetricLightmapStreaming.cpp:26
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition IDelegateInstance.h:14
Definition Event.h:135
Definition IoBuffer.h:15
Definition OutputDevice.h:133
Definition RunnableThread.h:20
Definition Runnable.h:20
Definition SingleThreadRunnable.h:12
Definition Array.h:670
Definition IoAllocators.h:10
Definition UniquePtr.h:107
Definition Mutex.h:18
Definition OnDemandHttpThread.h:65
virtual ~FOnDemandHttpThread()
Definition OnDemandHttpThread.cpp:304
FOnDemandHttpThread()
Definition OnDemandHttpThread.cpp:251
virtual class FSingleThreadRunnable * GetSingleThreadInterface() override
Definition OnDemandHttpThread.h:112
FOnTickIdle & OnTickIdle()
Definition OnDemandHttpThread.h:107
static FOnDemandHttpThread & Get()
void CancelRequest(FRequestHandle Request)
Definition OnDemandHttpThread.cpp:369
void ReprioritizeRequest(FRequestHandle Request, int32 NewPriority)
Definition OnDemandHttpThread.cpp:360
DECLARE_TS_MULTICAST_DELEGATE(FOnTickIdle)
FRequestHandle IssueRequest(const FOnDemandChunkInfo &ChunkInfo, const FIoOffsetAndLength &ReadRange, int32 Priority, FCompletionCallback &&CompletionCallback, EHttpRequestType Type)
Definition OnDemandHttpThread.cpp:324
void * FRequestHandle
Definition OnDemandHttpThread.h:68
Definition ThreadSafeIntrusiveQueue.h:19
NO_LOGGING.
Definition Client.h:20
bool GIasHttpAllowChunkedXfer
Definition OnDemandHttpThread.cpp:151
EHttpRequestType
Definition OnDemandHttpThread.h:44
int32 GIasHttpPollTimeoutMs
Definition OnDemandHttpThread.cpp:173
int32 GOnDemandBackendThreadPriorityIndex
Definition OnDemandHttpThread.cpp:89
EHttpRequestTypeFilter
Definition OnDemandHttpThread.h:53
int32 GIasHttpConcurrentRequests
Definition OnDemandHttpThread.cpp:159
int32 GIasHttpRecvBufKiB
Definition OnDemandHttpThread.cpp:119
int32 GIasHttpRetryCount
Definition OnDemandHttpThread.cpp:135
int32 GIasHttpFailTimeOutMs
Definition OnDemandHttpThread.cpp:143
int32 GIasHttpSendBufKiB
Definition OnDemandHttpThread.cpp:127
int32 GIasHttpConnectionCount
Definition OnDemandHttpThread.cpp:104
int32 GIasHttpRateLimitKiBPerSecond
Definition OnDemandHttpThread.cpp:166
int32 GIasHttpHealthCheckWaitTime
Definition OnDemandHttpThread.cpp:82
Definition IoOffsetLength.h:12
Definition OnDemandHttpThread.cpp:216
Definition OnDemandIoStore.h:220