Files
UnrealEngine/Engine/Source/Runtime/StorageServerClient/Private/BuiltInHttpClient/BuiltInHttpClient.h
2025-05-18 13:04:45 +08:00

68 lines
2.1 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "StorageServerHttpClient.h"
#include "SocketTypes.h"
#if !UE_BUILD_SHIPPING
class IBuiltInHttpClientSocket
{
public:
virtual ~IBuiltInHttpClientSocket() = default;
virtual bool Send(const uint8* Data, const uint64 DataSize) = 0;
virtual bool Recv(uint8* Data, const uint64 DataSize, uint64& BytesRead, ESocketReceiveFlags::Type ReceiveFlags) = 0;
virtual bool HasPendingData(uint64& PendingDataSize) const = 0;
virtual void Close() = 0;
};
class IBuiltInHttpClientSocketPool
{
public:
virtual ~IBuiltInHttpClientSocketPool() = default;
virtual IBuiltInHttpClientSocket* AcquireSocket(float TimeoutSeconds = -1.f) = 0;
virtual void ReleaseSocket(IBuiltInHttpClientSocket* Socket, bool bKeepAlive) = 0;
};
class FBuiltInHttpClient : public IStorageServerHttpClient
{
public:
FBuiltInHttpClient(TUniquePtr<IBuiltInHttpClientSocketPool> InSocketPool, FString InHostname);
virtual ~FBuiltInHttpClient() override = default;
virtual FResult RequestSync(
FAnsiStringView Url,
EStorageServerContentType Accept,
FAnsiStringView Verb,
TOptional<FIoBuffer> OptPayload,
EStorageServerContentType PayloadContentType,
TOptional<FIoBuffer> OptDestination,
float TimeoutSeconds,
const bool bReportErrors
) override;
virtual void RequestAsync(
FResultCallback&& Callback,
FAnsiStringView Url,
EStorageServerContentType Accept,
FAnsiStringView Verb,
TOptional<FIoBuffer> OptPayload,
EStorageServerContentType PayloadContentType,
TOptional<FIoBuffer> OptDestination,
float TimeoutSeconds,
const bool bReportErrors
) override
{
// This HTTP client doesn't support async requests
Callback(RequestSync(Url, Accept, Verb, OptPayload, PayloadContentType, OptDestination, TimeoutSeconds, bReportErrors));
}
private:
TUniquePtr<IBuiltInHttpClientSocketPool> SocketPool;
FString Hostname;
};
#endif