Skip to content

Commit c88b2e7

Browse files
committed
RequestHandler checks response codes, moved intent time in rpc manager to the failure delegate
1 parent b94f36a commit c88b2e7

4 files changed

Lines changed: 46 additions & 41 deletions

File tree

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
// Copyright 2024 Horizon Blockchain Games Inc. All rights reserved.
22
#include "Errors.h"
33

4-
FSequenceError::FSequenceError(const EErrorType Type, const FString Message) : Message(Message), Type(Type)
5-
{
6-
}
4+
FSequenceError::FSequenceError(const EErrorType Type, const FString& Message) :
5+
Response(nullptr), Message(Message), Type(Type) { }
6+
7+
FSequenceError::FSequenceError(const EErrorType Type, const FHttpResponsePtr& Response, const FString& Message) :
8+
Response(Response), Message(Message), Type(Type) { }

Plugins/SequencePlugin/Source/SequencePlugin/Private/RequestHandler.cpp

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -112,24 +112,23 @@ void URequestHandler::ProcessAndThen(const TSuccessCallback<FHttpResponsePtr>& O
112112
const FFailureCallback& OnFailure) const
113113
{
114114
Process().BindLambda([OnSuccess, OnFailure](FHttpRequestPtr Req, const FHttpResponsePtr& Response, const bool bWasSuccessful)
115+
{
116+
const int32 Code = Response->GetResponseCode();
117+
if (bWasSuccessful && Code >= 200 && Code < 300)
115118
{
116-
if (bWasSuccessful)
117-
{
118-
OnSuccess(Response);
119-
}
120-
else
121-
{
122-
if (!Response.IsValid())
123-
OnFailure(FSequenceError(RequestFail, "The Request is invalid!"));
124-
else
125-
{
126-
if (Response.IsValid())
127-
OnFailure(FSequenceError(RequestFail, "The Request is invalid!"));
128-
else
129-
OnFailure(FSequenceError(RequestFail, "Request failed: " + Response->GetContentAsString()));
130-
}
131-
}
132-
});
119+
OnSuccess(Response);
120+
return;
121+
}
122+
123+
if (!Response.IsValid())
124+
{
125+
OnFailure(FSequenceError(RequestFail, Response, "The Request is invalid!"));
126+
return;
127+
}
128+
129+
const FString Content = Response->GetContentAsString();
130+
OnFailure(FSequenceError(RequestFail, Response, "Request failed: " + Content));
131+
});
133132
}
134133

135134

Plugins/SequencePlugin/Source/SequencePlugin/Private/SequenceRPCManager.cpp

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -81,30 +81,31 @@ void USequenceRPCManager::SendIntent(const FString& Url, TFunction<FString(TOpti
8181

8282
SEQ_LOG_EDITOR(Display, TEXT("%d %s"), Code, *Content);
8383

84-
if(Content.Contains("intent is invalid: intent expired") || Content.Contains("intent is invalid: intent issued in the future"))
85-
{
86-
FString Date = Response->GetHeader("Date");
87-
FDateTime Time;
88-
bool IsParsed = FDateTime::ParseHttpDate(Date, Time);
89-
90-
if(!IsParsed)
91-
{
92-
OnFailure(FSequenceError(FailedToParseIntentTime, "Failed to parse intent time " + Date));
93-
return;
94-
}
95-
96-
UE_LOG(LogTemp, Display, TEXT("Resending intent with date %i"), Time.ToUnixTimestamp());
97-
this->SequenceRPC(Url, ContentGenerator(TOptional(Time.ToUnixTimestamp())), OnSuccess, OnFailure);
98-
}
99-
else if (Code >= 200 && Code < 300)
84+
OnSuccess(Content);
85+
}, [this, Url, ContentGenerator, OnSuccess, OnFailure](const FSequenceError& Error)
86+
{
87+
const FString Content = Error.Response->GetContentAsString();
88+
const int32 Code = Error.Response->GetResponseCode();
89+
SEQ_LOG_EDITOR(Error, TEXT("%d %s"), Code, *Content);
90+
91+
if (!Content.Contains("intent is invalid: intent expired") &&
92+
!Content.Contains("intent is invalid: intent issued in the future"))
10093
{
101-
OnSuccess(Content);
94+
OnFailure(Error);
95+
return;
10296
}
103-
else
97+
98+
FDateTime Time;
99+
const FString Date = Error.Response->GetHeader("Date");
100+
if(!FDateTime::ParseHttpDate(Date, Time))
104101
{
105-
OnFailure(FSequenceError(RequestFail, "Request failed"));
102+
OnFailure(FSequenceError(FailedToParseIntentTime, Error.Response, "Failed to parse intent time " + Date));
103+
return;
106104
}
107-
}, OnFailure);
105+
106+
UE_LOG(LogTemp, Display, TEXT("Resending intent with date %i"), Time.ToUnixTimestamp());
107+
this->SequenceRPC(Url, ContentGenerator(TOptional(Time.ToUnixTimestamp())), OnSuccess, OnFailure);
108+
});
108109
}
109110

110111
FString USequenceRPCManager::BuildGetFeeOptionsIntent(const FCredentials_BE& Credentials, const TArray<TransactionUnion>& Transactions, TOptional<int64> CurrentTime) const

Plugins/SequencePlugin/Source/SequencePlugin/Public/Errors.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
// Copyright 2024 Horizon Blockchain Games Inc. All rights reserved.
22
#pragma once
3+
#include "Http.h"
34
#include "Templates/ValueOrError.h"
45
#include "Containers/UnrealString.h"
56

@@ -20,7 +21,9 @@ enum EErrorType
2021
class SEQUENCEPLUGIN_API FSequenceError
2122
{
2223
public:
23-
FSequenceError(EErrorType Type, FString Message);
24+
FSequenceError(EErrorType Type, const FString& Message);
25+
FSequenceError(EErrorType Type, const FHttpResponsePtr& Response, const FString& Message);
26+
FHttpResponsePtr Response;
2427
FString Message;
2528
EErrorType Type;
2629
};

0 commit comments

Comments
 (0)