// 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 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 jobQueue; };