98 lines
4.8 KiB
C++
98 lines
4.8 KiB
C++
// Copyright 2017 David Romanski(Socke). All Rights Reserved.
|
|
|
|
#include "UAsyncNodeHttpRequest.h"
|
|
|
|
UAsyncNodeHttpRequest* UAsyncNodeHttpRequest::AsyncExecuteHTTP_GET_REQUEST(FString url, TMap<FString, FString> header, FString optionalRequestID, bool bindServerSendEvent){
|
|
|
|
//The node is only visible in Blueprints if the function is declared in a UBlueprintAsyncActionBase class.
|
|
//Therefore an instance of itself is created here.
|
|
UAsyncNodeHttpRequest* instance = NewObject<UAsyncNodeHttpRequest>();
|
|
instance->AddToRoot();
|
|
if (optionalRequestID.IsEmpty()) {
|
|
instance->requestID = FGuid::NewGuid().ToString();
|
|
}
|
|
else {
|
|
instance->requestID = optionalRequestID;
|
|
}
|
|
//save it in the main class to use it everywhere
|
|
UWebCommunicationBPLibrary::getWebCommunicationTarget()->registerUAsyncNodeHttpRequest(instance->requestID, instance);
|
|
int32 result = UWebCommunicationBPLibrary::getWebCommunicationTarget()->CreateHttpRequestGET(TArray<struct FhttpRequest>(), url, header, instance->requestID, bindServerSendEvent, instance->httpRequests, instance->requestID);
|
|
if (result == 400) {
|
|
instance->httpRequestComplete("", TArray<FString>(), TArray<FString>(), 400, TArray<uint8>(), instance->requestID);
|
|
}
|
|
return instance;
|
|
}
|
|
|
|
UAsyncNodeHttpRequest* UAsyncNodeHttpRequest::AsyncExecuteHTTP_GoogleDrive_REQUEST(FString downloadID, FString optionalRequestID, int64 optionalFileSizeInByte) {
|
|
|
|
UAsyncNodeHttpRequest* instance = NewObject<UAsyncNodeHttpRequest>();
|
|
instance->AddToRoot();
|
|
if (optionalRequestID.IsEmpty()) {
|
|
instance->requestID = FGuid::NewGuid().ToString();
|
|
}
|
|
else {
|
|
instance->requestID = optionalRequestID;
|
|
}
|
|
UWebCommunicationBPLibrary::getWebCommunicationTarget()->registerUAsyncNodeHttpRequest(instance->requestID, instance);
|
|
int32 result = UWebCommunicationBPLibrary::getWebCommunicationTarget()->CreateHttpRequestGoogleDrive(TArray<struct FhttpRequest>(), downloadID, instance->requestID, optionalFileSizeInByte, instance->httpRequests, instance->requestID);
|
|
if (result == 400) {
|
|
instance->httpRequestComplete("", TArray<FString>(), TArray<FString>(), 400, TArray<uint8>(), instance->requestID);
|
|
}
|
|
return instance;
|
|
}
|
|
|
|
UAsyncNodeHttpRequest* UAsyncNodeHttpRequest::AsyncExecuteHTTP_POST_REQUEST(FString url, TMap<FString, FString> header, TMap<FString, FString> POSTData, FString optionalRequestID, bool bindServerSendEvent) {
|
|
|
|
UAsyncNodeHttpRequest* instance = NewObject<UAsyncNodeHttpRequest>();
|
|
instance->AddToRoot();
|
|
if (optionalRequestID.IsEmpty()) {
|
|
instance->requestID = FGuid::NewGuid().ToString();
|
|
}
|
|
else {
|
|
instance->requestID = optionalRequestID;
|
|
}
|
|
UWebCommunicationBPLibrary::getWebCommunicationTarget()->registerUAsyncNodeHttpRequest(instance->requestID, instance);
|
|
int32 result = UWebCommunicationBPLibrary::getWebCommunicationTarget()->CreateHttpRequestPOST(TArray<struct FhttpRequest>(), url, header, POSTData, instance->requestID, bindServerSendEvent, instance->httpRequests, instance->requestID);
|
|
if (result == 400) {
|
|
instance->httpRequestComplete("", TArray<FString>(), TArray<FString>(), 400, TArray<uint8>(), instance->requestID);
|
|
}
|
|
return instance;
|
|
}
|
|
|
|
UAsyncNodeHttpRequest* UAsyncNodeHttpRequest::AsyncExecuteHTTP_Individual_REQUEST(FString url, TMap<FString, FString> header, FString verb,
|
|
EHTTPWebComIndividualType contentType, FString content,TArray<uint8> binaryContent, FString optionalRequestID, bool addContentLengthHeader) {
|
|
|
|
UAsyncNodeHttpRequest* instance = NewObject<UAsyncNodeHttpRequest>();
|
|
instance->AddToRoot();
|
|
if (optionalRequestID.IsEmpty()) {
|
|
instance->requestID = FGuid::NewGuid().ToString();
|
|
}
|
|
else {
|
|
instance->requestID = optionalRequestID;
|
|
}
|
|
UWebCommunicationBPLibrary::getWebCommunicationTarget()->registerUAsyncNodeHttpRequest(instance->requestID, instance);
|
|
UWebCommunicationBPLibrary::getWebCommunicationTarget()->CreateHttpRequestIndividual(TArray<struct FhttpRequest>(), url, header, verb, contentType,content,binaryContent, instance->requestID, instance->httpRequests, instance->requestID, addContentLengthHeader);
|
|
return instance;
|
|
}
|
|
|
|
void UAsyncNodeHttpRequest::Activate(){
|
|
UWebCommunicationBPLibrary::webcom->startRequests(httpRequests);
|
|
}
|
|
|
|
void UAsyncNodeHttpRequest::BeginDestroy(){
|
|
//UE_LOG(LogTemp, Error, TEXT("UAsyncNodeHttpRequest::BeginDestroy() %s"),*requestID);
|
|
UWebCommunicationBPLibrary::getWebCommunicationTarget()->unregisterUAsyncNodeHttpRequest(requestID);
|
|
RemoveFromRoot();
|
|
Super::BeginDestroy();
|
|
}
|
|
|
|
void UAsyncNodeHttpRequest::httpRequestComplete(const FString dataString, const TArray<FString>& data, const TArray<FString>& headerP, const int32 statusCode, const TArray<uint8>& byteData, const FString requestIDP){
|
|
|
|
if (statusCode >= 400 || statusCode == 0) {
|
|
OnFail.Broadcast(dataString, data, headerP, statusCode, byteData, requestIDP);
|
|
}
|
|
else {
|
|
OnSuccess.Broadcast(dataString, data, headerP, statusCode, byteData, requestIDP);
|
|
}
|
|
ConditionalBeginDestroy();
|
|
} |