leopard8352
2023-12-04 8871a733498c8d717714b83bb096b7738224541a
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
// 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<IHttpRequest, ESPMode::ThreadSafe> request,
                                            TSharedPtr<IHttpResponse, ESPMode::ThreadSafe> 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<IHttpRequest> 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;
}