October3d55/M/HTTPWebCommunication/Source/WebCommunication/Public/WebCommunicationRequestComp...

151 lines
5.1 KiB
C++

// Copyright 2017-2020 David Romanski(Socke). All Rights Reserved.
#pragma once
#include "WebCommunication.h"
#include "WebCommunicationRequestCompleteObject.generated.h"
class UWebCommunicationBPLibrary;
class FWebcomThread;
enum class EMultiStepType : uint8
{
GOOGLE UMETA(DisplayName = "GoogleDrive"),
GOOGLE_INFO UMETA(DisplayName = "GoogleDriveInfo"),
ANONFILE UMETA(DisplayName = "Anonfiles")
};
UCLASS(Blueprintable, BlueprintType)
class WEBCOMMUNICATION_API UWebCommunicationRequestCompleteObject : public UObject
{
GENERATED_UCLASS_BODY()
~UWebCommunicationRequestCompleteObject();
virtual void BeginDestroy() override;
public:
void requestComplete(FHttpRequestPtr Request, FHttpResponsePtr response, bool bWasSuccessful);
void requestCompleteInternal(FHttpRequestPtr Request, FHttpResponsePtr response, bool bWasSuccessful);
void requestCompleteLowRam(FHttpRequestPtr Request, FHttpResponsePtr response, bool bWasSuccessful);
void requestCompleteLowRamInternal(FHttpRequestPtr Request, FHttpResponsePtr response, bool bWasSuccessful);
#if ENGINE_MAJOR_VERSION >= 5 & ENGINE_MINOR_VERSION >= 4
void requestMultiStepDownload(FHttpRequestPtr request, uint64 bytesSent, uint64 bytesReceived);
void requestProgressUpload(FHttpRequestPtr request, uint64 bytesSent, uint64 bytesReceived);
void requestProgressDownload(FHttpRequestPtr request, uint64 bytesSent, uint64 bytesReceived);
void requestProgressServerSendEvent(FHttpRequestPtr request, uint64 bytesSent, uint64 bytesReceived);
void requestProgressDownloadLowRam(FHttpRequestPtr request, uint64 bytesSent, uint64 bytesReceived);
#else
void requestMultiStepDownload(FHttpRequestPtr request, int32 bytesSent, int32 bytesReceived);
void requestProgressUpload(FHttpRequestPtr request, int32 bytesSent, int32 bytesReceived);
void requestProgressDownload(FHttpRequestPtr request, int32 bytesSent, int32 bytesReceived);
void requestProgressServerSendEvent(FHttpRequestPtr request, int32 bytesSent, int32 bytesReceived);
void requestProgressDownloadLowRam(FHttpRequestPtr request, int32 bytesSent, int32 bytesReceived);
#endif
void requestMultiStepDownloadInternal(FHttpRequestPtr request, uint64 bytesSent, uint64 bytesReceived);
void requestProgressUploadInternal(FHttpRequestPtr request, uint64 bytesSent, uint64 bytesReceived);
void requestProgressDownloadInternal(FHttpRequestPtr request, uint64 bytesSent, uint64 bytesReceived);
void requestProgressServerSendEventInternal(FHttpRequestPtr request, uint64 bytesSent, uint64 bytesReceived);
void requestProgressDownloadLowRamInternal(FHttpRequestPtr request, uint64 bytesSent, uint64 bytesReceived);
void setRequestID(FString requestID, struct FhttpRequest& httpRequest, UWebCommunicationBPLibrary* webCommunicationBPLibrary);
FString getRequestID();
void setRequestStruct(struct FhttpRequest& httpRequest);
void setDownloadID(FString downloadID);
FString getDownloadID();
void setMultiStepDownload(int32 step);
int32 getMultiStepDownload();
void setMultiStepDownloadType(EMultiStepType multiStepDownloadType);
EMultiStepType getMultiStepDownloadType();
int64 getHTMLFileSize();
void setHTMLFileSize(int64 htmlfilesize);
void requestMultiStepComplete(FHttpRequestPtr Request, FHttpResponsePtr response, bool bWasSuccessful);
//EHTTPWebComFileDownloadResumeType actionIfFileExists;
//void setActionIfFileExists(EHTTPWebComFileDownloadResumeType actionIfFileExists);
//EHTTPWebComFileDownloadResumeType getActionIfFileExists();
int64 fileCancelResumeDownloadByteFullSize = 0;
void setFileCancelResumeDownloadByteFullSize(int64 size);
int64 getFileCancelResumeDownloadByteFullSize();
int64 fileCancelResumeDownloadBytePartSize = 0;
void setFileCancelResumeDownloadBytePartSize(int64 size);
int64 getFileCancelResumeDownloadBytePartSize();
int64 fileCancelResumeDownloadByteStart = 0;
void setFileCancelResumeDownloadByteStart(int64 size);
int64 getFileCancelResumeDownloadByteStart();
FString fileCancelResumeDownloadDir;
void setFileCancelResumeDownloadDir(FString dir);
FString getFileCancelResumeDownloadDir();
void initWebCom();
//void setWebComHttpRequest(struct FhttpRequest httpRequest);
FWebcomThread* thread = nullptr;
private:
struct FhttpRequest httpRequest;
FString requestID;
FString downloadID;
UWebCommunicationBPLibrary* webCommunicationBPLibrary = nullptr;
int32 multiStepDownload;
EMultiStepType multiStepDownloadType;
int64 HTMLFileSize;
FString generateURLFromHTML(FString html,FString oldURL);
int64 bytesCurrent = 0;
int32 bytesReceivedLastTime = 0;
float mbit = 0;
int64 lastTimeTicks = 0;
TArray<uint8> downloadDataCopy;
};
class WEBCOMMUNICATION_API FWebcomThread : public FRunnable {
public:
//FWebcomThread(int32 controllerIndexP, USimpleControllerBPLibrary* mainP);
FWebcomThread(UWebCommunicationRequestCompleteObject* parentObjectP);
~FWebcomThread();
virtual uint32 Run() override;
void stopThread();
void pauseThread(bool pause);
void addJob(FWebcomTheadJob* job);
private:
UWebCommunicationRequestCompleteObject* parentObject = nullptr;
FRunnableThread* thread = nullptr;
bool run = true;
bool paused = false;
TQueue<FWebcomTheadJob*> jobQueue;
};