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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
// 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;
}