leopard8352
2023-12-04 8871a733498c8d717714b83bb096b7738224541a
提交 | 用户 | 时间
8871a7 1 // Fill out your copyright notice in the Description page of Project Settings.
L 2
3
4 #include "HttpTapRankUpdate.h"
5
6 #include "HttpModule.h"
7 #include "HttpTapRank.h"
8 #include "JsonObjectConverter.h"
9 #include "Taptap.h"
10 #include "Define/TapRankUpdateResponse.h"
11 #include "Interfaces/IHttpResponse.h"
12
13 void UHttpTapRankUpdate::OnProcessRequestComplete(TSharedPtr<IHttpRequest, ESPMode::ThreadSafe> request,
14                                                   TSharedPtr<IHttpResponse, ESPMode::ThreadSafe> response, bool arg)
15 {
16     FTapRankUpdateResponse resp;
17
18     if (request->GetStatus() == EHttpRequestStatus::Succeeded)
19     {
20         TAPLOG_D(TEXT("taprankupdate报文:%s"),*response->GetContentAsString())
21         if (!FJsonObjectConverter::JsonObjectStringToUStruct(*response->GetContentAsString(),&resp))
22         {
23             TAPLOG_E(TEXT("分析返回报文时,转化json字符串错误!"))
24             return;
25         }
26         HttpTapRankUpdateRequestSuccessEventHandle.Broadcast(resp,request->GetStatus(),true);
27         return;
28     }
29     HttpTapRankUpdateRequestSuccessEventHandle.Broadcast(resp,request->GetStatus(),true);
30 }
31
32 void UHttpTapRankUpdate::StartRequest(const FTapRankUpdateRequest& req)
33 {
34     const TSharedRef<IHttpRequest> request = FHttpModule::Get().CreateRequest();
35     request->SetVerb(TEXT("Post"));
36     const auto url = BuildURL();
37     request->SetURL(url);
38     request->SetHeader("Content-Type","application/json");
39     request->SetHeader("X-LC-Id",AppID);
40     request->SetHeader("X-LC-Key",AppKey);
41
42     FString content;
43     
44     TArray<TSharedPtr<FJsonValue>> arr;
45
46     for (const auto& r : req.results)
47     {
48         const TSharedPtr<FJsonObject> o = MakeShareable(new FJsonObject());
49         o->SetStringField("statisticName",r.statisticName);
50         o->SetNumberField("statisticValue",r.statisticValue);
51         TSharedPtr<FJsonValueObject> v = MakeShareable(new FJsonValueObject(o));
52         arr.Add(v);
53     }
54     
55     const TSharedRef<TJsonWriter<TCHAR>> write = TJsonWriterFactory<TCHAR>::Create(&content);
56     if (!FJsonSerializer::Serialize(arr,write))
57     {
58         TAPLOG_E(TEXT("请求报文时,转化json字符串错误!"))
59         return;
60     }
61     TAPLOG_D(TEXT("JSON字符串::\n%s"),*content);
62
63     const FTCHARToUTF8 convert(*content);
64     const TArray<uint8> contentArr(reinterpret_cast<const uint8*>(convert.Get()),convert.Length());
65     
66     request->SetContent(contentArr);
67
68     write->Close();
69     
70     request->SetTimeout(TimeOut);
71     request->OnProcessRequestComplete().BindUObject(this,&UHttpTapRankUpdate::OnProcessRequestComplete);
72     if (!request->ProcessRequest())
73     {
74         UE_LOG(LogTemp,Log,TEXT("tapRankUpdate请求出错"))
75     }
76 }
77
78 FString UHttpTapRankUpdate::BuildURL() const
79 {
80     FString url= TAP_RANK_HOST;
81     url.Append(TEXT("/1.1/leaderboard/objects/"));
82     url.Append(this->ObjectID);
83     url.Append(TEXT("/statistics"));
84     return url;
85 }