1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
|
#pragma once
#include "CoreMinimal.h" #include "Kismet/BlueprintAsyncActionBase.h" #include "Interfaces//IHttpRequest.h" #include "GetBrightnessAsync.generated.h"
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FBrightnessDelegate,const float&,Brightness);
UCLASS() class SCHOOL_API UGetBrightnessAsync : public UBlueprintAsyncActionBase { GENERATED_BODY() public:
UGetBrightnessAsync();
UFUNCTION(BlueprintCallable,Category="AsyncHttp",meta=(BlueprintInternalUseOnly="true")) static UGetBrightnessAsync* GetBrightnessAsync(const FString& Url);
void HttpRequestStar(const FString& Url); void HttpRequest_PosRecHandle(FHttpRequestPtr Request,FHttpResponsePtr Response,bool bWasSuccess); UPROPERTY(BlueprintAssignable) FBrightnessDelegate BrightNessOnSucceeded;
UPROPERTY(BlueprintAssignable) FBrightnessDelegate BrightNessOnFailed; };
#include "GetBrightnessAsync.h"
#include <string>
#include "HttpModule.h" #include "Interfaces/IHttpResponse.h"
UGetBrightnessAsync::UGetBrightnessAsync() { if(HasAnyFlags(RF_ClassDefaultObject) == false) { AddToRoot(); } }
UGetBrightnessAsync* UGetBrightnessAsync::GetBrightnessAsync(const FString& Url) { UGetBrightnessAsync* BrightnessAsync = NewObject<UGetBrightnessAsync>(); BrightnessAsync->HttpRequestStar(Url); return BrightnessAsync; }
void UGetBrightnessAsync::HttpRequestStar(const FString& Url) { TSharedPtr<IHttpRequest,ESPMode::ThreadSafe> Request = FHttpModule::Get().CreateRequest(); Request->SetVerb("GET"); Request->SetURL(Url);
Request->OnProcessRequestComplete().BindUObject(this,&UGetBrightnessAsync::HttpRequest_PosRecHandle); Request->ProcessRequest(); }
void UGetBrightnessAsync::HttpRequest_PosRecHandle(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccess) { if(bWasSuccess && Response.IsValid() && EHttpResponseCodes::IsOk(Response->GetResponseCode())) { TSharedPtr<FJsonObject> JsonObj; TSharedRef<TJsonReader<>> JsonReader = TJsonReaderFactory<>::Create(Response->GetContentAsString());
if(FJsonSerializer::Deserialize(JsonReader,JsonObj)) { uint32 BrightNess; uint32 PicRows; uint32 PicCols; if(JsonObj->TryGetNumberField(TEXT("BrightNess"),BrightNess) && JsonObj->TryGetNumberField(TEXT("cols"),PicCols) && JsonObj->TryGetNumberField(TEXT("rows"),PicRows)) { float BrightNessPower = BrightNess * 1.0 / (PicCols * PicRows);
BrightNessOnSucceeded.Broadcast(BrightNessPower); RemoveFromRoot(); return ; } } }
BrightNessOnFailed.Broadcast({}); RemoveFromRoot(); }
|