// Fill out your copyright notice in the Description page of Project Settings. #include "HttpTapRankUpdate.h" #include "HttpModule.h" #include "HttpTapRank.h" #include "JsonObjectConverter.h" #include "Taptap.h" #include "Define/TapRankUpdateResponse.h" #include "Interfaces/IHttpResponse.h" void UHttpTapRankUpdate::OnProcessRequestComplete(TSharedPtr request, TSharedPtr response, bool arg) { FTapRankUpdateResponse resp; if (request->GetStatus() == EHttpRequestStatus::Succeeded) { TAPLOG_D(TEXT("taprankupdate报文:%s"),*response->GetContentAsString()) if (!FJsonObjectConverter::JsonObjectStringToUStruct(*response->GetContentAsString(),&resp)) { TAPLOG_E(TEXT("分析返回报文时,转化json字符串错误!")) return; } HttpTapRankUpdateRequestSuccessEventHandle.Broadcast(resp,request->GetStatus(),true); return; } HttpTapRankUpdateRequestSuccessEventHandle.Broadcast(resp,request->GetStatus(),true); } void UHttpTapRankUpdate::StartRequest(const FTapRankUpdateRequest& req) { const TSharedRef request = FHttpModule::Get().CreateRequest(); request->SetVerb(TEXT("Post")); const auto url = BuildURL(); request->SetURL(url); request->SetHeader("Content-Type","application/json"); request->SetHeader("X-LC-Id",AppID); request->SetHeader("X-LC-Key",AppKey); FString content; TArray> arr; for (const auto& r : req.results) { const TSharedPtr o = MakeShareable(new FJsonObject()); o->SetStringField("statisticName",r.statisticName); o->SetNumberField("statisticValue",r.statisticValue); TSharedPtr v = MakeShareable(new FJsonValueObject(o)); arr.Add(v); } const TSharedRef> write = TJsonWriterFactory::Create(&content); if (!FJsonSerializer::Serialize(arr,write)) { TAPLOG_E(TEXT("请求报文时,转化json字符串错误!")) return; } TAPLOG_D(TEXT("JSON字符串::\n%s"),*content); const FTCHARToUTF8 convert(*content); const TArray contentArr(reinterpret_cast(convert.Get()),convert.Length()); request->SetContent(contentArr); write->Close(); request->SetTimeout(TimeOut); request->OnProcessRequestComplete().BindUObject(this,&UHttpTapRankUpdate::OnProcessRequestComplete); if (!request->ProcessRequest()) { UE_LOG(LogTemp,Log,TEXT("tapRankUpdate请求出错")) } } FString UHttpTapRankUpdate::BuildURL() const { FString url= TAP_RANK_HOST; url.Append(TEXT("/1.1/leaderboard/objects/")); url.Append(this->ObjectID); url.Append(TEXT("/statistics")); return url; }