Created
April 21, 2020 16:26
-
-
Save Bioblaze/81c3b983b0475a8113c19b20ad7df113 to your computer and use it in GitHub Desktop.
Example of a Async Blueprint HTTP Call.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Fill out your copyright notice in the Description page of Project Settings. | |
#include "loginUserClient.h" | |
#include "ClientSDK.h" | |
#include "ClientSDKStructs.h" | |
#include "ConfigCacheIni.h" | |
#include "Misc/MessageDialog.h" | |
#include "Interfaces/IHttpResponse.h" | |
#include "HttpModule.h" | |
#include "Dom/JsonObject.h" | |
#include "Modules/ModuleManager.h" | |
#include "Serialization/JsonWriter.h" | |
#include "Serialization/JsonReader.h" | |
#include "Serialization/JsonSerializer.h" | |
#include "Policies/CondensedJsonPrintPolicy.h" | |
#include "Runtime/Core/Public/Containers/Array.h" | |
#include "Runtime/Core/Public/Internationalization/Text.h" | |
#include "Runtime/JsonUtilities/Public/JsonObjectConverter.h" | |
UloginUserClient* UloginUserClient::loginUserClient(FString user_email, FString user_password) | |
{ | |
UloginUserClient* HTTPQueryTask = NewObject<UloginUserClient>(); | |
HTTPQueryTask->Start(user_email, user_password); | |
return HTTPQueryTask; | |
} | |
void UloginUserClient::Start(FString user_email, FString user_password) | |
{ | |
TSharedRef<IHttpRequest> HttpRequest = FHttpModule::Get().CreateRequest(); | |
HttpRequest->OnProcessRequestComplete().BindUObject(this, &UloginUserClient::HandleQuery); | |
HttpRequest->SetURL(TEXT("https://localhost/")); //CHANGE THIS | |
HttpRequest->SetVerb(TEXT("POST")); | |
HttpRequest->SetHeader(TEXT("Content-Type"), TEXT("application/json; charset=utf-8")); | |
TArray<FStringFormatArg> Args; | |
Args.Add(FStringFormatArg(TEXT("Bearer"))); | |
FString UserSession; | |
if (FParse::Value(FCommandLine::Get(), TEXT("-cslogin="), UserSession)) { | |
Args.Add(FStringFormatArg(UserSession)); | |
} else { | |
FMessageDialog::Open(EAppMsgType::Ok,TEXT("No Contact Systems User Session Found in Commandline Arguments."), TEXT("Contact Systems Error")); | |
} | |
FString Header = FString::Format(TEXT("{0} {1}"), Args); | |
HttpRequest->SetHeader(TEXT("Authorization"), Header); | |
TSharedPtr<FJsonObject> queryObject = MakeShareable(new FJsonObject); | |
TSharedPtr<FJsonObject> inputObject = MakeShareable(new FJsonObject); | |
TSharedPtr<FJsonObject> JsonObject = MakeShareable(new FJsonObject); | |
JsonObject->SetStringField("email", user_email); | |
JsonObject->SetStringField("password", user_password); | |
inputObject->SetObjectField("input", JsonObject); | |
queryObject->SetStringField("operationName", TEXT("loginUser")); | |
queryObject->SetStringField("query", TEXT("mutation loginUser($input: LoginInput!) { loginUser(input: $input) { accessToken, expires, refreshToken } }")); | |
queryObject->SetObjectField("variables", inputObject); | |
FString OutputString; | |
TSharedRef< TJsonWriter<> > Writer = TJsonWriterFactory<>::Create(&OutputString); | |
FJsonSerializer::Serialize(queryObject.ToSharedRef(), Writer); | |
HttpRequest->SetContentAsString(OutputString); | |
HttpRequest->ProcessRequest(); | |
} | |
void UloginUserClient::HandleQuery(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded) | |
{ | |
FLoginDataServer Data; | |
if (bSucceeded) { | |
TSharedPtr<FJsonObject> JsonParsed; | |
TSharedRef<TJsonReader<TCHAR>> JsonReader = TJsonReaderFactory<TCHAR>::Create(HttpResponse->GetContentAsString()); | |
if (FJsonSerializer::Deserialize(JsonReader, JsonParsed)) { | |
if (!JsonParsed->HasField(TEXT("errors"))) { | |
TSharedPtr<FJsonObject> DataParsed; | |
if (JsonParsed->TryGetObjectField(TEXT("data"), DataParsed)) { | |
TSharedPtr<FJsonObject> ObjParsed; | |
if (DataParsed->TryGetObjectField("loginUser")) { | |
if(FJsonObjectConverter::JsonObjectToUStruct(DataParsed, &Data, 0, 0)) { | |
OnSuccess.Broadcast(Data); | |
} else { | |
OnFail.Broadcast(Data); | |
} | |
} else { | |
OnFail.Broadcast(Data); | |
} | |
} else { | |
OnFail.Broadcast(Data); | |
} | |
} else { | |
OnFail.Broadcast(Data); | |
} | |
} else { | |
OnFail.Broadcast(Data); | |
} | |
} else { | |
OnFail.Broadcast(Data); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#pragma once | |
#include "CoreMinimal.h" | |
#include "UObject/Object.h" | |
#include "UObject/WeakObjectPtr.h" | |
#include "Interfaces/IHttpRequest.h" | |
#include "Kismet/BlueprintAsyncActionBase.h" | |
#include "ClientSDKStructs.h" | |
#include "loginUserClient.generated.h" | |
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FloginUserClientDelegate, FLoginDataClient&, Response); | |
/** | |
* | |
*/ | |
UCLASS() | |
class CLIENTSDK_API UloginUserClient : public UBlueprintAsyncActionBase | |
{ | |
GENERATED_BODY() | |
public: | |
UFUNCTION(BlueprintCallable, meta = (BlueprintInternalUseOnly = "true", Keywords = "HTTP loginUserClient Query"), Category = "AsyncHTTP|API|Client") | |
static UloginUserClient* loginUserClient(FString user_email, FString user_password); | |
public: | |
UPROPERTY(BlueprintAssignable) | |
FloginUserClientDelegate OnSuccess; | |
UPROPERTY(BlueprintAssignable) | |
FloginUserClientDelegate OnFail; | |
public: | |
void Start(FString user_email, FString user_password); | |
private: | |
/** Handles json requests coming from the web */ | |
void HandleQuery(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded); | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment