// Copyright 2017 David Romanski(Socke). All Rights Reserved. #include "UAsyncNodeHttpRequest.h" UAsyncNodeHttpRequest* UAsyncNodeHttpRequest::AsyncExecuteHTTP_GET_REQUEST(FString url, TMap 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(); 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(), url, header, instance->requestID, bindServerSendEvent, instance->httpRequests, instance->requestID); if (result == 400) { instance->httpRequestComplete("", TArray(), TArray(), 400, TArray(), instance->requestID); } return instance; } UAsyncNodeHttpRequest* UAsyncNodeHttpRequest::AsyncExecuteHTTP_GoogleDrive_REQUEST(FString downloadID, FString optionalRequestID, int64 optionalFileSizeInByte) { UAsyncNodeHttpRequest* instance = NewObject(); 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(), downloadID, instance->requestID, optionalFileSizeInByte, instance->httpRequests, instance->requestID); if (result == 400) { instance->httpRequestComplete("", TArray(), TArray(), 400, TArray(), instance->requestID); } return instance; } UAsyncNodeHttpRequest* UAsyncNodeHttpRequest::AsyncExecuteHTTP_POST_REQUEST(FString url, TMap header, TMap POSTData, FString optionalRequestID, bool bindServerSendEvent) { UAsyncNodeHttpRequest* instance = NewObject(); 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(), url, header, POSTData, instance->requestID, bindServerSendEvent, instance->httpRequests, instance->requestID); if (result == 400) { instance->httpRequestComplete("", TArray(), TArray(), 400, TArray(), instance->requestID); } return instance; } UAsyncNodeHttpRequest* UAsyncNodeHttpRequest::AsyncExecuteHTTP_Individual_REQUEST(FString url, TMap header, FString verb, EHTTPWebComIndividualType contentType, FString content,TArray binaryContent, FString optionalRequestID, bool addContentLengthHeader) { UAsyncNodeHttpRequest* instance = NewObject(); instance->AddToRoot(); if (optionalRequestID.IsEmpty()) { instance->requestID = FGuid::NewGuid().ToString(); } else { instance->requestID = optionalRequestID; } UWebCommunicationBPLibrary::getWebCommunicationTarget()->registerUAsyncNodeHttpRequest(instance->requestID, instance); UWebCommunicationBPLibrary::getWebCommunicationTarget()->CreateHttpRequestIndividual(TArray(), 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& data, const TArray& headerP, const int32 statusCode, const TArray& 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(); }