// Fill out your copyright notice in the Description page of Project Settings. #include "HttpTapRank.h" #include "HttpModule.h" #include "JsonObjectConverter.h" #include "Taptap.h" #include "GenericPlatform/GenericPlatformHttp.h" #include "Interfaces/IHttpResponse.h" void UHttpTapRank::OnProcessRequestComplete(TSharedPtr request, TSharedPtr response, bool arg) { FTapRankResponse resp; if (request->GetStatus() == EHttpRequestStatus::Succeeded) { TAPLOG_D(TEXT("taprank报文:%s"),*response->GetContentAsString()) if (!FJsonObjectConverter::JsonObjectStringToUStruct(*response->GetContentAsString(),&resp)) { TAPLOG_E(TEXT("分析返回报文时,转化json字符串错误!")) return; } HttpTapRankRequestSuccessEventHandle.Broadcast(resp,request->GetStatus(),true); return; } HttpTapRankRequestSuccessEventHandle.Broadcast(resp,request->GetStatus(),true); } void UHttpTapRank::StartRequest() { const TSharedRef request = FHttpModule::Get().CreateRequest(); request->SetVerb(TEXT("Get")); 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); request->SetTimeout(TimeOut); request->OnProcessRequestComplete().BindUObject(this,&UHttpTapRank::OnProcessRequestComplete); if (!request->ProcessRequest()) { UE_LOG(LogTemp,Log,TEXT("tapRank请求出错")) } } FString UHttpTapRank::BuildURL() const { FString url= TAP_RANK_HOST; url.Append(TEXT("/1.1/leaderboard/leaderboards/user/")); url.Append(this->StatisticName); url.Append(TEXT("/ranks?")); url.Append(BuildURLQueryString(TEXT("startPosition"),FString::FromInt(StartPosition))); url.Append("&"); url.Append(BuildURLQueryString(TEXT("maxResultsCount"),FString::FromInt(MaxResultsCount))); url.Append("&"); url.Append(BuildURLQueryString(TEXT("includeKeys"),TEXT("nickname,avatar"))); return url; } FString UHttpTapRank::BuildURLQueryString(FString name, FString value) const { FString temp = FGenericPlatformHttp::UrlEncode(value); FString result = FString::Printf(TEXT("%s=%s"),*name,*temp); return result; }