// 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<IHttpRequest, ESPMode::ThreadSafe> request,
|
TSharedPtr<IHttpResponse, ESPMode::ThreadSafe> 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<IHttpRequest> 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<TSharedPtr<FJsonValue>> arr;
|
|
for (const auto& r : req.results)
|
{
|
const TSharedPtr<FJsonObject> o = MakeShareable(new FJsonObject());
|
o->SetStringField("statisticName",r.statisticName);
|
o->SetNumberField("statisticValue",r.statisticValue);
|
TSharedPtr<FJsonValueObject> v = MakeShareable(new FJsonValueObject(o));
|
arr.Add(v);
|
}
|
|
const TSharedRef<TJsonWriter<TCHAR>> write = TJsonWriterFactory<TCHAR>::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<uint8> contentArr(reinterpret_cast<const uint8*>(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;
|
}
|