diff --git a/modules/openapi-generator/src/main/resources/cpp-ue4/api-header.mustache b/modules/openapi-generator/src/main/resources/cpp-ue4/api-header.mustache index 6629cf47cb1..c6ee2f08eb4 100644 --- a/modules/openapi-generator/src/main/resources/cpp-ue4/api-header.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-ue4/api-header.mustache @@ -27,8 +27,9 @@ public: {{#operations}}{{#operation}}{{#description}}/* {{{description}}} */ {{/description}}bool {{operationIdCamelCase}}(const {{operationIdCamelCase}}Request& Request, const F{{operationIdCamelCase}}Delegate& Delegate = F{{operationIdCamelCase}}Delegate()) const; {{/operation}}{{/operations}} + private: - {{#operations}}{{#operation}}void On{{operationIdCamelCase}}Response(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, F{{operationIdCamelCase}}Delegate Delegate) const; + {{#operations}}{{#operation}}void On{{operationIdCamelCase}}Response(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, F{{operationIdCamelCase}}Delegate Delegate, int AutoRetryCount) const; {{/operation}}{{/operations}} bool IsValid() const; void HandleResponse(FHttpResponsePtr HttpResponse, bool bSucceeded, Response& InOutResponse) const; diff --git a/modules/openapi-generator/src/main/resources/cpp-ue4/api-operations-header.mustache b/modules/openapi-generator/src/main/resources/cpp-ue4/api-operations-header.mustache index bd168101e38..2319c59b3fa 100644 --- a/modules/openapi-generator/src/main/resources/cpp-ue4/api-operations-header.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-ue4/api-operations-header.mustache @@ -22,7 +22,7 @@ class {{dllapi}} {{classname}}::{{operationIdCamelCase}}Request : public Request { public: virtual ~{{operationIdCamelCase}}Request() {} - void SetupHttpRequest(const TSharedRef& HttpRequest) const final; + void SetupHttpRequest(const FHttpRequestRef& HttpRequest) const final; FString ComputePath() const final; {{#allParams}} diff --git a/modules/openapi-generator/src/main/resources/cpp-ue4/api-operations-source.mustache b/modules/openapi-generator/src/main/resources/cpp-ue4/api-operations-source.mustache index 3d23a248cf9..07b557157ea 100644 --- a/modules/openapi-generator/src/main/resources/cpp-ue4/api-operations-source.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-ue4/api-operations-source.mustache @@ -23,7 +23,7 @@ inline FString ToString(const {{classname}}::{{operationIdCamelCase}}Request::{{ { {{#enumVars}} case {{classname}}::{{operationIdCamelCase}}Request::{{{enumName}}}::{{name}}: - return TEXT({{{value}}}); + return TEXT("{{{value}}}"); {{/enumVars}} } {{/allowableValues}} @@ -49,7 +49,7 @@ inline bool TryGetJsonValue(const TSharedPtr& JsonValue, {{classname if (JsonValue->TryGetString(TmpValue)) { static TMap StringToEnum = { {{#enumVars}} - { TEXT({{{value}}}), {{classname}}::{{operationIdCamelCase}}Request::{{{enumName}}}::{{name}} },{{/enumVars}} }; + { TEXT("{{{value}}}"), {{classname}}::{{operationIdCamelCase}}Request::{{{enumName}}}::{{name}} },{{/enumVars}} }; const auto Found = StringToEnum.Find(TmpValue); if(Found) @@ -109,7 +109,7 @@ FString {{classname}}::{{operationIdCamelCase}}Request::ComputePath() const return Path; } -void {{classname}}::{{operationIdCamelCase}}Request::SetupHttpRequest(const TSharedRef& HttpRequest) const +void {{classname}}::{{operationIdCamelCase}}Request::SetupHttpRequest(const FHttpRequestRef& HttpRequest) const { static const TArray Consumes = { {{#consumes}}TEXT("{{{mediaType}}}"){{^-last}}, {{/-last}}{{/consumes}} }; //static const TArray Produces = { {{#produces}}TEXT("{{{mediaType}}}"){{^-last}}, {{/-last}}{{/produces}} }; diff --git a/modules/openapi-generator/src/main/resources/cpp-ue4/api-source.mustache b/modules/openapi-generator/src/main/resources/cpp-ue4/api-source.mustache index fe5e177d736..8a9b3854544 100644 --- a/modules/openapi-generator/src/main/resources/cpp-ue4/api-source.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-ue4/api-source.mustache @@ -96,7 +96,7 @@ bool {{classname}}::{{operationIdCamelCase}}(const {{operationIdCamelCase}}Reque if (!IsValid()) return false; - TSharedRef HttpRequest = FHttpModule::Get().CreateRequest(); + FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest(); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) @@ -106,15 +106,26 @@ bool {{classname}}::{{operationIdCamelCase}}(const {{operationIdCamelCase}}Reque Request.SetupHttpRequest(HttpRequest); - HttpRequest->OnProcessRequestComplete().BindRaw(this, &{{classname}}::On{{operationIdCamelCase}}Response, Delegate); + HttpRequest->OnProcessRequestComplete().BindRaw(this, &{{classname}}::On{{operationIdCamelCase}}Response, Delegate, Request.GetAutoRetryCount()); return HttpRequest->ProcessRequest(); } -void {{classname}}::On{{operationIdCamelCase}}Response(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, F{{operationIdCamelCase}}Delegate Delegate) const +void {{classname}}::On{{operationIdCamelCase}}Response(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, F{{operationIdCamelCase}}Delegate Delegate, int AutoRetryCount) const { {{operationIdCamelCase}}Response Response; + Response.SetHttpRequest(HttpRequest); + HandleResponse(HttpResponse, bSucceeded, Response); - Delegate.ExecuteIfBound(Response); + + if(!Response.IsSuccessful() && AutoRetryCount > 0) + { + HttpRequest->OnProcessRequestComplete().BindRaw(this, &{{classname}}::On{{operationIdCamelCase}}Response, Delegate, AutoRetryCount - 1); + Response.AsyncRetry(); + } + else + { + Delegate.ExecuteIfBound(Response); + } } {{/operation}} diff --git a/modules/openapi-generator/src/main/resources/cpp-ue4/helpers-header.mustache b/modules/openapi-generator/src/main/resources/cpp-ue4/helpers-header.mustache index 1750a6f8e95..eb178e890af 100644 --- a/modules/openapi-generator/src/main/resources/cpp-ue4/helpers-header.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-ue4/helpers-header.mustache @@ -22,8 +22,8 @@ typedef TSharedRef> JsonWriter; class {{dllapi}} HttpFileInput { public: - HttpFileInput(const TCHAR* InFilePath); - HttpFileInput(const FString& InFilePath); + explicit HttpFileInput(const TCHAR* InFilePath); + explicit HttpFileInput(const FString& InFilePath); // This will automatically set the content type if not already set void SetFilePath(const TCHAR* InFilePath); @@ -53,7 +53,7 @@ class HttpMultipartFormData { public: void SetBoundary(const TCHAR* InBoundary); - void SetupHttpRequest(const TSharedRef& HttpRequest); + void SetupHttpRequest(const FHttpRequestRef& HttpRequest); void AddStringPart(const TCHAR* Name, const TCHAR* Data); void AddJsonPart(const TCHAR* Name, const FString& JsonString); @@ -268,11 +268,15 @@ inline bool TryGetJsonValue(const TSharedPtr& JsonValue, FString& Va return false; } +{{dllapi}} bool ParseDateTime(const FString& DateTimeString, FDateTime& OutDateTime); + inline bool TryGetJsonValue(const TSharedPtr& JsonValue, FDateTime& Value) { FString TmpValue; if (JsonValue->TryGetString(TmpValue)) - return FDateTime::Parse(TmpValue, Value); + { + return ParseDateTime(TmpValue, Value); + } else return false; } diff --git a/modules/openapi-generator/src/main/resources/cpp-ue4/helpers-source.mustache b/modules/openapi-generator/src/main/resources/cpp-ue4/helpers-source.mustache index ea97911bbd9..b2dc14f3578 100644 --- a/modules/openapi-generator/src/main/resources/cpp-ue4/helpers-source.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-ue4/helpers-source.mustache @@ -70,7 +70,7 @@ const FString& HttpMultipartFormData::GetBoundary() const return Boundary; } -void HttpMultipartFormData::SetupHttpRequest(const TSharedRef& HttpRequest) +void HttpMultipartFormData::SetupHttpRequest(const FHttpRequestRef& HttpRequest) { if(HttpRequest->GetVerb() != TEXT("POST")) { @@ -183,6 +183,44 @@ void HttpMultipartFormData::AppendString(const TCHAR* Str) FormData.Append((uint8*)utf8Str.Get(), utf8Str.Length()); } +////////////////////////////////////////////////////////////////////////// + +bool ParseDateTime(const FString& DateTimeString, FDateTime& OutDateTime) +{ + // Iso8601 Format: DateTime: YYYY-mm-ddTHH:MM:SS(.sss)(Z|+hh:mm|+hhmm|-hh:mm|-hhmm) + { + // We cannot call directly FDateTime::ParseIso8601 because it does not allow for precision beyond the millisecond, but DateTimeString might have more digits + int32 DotIndex; + FString StringToParse = DateTimeString; + if (DateTimeString.FindChar('.', DotIndex)) + { + int32 TimeZoneIndex; + if (DateTimeString.FindChar('Z', TimeZoneIndex) || DateTimeString.FindChar('+', TimeZoneIndex) || DateTimeString.FindChar('-', TimeZoneIndex)) + { + // The string contains a time zone designator starting at TimeZoneIndex + if (TimeZoneIndex > DotIndex + 4) + { + // Trim to millisecond + StringToParse = DateTimeString.Left(DotIndex + 4) + DateTimeString.RightChop(TimeZoneIndex); + } + } + else + { + // the string does not contain a time zone designator, trim it to the millisecond + StringToParse = DateTimeString.Left(DotIndex + 4); + } + } + + if (FDateTime::ParseIso8601(*StringToParse, OutDateTime)) + return true; + } + + if (FDateTime::ParseHttpDate(DateTimeString, OutDateTime)) + return true; + + return FDateTime::Parse(DateTimeString, OutDateTime); +} + {{#cppNamespaceDeclarations}} } {{/cppNamespaceDeclarations}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/cpp-ue4/model-base-header.mustache b/modules/openapi-generator/src/main/resources/cpp-ue4/model-base-header.mustache index 94edaaf4327..31b0bdabd26 100644 --- a/modules/openapi-generator/src/main/resources/cpp-ue4/model-base-header.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-ue4/model-base-header.mustache @@ -25,8 +25,14 @@ class {{dllapi}} Request { public: virtual ~Request() {} - virtual void SetupHttpRequest(const TSharedRef& HttpRequest) const = 0; + virtual void SetupHttpRequest(const FHttpRequestRef& HttpRequest) const = 0; virtual FString ComputePath() const = 0; + + void SetAutoRetryCount(int InCount) { AutoRetryCount = InCount; } + int GetAutoRetryCount() const { return AutoRetryCount; } + +private: + int AutoRetryCount = 0; }; class {{dllapi}} Response @@ -38,6 +44,8 @@ public: void SetSuccessful(bool InSuccessful) { Successful = InSuccessful; } bool IsSuccessful() const { return Successful; } + void AsyncRetry() const; + virtual void SetHttpResponseCode(EHttpResponseCodes::Type InHttpResponseCode); EHttpResponseCodes::Type GetHttpResponseCode() const { return ResponseCode; } @@ -47,11 +55,15 @@ public: void SetHttpResponse(const FHttpResponsePtr& InHttpResponse) { HttpResponse = InHttpResponse; } const FHttpResponsePtr& GetHttpResponse() const { return HttpResponse; } + void SetHttpRequest(const FHttpRequestPtr& InHttpRequest) { HttpRequest = InHttpRequest; } + const FHttpRequestPtr& GetHttpRequest() const { return HttpRequest; } + private: bool Successful; EHttpResponseCodes::Type ResponseCode; FString ResponseString; FHttpResponsePtr HttpResponse; + FHttpRequestPtr HttpRequest; }; {{#cppNamespaceDeclarations}} diff --git a/modules/openapi-generator/src/main/resources/cpp-ue4/model-base-source.mustache b/modules/openapi-generator/src/main/resources/cpp-ue4/model-base-source.mustache index 12decd77211..a5ab70a432f 100644 --- a/modules/openapi-generator/src/main/resources/cpp-ue4/model-base-source.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-ue4/model-base-source.mustache @@ -1,6 +1,8 @@ {{>licenseInfo}} #include "{{modelNamePrefix}}BaseModel.h" +#include "Async/Async.h" + {{#cppNamespaceDeclarations}} namespace {{this}} { @@ -16,6 +18,15 @@ void Response::SetHttpResponseCode(EHttpResponseCodes::Type InHttpResponseCode) } } +void Response::AsyncRetry() const +{ + // Unfortunately, it is currently usafe to call ProcessRequest() directly here. + // This is because the HttpManager will remove all references to this HttpRequest in FHttpManager::Tick including the new request we just added, instead of removing just one. + // This will lead to the request's destruction and eventually a crash. + // The only solution is therefore to ensure we are taking an extra reference to the request, and that the request is added after the queue is flushed. + Async(EAsyncExecution::TaskGraph, [AddRef = FHttpRequestPtr(GetHttpRequest())](){ AddRef->ProcessRequest(); }); +} + {{#cppNamespaceDeclarations}} } {{/cppNamespaceDeclarations}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/cpp-ue4/model-source.mustache b/modules/openapi-generator/src/main/resources/cpp-ue4/model-source.mustache index f26df2ec50f..d084f8a8033 100644 --- a/modules/openapi-generator/src/main/resources/cpp-ue4/model-source.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-ue4/model-source.mustache @@ -19,7 +19,7 @@ inline FString ToString(const {{classname}}::Values& Value) { {{#enumVars}} case {{classname}}::Values::{{name}}: - return TEXT({{{value}}}); + return TEXT("{{{value}}}"); {{/enumVars}} } {{/allowableValues}} @@ -45,7 +45,7 @@ inline bool TryGetJsonValue(const TSharedPtr& JsonValue, {{classname if (JsonValue->TryGetString(TmpValue)) { static TMap StringToEnum = { {{#enumVars}} - { TEXT({{{value}}}), {{classname}}::Values::{{name}} },{{/enumVars}} }; + { TEXT("{{{value}}}"), {{classname}}::Values::{{name}} },{{/enumVars}} }; const auto Found = StringToEnum.Find(TmpValue); if(Found) @@ -69,7 +69,7 @@ inline FString ToString(const {{classname}}::{{{enumName}}}& Value) { {{#enumVars}} case {{classname}}::{{{enumName}}}::{{name}}: - return TEXT({{{value}}}); + return TEXT("{{{value}}}"); {{/enumVars}} } {{/allowableValues}} @@ -95,7 +95,7 @@ inline bool TryGetJsonValue(const TSharedPtr& JsonValue, {{classname if (JsonValue->TryGetString(TmpValue)) { static TMap StringToEnum = { {{#enumVars}} - { TEXT({{{value}}}), {{classname}}::{{{enumName}}}::{{name}} },{{/enumVars}} }; + { TEXT("{{{value}}}"), {{classname}}::{{{enumName}}}::{{name}} },{{/enumVars}} }; const auto Found = StringToEnum.Find(TmpValue); if(Found) diff --git a/samples/client/petstore/cpp-ue4/.openapi-generator/VERSION b/samples/client/petstore/cpp-ue4/.openapi-generator/VERSION index d99e7162d01..c30f0ec2be7 100644 --- a/samples/client/petstore/cpp-ue4/.openapi-generator/VERSION +++ b/samples/client/petstore/cpp-ue4/.openapi-generator/VERSION @@ -1 +1 @@ -5.0.0-SNAPSHOT \ No newline at end of file +5.1.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/cpp-ue4/Private/OpenAPIBaseModel.cpp b/samples/client/petstore/cpp-ue4/Private/OpenAPIBaseModel.cpp index b8b5bd778a7..b277e257028 100644 --- a/samples/client/petstore/cpp-ue4/Private/OpenAPIBaseModel.cpp +++ b/samples/client/petstore/cpp-ue4/Private/OpenAPIBaseModel.cpp @@ -12,6 +12,8 @@ #include "OpenAPIBaseModel.h" +#include "Async/Async.h" + namespace OpenAPI { @@ -25,4 +27,13 @@ void Response::SetHttpResponseCode(EHttpResponseCodes::Type InHttpResponseCode) } } +void Response::AsyncRetry() const +{ + // Unfortunately, it is currently usafe to call ProcessRequest() directly here. + // This is because the HttpManager will remove all references to this HttpRequest in FHttpManager::Tick including the new request we just added, instead of removing just one. + // This will lead to the request's destruction and eventually a crash. + // The only solution is therefore to ensure we are taking an extra reference to the request, and that the request is added after the queue is flushed. + Async(EAsyncExecution::TaskGraph, [AddRef = FHttpRequestPtr(GetHttpRequest())](){ AddRef->ProcessRequest(); }); +} + } diff --git a/samples/client/petstore/cpp-ue4/Private/OpenAPIHelpers.cpp b/samples/client/petstore/cpp-ue4/Private/OpenAPIHelpers.cpp index 7361ddf5fe3..4b6e1627c14 100644 --- a/samples/client/petstore/cpp-ue4/Private/OpenAPIHelpers.cpp +++ b/samples/client/petstore/cpp-ue4/Private/OpenAPIHelpers.cpp @@ -79,7 +79,7 @@ const FString& HttpMultipartFormData::GetBoundary() const return Boundary; } -void HttpMultipartFormData::SetupHttpRequest(const TSharedRef& HttpRequest) +void HttpMultipartFormData::SetupHttpRequest(const FHttpRequestRef& HttpRequest) { if(HttpRequest->GetVerb() != TEXT("POST")) { @@ -192,4 +192,42 @@ void HttpMultipartFormData::AppendString(const TCHAR* Str) FormData.Append((uint8*)utf8Str.Get(), utf8Str.Length()); } +////////////////////////////////////////////////////////////////////////// + +bool ParseDateTime(const FString& DateTimeString, FDateTime& OutDateTime) +{ + // Iso8601 Format: DateTime: YYYY-mm-ddTHH:MM:SS(.sss)(Z|+hh:mm|+hhmm|-hh:mm|-hhmm) + { + // We cannot call directly FDateTime::ParseIso8601 because it does not allow for precision beyond the millisecond, but DateTimeString might have more digits + int32 DotIndex; + FString StringToParse = DateTimeString; + if (DateTimeString.FindChar('.', DotIndex)) + { + int32 TimeZoneIndex; + if (DateTimeString.FindChar('Z', TimeZoneIndex) || DateTimeString.FindChar('+', TimeZoneIndex) || DateTimeString.FindChar('-', TimeZoneIndex)) + { + // The string contains a time zone designator starting at TimeZoneIndex + if (TimeZoneIndex > DotIndex + 4) + { + // Trim to millisecond + StringToParse = DateTimeString.Left(DotIndex + 4) + DateTimeString.RightChop(TimeZoneIndex); + } + } + else + { + // the string does not contain a time zone designator, trim it to the millisecond + StringToParse = DateTimeString.Left(DotIndex + 4); + } + } + + if (FDateTime::ParseIso8601(*StringToParse, OutDateTime)) + return true; + } + + if (FDateTime::ParseHttpDate(DateTimeString, OutDateTime)) + return true; + + return FDateTime::Parse(DateTimeString, OutDateTime); +} + } diff --git a/samples/client/petstore/cpp-ue4/Private/OpenAPIPetApi.cpp b/samples/client/petstore/cpp-ue4/Private/OpenAPIPetApi.cpp index 5e5602316f7..68a0d933aca 100644 --- a/samples/client/petstore/cpp-ue4/Private/OpenAPIPetApi.cpp +++ b/samples/client/petstore/cpp-ue4/Private/OpenAPIPetApi.cpp @@ -103,7 +103,7 @@ bool OpenAPIPetApi::AddPet(const AddPetRequest& Request, const FAddPetDelegate& if (!IsValid()) return false; - TSharedRef HttpRequest = FHttpModule::Get().CreateRequest(); + FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest(); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) @@ -113,15 +113,26 @@ bool OpenAPIPetApi::AddPet(const AddPetRequest& Request, const FAddPetDelegate& Request.SetupHttpRequest(HttpRequest); - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnAddPetResponse, Delegate); + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnAddPetResponse, Delegate, Request.GetAutoRetryCount()); return HttpRequest->ProcessRequest(); } -void OpenAPIPetApi::OnAddPetResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FAddPetDelegate Delegate) const +void OpenAPIPetApi::OnAddPetResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FAddPetDelegate Delegate, int AutoRetryCount) const { AddPetResponse Response; + Response.SetHttpRequest(HttpRequest); + HandleResponse(HttpResponse, bSucceeded, Response); - Delegate.ExecuteIfBound(Response); + + if(!Response.IsSuccessful() && AutoRetryCount > 0) + { + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnAddPetResponse, Delegate, AutoRetryCount - 1); + Response.AsyncRetry(); + } + else + { + Delegate.ExecuteIfBound(Response); + } } bool OpenAPIPetApi::DeletePet(const DeletePetRequest& Request, const FDeletePetDelegate& Delegate /*= FDeletePetDelegate()*/) const @@ -129,7 +140,7 @@ bool OpenAPIPetApi::DeletePet(const DeletePetRequest& Request, const FDeletePetD if (!IsValid()) return false; - TSharedRef HttpRequest = FHttpModule::Get().CreateRequest(); + FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest(); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) @@ -139,15 +150,26 @@ bool OpenAPIPetApi::DeletePet(const DeletePetRequest& Request, const FDeletePetD Request.SetupHttpRequest(HttpRequest); - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnDeletePetResponse, Delegate); + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnDeletePetResponse, Delegate, Request.GetAutoRetryCount()); return HttpRequest->ProcessRequest(); } -void OpenAPIPetApi::OnDeletePetResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FDeletePetDelegate Delegate) const +void OpenAPIPetApi::OnDeletePetResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FDeletePetDelegate Delegate, int AutoRetryCount) const { DeletePetResponse Response; + Response.SetHttpRequest(HttpRequest); + HandleResponse(HttpResponse, bSucceeded, Response); - Delegate.ExecuteIfBound(Response); + + if(!Response.IsSuccessful() && AutoRetryCount > 0) + { + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnDeletePetResponse, Delegate, AutoRetryCount - 1); + Response.AsyncRetry(); + } + else + { + Delegate.ExecuteIfBound(Response); + } } bool OpenAPIPetApi::FindPetsByStatus(const FindPetsByStatusRequest& Request, const FFindPetsByStatusDelegate& Delegate /*= FFindPetsByStatusDelegate()*/) const @@ -155,7 +177,7 @@ bool OpenAPIPetApi::FindPetsByStatus(const FindPetsByStatusRequest& Request, con if (!IsValid()) return false; - TSharedRef HttpRequest = FHttpModule::Get().CreateRequest(); + FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest(); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) @@ -165,15 +187,26 @@ bool OpenAPIPetApi::FindPetsByStatus(const FindPetsByStatusRequest& Request, con Request.SetupHttpRequest(HttpRequest); - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnFindPetsByStatusResponse, Delegate); + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnFindPetsByStatusResponse, Delegate, Request.GetAutoRetryCount()); return HttpRequest->ProcessRequest(); } -void OpenAPIPetApi::OnFindPetsByStatusResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FFindPetsByStatusDelegate Delegate) const +void OpenAPIPetApi::OnFindPetsByStatusResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FFindPetsByStatusDelegate Delegate, int AutoRetryCount) const { FindPetsByStatusResponse Response; + Response.SetHttpRequest(HttpRequest); + HandleResponse(HttpResponse, bSucceeded, Response); - Delegate.ExecuteIfBound(Response); + + if(!Response.IsSuccessful() && AutoRetryCount > 0) + { + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnFindPetsByStatusResponse, Delegate, AutoRetryCount - 1); + Response.AsyncRetry(); + } + else + { + Delegate.ExecuteIfBound(Response); + } } bool OpenAPIPetApi::FindPetsByTags(const FindPetsByTagsRequest& Request, const FFindPetsByTagsDelegate& Delegate /*= FFindPetsByTagsDelegate()*/) const @@ -181,7 +214,7 @@ bool OpenAPIPetApi::FindPetsByTags(const FindPetsByTagsRequest& Request, const F if (!IsValid()) return false; - TSharedRef HttpRequest = FHttpModule::Get().CreateRequest(); + FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest(); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) @@ -191,15 +224,26 @@ bool OpenAPIPetApi::FindPetsByTags(const FindPetsByTagsRequest& Request, const F Request.SetupHttpRequest(HttpRequest); - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnFindPetsByTagsResponse, Delegate); + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnFindPetsByTagsResponse, Delegate, Request.GetAutoRetryCount()); return HttpRequest->ProcessRequest(); } -void OpenAPIPetApi::OnFindPetsByTagsResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FFindPetsByTagsDelegate Delegate) const +void OpenAPIPetApi::OnFindPetsByTagsResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FFindPetsByTagsDelegate Delegate, int AutoRetryCount) const { FindPetsByTagsResponse Response; + Response.SetHttpRequest(HttpRequest); + HandleResponse(HttpResponse, bSucceeded, Response); - Delegate.ExecuteIfBound(Response); + + if(!Response.IsSuccessful() && AutoRetryCount > 0) + { + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnFindPetsByTagsResponse, Delegate, AutoRetryCount - 1); + Response.AsyncRetry(); + } + else + { + Delegate.ExecuteIfBound(Response); + } } bool OpenAPIPetApi::GetPetById(const GetPetByIdRequest& Request, const FGetPetByIdDelegate& Delegate /*= FGetPetByIdDelegate()*/) const @@ -207,7 +251,7 @@ bool OpenAPIPetApi::GetPetById(const GetPetByIdRequest& Request, const FGetPetBy if (!IsValid()) return false; - TSharedRef HttpRequest = FHttpModule::Get().CreateRequest(); + FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest(); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) @@ -217,15 +261,26 @@ bool OpenAPIPetApi::GetPetById(const GetPetByIdRequest& Request, const FGetPetBy Request.SetupHttpRequest(HttpRequest); - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnGetPetByIdResponse, Delegate); + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnGetPetByIdResponse, Delegate, Request.GetAutoRetryCount()); return HttpRequest->ProcessRequest(); } -void OpenAPIPetApi::OnGetPetByIdResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetPetByIdDelegate Delegate) const +void OpenAPIPetApi::OnGetPetByIdResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetPetByIdDelegate Delegate, int AutoRetryCount) const { GetPetByIdResponse Response; + Response.SetHttpRequest(HttpRequest); + HandleResponse(HttpResponse, bSucceeded, Response); - Delegate.ExecuteIfBound(Response); + + if(!Response.IsSuccessful() && AutoRetryCount > 0) + { + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnGetPetByIdResponse, Delegate, AutoRetryCount - 1); + Response.AsyncRetry(); + } + else + { + Delegate.ExecuteIfBound(Response); + } } bool OpenAPIPetApi::UpdatePet(const UpdatePetRequest& Request, const FUpdatePetDelegate& Delegate /*= FUpdatePetDelegate()*/) const @@ -233,7 +288,7 @@ bool OpenAPIPetApi::UpdatePet(const UpdatePetRequest& Request, const FUpdatePetD if (!IsValid()) return false; - TSharedRef HttpRequest = FHttpModule::Get().CreateRequest(); + FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest(); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) @@ -243,15 +298,26 @@ bool OpenAPIPetApi::UpdatePet(const UpdatePetRequest& Request, const FUpdatePetD Request.SetupHttpRequest(HttpRequest); - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnUpdatePetResponse, Delegate); + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnUpdatePetResponse, Delegate, Request.GetAutoRetryCount()); return HttpRequest->ProcessRequest(); } -void OpenAPIPetApi::OnUpdatePetResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUpdatePetDelegate Delegate) const +void OpenAPIPetApi::OnUpdatePetResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUpdatePetDelegate Delegate, int AutoRetryCount) const { UpdatePetResponse Response; + Response.SetHttpRequest(HttpRequest); + HandleResponse(HttpResponse, bSucceeded, Response); - Delegate.ExecuteIfBound(Response); + + if(!Response.IsSuccessful() && AutoRetryCount > 0) + { + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnUpdatePetResponse, Delegate, AutoRetryCount - 1); + Response.AsyncRetry(); + } + else + { + Delegate.ExecuteIfBound(Response); + } } bool OpenAPIPetApi::UpdatePetWithForm(const UpdatePetWithFormRequest& Request, const FUpdatePetWithFormDelegate& Delegate /*= FUpdatePetWithFormDelegate()*/) const @@ -259,7 +325,7 @@ bool OpenAPIPetApi::UpdatePetWithForm(const UpdatePetWithFormRequest& Request, c if (!IsValid()) return false; - TSharedRef HttpRequest = FHttpModule::Get().CreateRequest(); + FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest(); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) @@ -269,15 +335,26 @@ bool OpenAPIPetApi::UpdatePetWithForm(const UpdatePetWithFormRequest& Request, c Request.SetupHttpRequest(HttpRequest); - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnUpdatePetWithFormResponse, Delegate); + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnUpdatePetWithFormResponse, Delegate, Request.GetAutoRetryCount()); return HttpRequest->ProcessRequest(); } -void OpenAPIPetApi::OnUpdatePetWithFormResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUpdatePetWithFormDelegate Delegate) const +void OpenAPIPetApi::OnUpdatePetWithFormResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUpdatePetWithFormDelegate Delegate, int AutoRetryCount) const { UpdatePetWithFormResponse Response; + Response.SetHttpRequest(HttpRequest); + HandleResponse(HttpResponse, bSucceeded, Response); - Delegate.ExecuteIfBound(Response); + + if(!Response.IsSuccessful() && AutoRetryCount > 0) + { + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnUpdatePetWithFormResponse, Delegate, AutoRetryCount - 1); + Response.AsyncRetry(); + } + else + { + Delegate.ExecuteIfBound(Response); + } } bool OpenAPIPetApi::UploadFile(const UploadFileRequest& Request, const FUploadFileDelegate& Delegate /*= FUploadFileDelegate()*/) const @@ -285,7 +362,7 @@ bool OpenAPIPetApi::UploadFile(const UploadFileRequest& Request, const FUploadFi if (!IsValid()) return false; - TSharedRef HttpRequest = FHttpModule::Get().CreateRequest(); + FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest(); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) @@ -295,15 +372,26 @@ bool OpenAPIPetApi::UploadFile(const UploadFileRequest& Request, const FUploadFi Request.SetupHttpRequest(HttpRequest); - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnUploadFileResponse, Delegate); + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnUploadFileResponse, Delegate, Request.GetAutoRetryCount()); return HttpRequest->ProcessRequest(); } -void OpenAPIPetApi::OnUploadFileResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUploadFileDelegate Delegate) const +void OpenAPIPetApi::OnUploadFileResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUploadFileDelegate Delegate, int AutoRetryCount) const { UploadFileResponse Response; + Response.SetHttpRequest(HttpRequest); + HandleResponse(HttpResponse, bSucceeded, Response); - Delegate.ExecuteIfBound(Response); + + if(!Response.IsSuccessful() && AutoRetryCount > 0) + { + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnUploadFileResponse, Delegate, AutoRetryCount - 1); + Response.AsyncRetry(); + } + else + { + Delegate.ExecuteIfBound(Response); + } } } diff --git a/samples/client/petstore/cpp-ue4/Private/OpenAPIPetApiOperations.cpp b/samples/client/petstore/cpp-ue4/Private/OpenAPIPetApiOperations.cpp index 988a9496b14..92a954d22b3 100644 --- a/samples/client/petstore/cpp-ue4/Private/OpenAPIPetApiOperations.cpp +++ b/samples/client/petstore/cpp-ue4/Private/OpenAPIPetApiOperations.cpp @@ -29,7 +29,7 @@ FString OpenAPIPetApi::AddPetRequest::ComputePath() const return Path; } -void OpenAPIPetApi::AddPetRequest::SetupHttpRequest(const TSharedRef& HttpRequest) const +void OpenAPIPetApi::AddPetRequest::SetupHttpRequest(const FHttpRequestRef& HttpRequest) const { static const TArray Consumes = { TEXT("application/json"), TEXT("application/xml") }; //static const TArray Produces = { }; @@ -89,7 +89,7 @@ FString OpenAPIPetApi::DeletePetRequest::ComputePath() const return Path; } -void OpenAPIPetApi::DeletePetRequest::SetupHttpRequest(const TSharedRef& HttpRequest) const +void OpenAPIPetApi::DeletePetRequest::SetupHttpRequest(const FHttpRequestRef& HttpRequest) const { static const TArray Consumes = { }; //static const TArray Produces = { }; @@ -191,7 +191,7 @@ FString OpenAPIPetApi::FindPetsByStatusRequest::ComputePath() const return Path; } -void OpenAPIPetApi::FindPetsByStatusRequest::SetupHttpRequest(const TSharedRef& HttpRequest) const +void OpenAPIPetApi::FindPetsByStatusRequest::SetupHttpRequest(const FHttpRequestRef& HttpRequest) const { static const TArray Consumes = { }; //static const TArray Produces = { TEXT("application/xml"), TEXT("application/json") }; @@ -244,7 +244,7 @@ FString OpenAPIPetApi::FindPetsByTagsRequest::ComputePath() const return Path; } -void OpenAPIPetApi::FindPetsByTagsRequest::SetupHttpRequest(const TSharedRef& HttpRequest) const +void OpenAPIPetApi::FindPetsByTagsRequest::SetupHttpRequest(const FHttpRequestRef& HttpRequest) const { static const TArray Consumes = { }; //static const TArray Produces = { TEXT("application/xml"), TEXT("application/json") }; @@ -296,7 +296,7 @@ FString OpenAPIPetApi::GetPetByIdRequest::ComputePath() const return Path; } -void OpenAPIPetApi::GetPetByIdRequest::SetupHttpRequest(const TSharedRef& HttpRequest) const +void OpenAPIPetApi::GetPetByIdRequest::SetupHttpRequest(const FHttpRequestRef& HttpRequest) const { static const TArray Consumes = { }; //static const TArray Produces = { TEXT("application/xml"), TEXT("application/json") }; @@ -347,7 +347,7 @@ FString OpenAPIPetApi::UpdatePetRequest::ComputePath() const return Path; } -void OpenAPIPetApi::UpdatePetRequest::SetupHttpRequest(const TSharedRef& HttpRequest) const +void OpenAPIPetApi::UpdatePetRequest::SetupHttpRequest(const FHttpRequestRef& HttpRequest) const { static const TArray Consumes = { TEXT("application/json"), TEXT("application/xml") }; //static const TArray Produces = { }; @@ -413,7 +413,7 @@ FString OpenAPIPetApi::UpdatePetWithFormRequest::ComputePath() const return Path; } -void OpenAPIPetApi::UpdatePetWithFormRequest::SetupHttpRequest(const TSharedRef& HttpRequest) const +void OpenAPIPetApi::UpdatePetWithFormRequest::SetupHttpRequest(const FHttpRequestRef& HttpRequest) const { static const TArray Consumes = { TEXT("application/x-www-form-urlencoded") }; //static const TArray Produces = { }; @@ -487,7 +487,7 @@ FString OpenAPIPetApi::UploadFileRequest::ComputePath() const return Path; } -void OpenAPIPetApi::UploadFileRequest::SetupHttpRequest(const TSharedRef& HttpRequest) const +void OpenAPIPetApi::UploadFileRequest::SetupHttpRequest(const FHttpRequestRef& HttpRequest) const { static const TArray Consumes = { TEXT("multipart/form-data") }; //static const TArray Produces = { TEXT("application/json") }; diff --git a/samples/client/petstore/cpp-ue4/Private/OpenAPIStoreApi.cpp b/samples/client/petstore/cpp-ue4/Private/OpenAPIStoreApi.cpp index 293034324c4..32000a95907 100644 --- a/samples/client/petstore/cpp-ue4/Private/OpenAPIStoreApi.cpp +++ b/samples/client/petstore/cpp-ue4/Private/OpenAPIStoreApi.cpp @@ -103,7 +103,7 @@ bool OpenAPIStoreApi::DeleteOrder(const DeleteOrderRequest& Request, const FDele if (!IsValid()) return false; - TSharedRef HttpRequest = FHttpModule::Get().CreateRequest(); + FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest(); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) @@ -113,15 +113,26 @@ bool OpenAPIStoreApi::DeleteOrder(const DeleteOrderRequest& Request, const FDele Request.SetupHttpRequest(HttpRequest); - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIStoreApi::OnDeleteOrderResponse, Delegate); + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIStoreApi::OnDeleteOrderResponse, Delegate, Request.GetAutoRetryCount()); return HttpRequest->ProcessRequest(); } -void OpenAPIStoreApi::OnDeleteOrderResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FDeleteOrderDelegate Delegate) const +void OpenAPIStoreApi::OnDeleteOrderResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FDeleteOrderDelegate Delegate, int AutoRetryCount) const { DeleteOrderResponse Response; + Response.SetHttpRequest(HttpRequest); + HandleResponse(HttpResponse, bSucceeded, Response); - Delegate.ExecuteIfBound(Response); + + if(!Response.IsSuccessful() && AutoRetryCount > 0) + { + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIStoreApi::OnDeleteOrderResponse, Delegate, AutoRetryCount - 1); + Response.AsyncRetry(); + } + else + { + Delegate.ExecuteIfBound(Response); + } } bool OpenAPIStoreApi::GetInventory(const GetInventoryRequest& Request, const FGetInventoryDelegate& Delegate /*= FGetInventoryDelegate()*/) const @@ -129,7 +140,7 @@ bool OpenAPIStoreApi::GetInventory(const GetInventoryRequest& Request, const FGe if (!IsValid()) return false; - TSharedRef HttpRequest = FHttpModule::Get().CreateRequest(); + FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest(); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) @@ -139,15 +150,26 @@ bool OpenAPIStoreApi::GetInventory(const GetInventoryRequest& Request, const FGe Request.SetupHttpRequest(HttpRequest); - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIStoreApi::OnGetInventoryResponse, Delegate); + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIStoreApi::OnGetInventoryResponse, Delegate, Request.GetAutoRetryCount()); return HttpRequest->ProcessRequest(); } -void OpenAPIStoreApi::OnGetInventoryResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetInventoryDelegate Delegate) const +void OpenAPIStoreApi::OnGetInventoryResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetInventoryDelegate Delegate, int AutoRetryCount) const { GetInventoryResponse Response; + Response.SetHttpRequest(HttpRequest); + HandleResponse(HttpResponse, bSucceeded, Response); - Delegate.ExecuteIfBound(Response); + + if(!Response.IsSuccessful() && AutoRetryCount > 0) + { + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIStoreApi::OnGetInventoryResponse, Delegate, AutoRetryCount - 1); + Response.AsyncRetry(); + } + else + { + Delegate.ExecuteIfBound(Response); + } } bool OpenAPIStoreApi::GetOrderById(const GetOrderByIdRequest& Request, const FGetOrderByIdDelegate& Delegate /*= FGetOrderByIdDelegate()*/) const @@ -155,7 +177,7 @@ bool OpenAPIStoreApi::GetOrderById(const GetOrderByIdRequest& Request, const FGe if (!IsValid()) return false; - TSharedRef HttpRequest = FHttpModule::Get().CreateRequest(); + FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest(); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) @@ -165,15 +187,26 @@ bool OpenAPIStoreApi::GetOrderById(const GetOrderByIdRequest& Request, const FGe Request.SetupHttpRequest(HttpRequest); - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIStoreApi::OnGetOrderByIdResponse, Delegate); + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIStoreApi::OnGetOrderByIdResponse, Delegate, Request.GetAutoRetryCount()); return HttpRequest->ProcessRequest(); } -void OpenAPIStoreApi::OnGetOrderByIdResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetOrderByIdDelegate Delegate) const +void OpenAPIStoreApi::OnGetOrderByIdResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetOrderByIdDelegate Delegate, int AutoRetryCount) const { GetOrderByIdResponse Response; + Response.SetHttpRequest(HttpRequest); + HandleResponse(HttpResponse, bSucceeded, Response); - Delegate.ExecuteIfBound(Response); + + if(!Response.IsSuccessful() && AutoRetryCount > 0) + { + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIStoreApi::OnGetOrderByIdResponse, Delegate, AutoRetryCount - 1); + Response.AsyncRetry(); + } + else + { + Delegate.ExecuteIfBound(Response); + } } bool OpenAPIStoreApi::PlaceOrder(const PlaceOrderRequest& Request, const FPlaceOrderDelegate& Delegate /*= FPlaceOrderDelegate()*/) const @@ -181,7 +214,7 @@ bool OpenAPIStoreApi::PlaceOrder(const PlaceOrderRequest& Request, const FPlaceO if (!IsValid()) return false; - TSharedRef HttpRequest = FHttpModule::Get().CreateRequest(); + FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest(); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) @@ -191,15 +224,26 @@ bool OpenAPIStoreApi::PlaceOrder(const PlaceOrderRequest& Request, const FPlaceO Request.SetupHttpRequest(HttpRequest); - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIStoreApi::OnPlaceOrderResponse, Delegate); + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIStoreApi::OnPlaceOrderResponse, Delegate, Request.GetAutoRetryCount()); return HttpRequest->ProcessRequest(); } -void OpenAPIStoreApi::OnPlaceOrderResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FPlaceOrderDelegate Delegate) const +void OpenAPIStoreApi::OnPlaceOrderResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FPlaceOrderDelegate Delegate, int AutoRetryCount) const { PlaceOrderResponse Response; + Response.SetHttpRequest(HttpRequest); + HandleResponse(HttpResponse, bSucceeded, Response); - Delegate.ExecuteIfBound(Response); + + if(!Response.IsSuccessful() && AutoRetryCount > 0) + { + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIStoreApi::OnPlaceOrderResponse, Delegate, AutoRetryCount - 1); + Response.AsyncRetry(); + } + else + { + Delegate.ExecuteIfBound(Response); + } } } diff --git a/samples/client/petstore/cpp-ue4/Private/OpenAPIStoreApiOperations.cpp b/samples/client/petstore/cpp-ue4/Private/OpenAPIStoreApiOperations.cpp index 9f3c059d923..1c5efb37559 100644 --- a/samples/client/petstore/cpp-ue4/Private/OpenAPIStoreApiOperations.cpp +++ b/samples/client/petstore/cpp-ue4/Private/OpenAPIStoreApiOperations.cpp @@ -33,7 +33,7 @@ FString OpenAPIStoreApi::DeleteOrderRequest::ComputePath() const return Path; } -void OpenAPIStoreApi::DeleteOrderRequest::SetupHttpRequest(const TSharedRef& HttpRequest) const +void OpenAPIStoreApi::DeleteOrderRequest::SetupHttpRequest(const FHttpRequestRef& HttpRequest) const { static const TArray Consumes = { }; //static const TArray Produces = { }; @@ -81,7 +81,7 @@ FString OpenAPIStoreApi::GetInventoryRequest::ComputePath() const return Path; } -void OpenAPIStoreApi::GetInventoryRequest::SetupHttpRequest(const TSharedRef& HttpRequest) const +void OpenAPIStoreApi::GetInventoryRequest::SetupHttpRequest(const FHttpRequestRef& HttpRequest) const { static const TArray Consumes = { }; //static const TArray Produces = { TEXT("application/json") }; @@ -130,7 +130,7 @@ FString OpenAPIStoreApi::GetOrderByIdRequest::ComputePath() const return Path; } -void OpenAPIStoreApi::GetOrderByIdRequest::SetupHttpRequest(const TSharedRef& HttpRequest) const +void OpenAPIStoreApi::GetOrderByIdRequest::SetupHttpRequest(const FHttpRequestRef& HttpRequest) const { static const TArray Consumes = { }; //static const TArray Produces = { TEXT("application/xml"), TEXT("application/json") }; @@ -181,7 +181,7 @@ FString OpenAPIStoreApi::PlaceOrderRequest::ComputePath() const return Path; } -void OpenAPIStoreApi::PlaceOrderRequest::SetupHttpRequest(const TSharedRef& HttpRequest) const +void OpenAPIStoreApi::PlaceOrderRequest::SetupHttpRequest(const FHttpRequestRef& HttpRequest) const { static const TArray Consumes = { }; //static const TArray Produces = { TEXT("application/xml"), TEXT("application/json") }; diff --git a/samples/client/petstore/cpp-ue4/Private/OpenAPIUserApi.cpp b/samples/client/petstore/cpp-ue4/Private/OpenAPIUserApi.cpp index 68a6888c669..9fdd937b3b9 100644 --- a/samples/client/petstore/cpp-ue4/Private/OpenAPIUserApi.cpp +++ b/samples/client/petstore/cpp-ue4/Private/OpenAPIUserApi.cpp @@ -103,7 +103,7 @@ bool OpenAPIUserApi::CreateUser(const CreateUserRequest& Request, const FCreateU if (!IsValid()) return false; - TSharedRef HttpRequest = FHttpModule::Get().CreateRequest(); + FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest(); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) @@ -113,15 +113,26 @@ bool OpenAPIUserApi::CreateUser(const CreateUserRequest& Request, const FCreateU Request.SetupHttpRequest(HttpRequest); - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnCreateUserResponse, Delegate); + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnCreateUserResponse, Delegate, Request.GetAutoRetryCount()); return HttpRequest->ProcessRequest(); } -void OpenAPIUserApi::OnCreateUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FCreateUserDelegate Delegate) const +void OpenAPIUserApi::OnCreateUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FCreateUserDelegate Delegate, int AutoRetryCount) const { CreateUserResponse Response; + Response.SetHttpRequest(HttpRequest); + HandleResponse(HttpResponse, bSucceeded, Response); - Delegate.ExecuteIfBound(Response); + + if(!Response.IsSuccessful() && AutoRetryCount > 0) + { + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnCreateUserResponse, Delegate, AutoRetryCount - 1); + Response.AsyncRetry(); + } + else + { + Delegate.ExecuteIfBound(Response); + } } bool OpenAPIUserApi::CreateUsersWithArrayInput(const CreateUsersWithArrayInputRequest& Request, const FCreateUsersWithArrayInputDelegate& Delegate /*= FCreateUsersWithArrayInputDelegate()*/) const @@ -129,7 +140,7 @@ bool OpenAPIUserApi::CreateUsersWithArrayInput(const CreateUsersWithArrayInputRe if (!IsValid()) return false; - TSharedRef HttpRequest = FHttpModule::Get().CreateRequest(); + FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest(); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) @@ -139,15 +150,26 @@ bool OpenAPIUserApi::CreateUsersWithArrayInput(const CreateUsersWithArrayInputRe Request.SetupHttpRequest(HttpRequest); - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnCreateUsersWithArrayInputResponse, Delegate); + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnCreateUsersWithArrayInputResponse, Delegate, Request.GetAutoRetryCount()); return HttpRequest->ProcessRequest(); } -void OpenAPIUserApi::OnCreateUsersWithArrayInputResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FCreateUsersWithArrayInputDelegate Delegate) const +void OpenAPIUserApi::OnCreateUsersWithArrayInputResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FCreateUsersWithArrayInputDelegate Delegate, int AutoRetryCount) const { CreateUsersWithArrayInputResponse Response; + Response.SetHttpRequest(HttpRequest); + HandleResponse(HttpResponse, bSucceeded, Response); - Delegate.ExecuteIfBound(Response); + + if(!Response.IsSuccessful() && AutoRetryCount > 0) + { + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnCreateUsersWithArrayInputResponse, Delegate, AutoRetryCount - 1); + Response.AsyncRetry(); + } + else + { + Delegate.ExecuteIfBound(Response); + } } bool OpenAPIUserApi::CreateUsersWithListInput(const CreateUsersWithListInputRequest& Request, const FCreateUsersWithListInputDelegate& Delegate /*= FCreateUsersWithListInputDelegate()*/) const @@ -155,7 +177,7 @@ bool OpenAPIUserApi::CreateUsersWithListInput(const CreateUsersWithListInputRequ if (!IsValid()) return false; - TSharedRef HttpRequest = FHttpModule::Get().CreateRequest(); + FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest(); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) @@ -165,15 +187,26 @@ bool OpenAPIUserApi::CreateUsersWithListInput(const CreateUsersWithListInputRequ Request.SetupHttpRequest(HttpRequest); - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnCreateUsersWithListInputResponse, Delegate); + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnCreateUsersWithListInputResponse, Delegate, Request.GetAutoRetryCount()); return HttpRequest->ProcessRequest(); } -void OpenAPIUserApi::OnCreateUsersWithListInputResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FCreateUsersWithListInputDelegate Delegate) const +void OpenAPIUserApi::OnCreateUsersWithListInputResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FCreateUsersWithListInputDelegate Delegate, int AutoRetryCount) const { CreateUsersWithListInputResponse Response; + Response.SetHttpRequest(HttpRequest); + HandleResponse(HttpResponse, bSucceeded, Response); - Delegate.ExecuteIfBound(Response); + + if(!Response.IsSuccessful() && AutoRetryCount > 0) + { + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnCreateUsersWithListInputResponse, Delegate, AutoRetryCount - 1); + Response.AsyncRetry(); + } + else + { + Delegate.ExecuteIfBound(Response); + } } bool OpenAPIUserApi::DeleteUser(const DeleteUserRequest& Request, const FDeleteUserDelegate& Delegate /*= FDeleteUserDelegate()*/) const @@ -181,7 +214,7 @@ bool OpenAPIUserApi::DeleteUser(const DeleteUserRequest& Request, const FDeleteU if (!IsValid()) return false; - TSharedRef HttpRequest = FHttpModule::Get().CreateRequest(); + FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest(); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) @@ -191,15 +224,26 @@ bool OpenAPIUserApi::DeleteUser(const DeleteUserRequest& Request, const FDeleteU Request.SetupHttpRequest(HttpRequest); - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnDeleteUserResponse, Delegate); + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnDeleteUserResponse, Delegate, Request.GetAutoRetryCount()); return HttpRequest->ProcessRequest(); } -void OpenAPIUserApi::OnDeleteUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FDeleteUserDelegate Delegate) const +void OpenAPIUserApi::OnDeleteUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FDeleteUserDelegate Delegate, int AutoRetryCount) const { DeleteUserResponse Response; + Response.SetHttpRequest(HttpRequest); + HandleResponse(HttpResponse, bSucceeded, Response); - Delegate.ExecuteIfBound(Response); + + if(!Response.IsSuccessful() && AutoRetryCount > 0) + { + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnDeleteUserResponse, Delegate, AutoRetryCount - 1); + Response.AsyncRetry(); + } + else + { + Delegate.ExecuteIfBound(Response); + } } bool OpenAPIUserApi::GetUserByName(const GetUserByNameRequest& Request, const FGetUserByNameDelegate& Delegate /*= FGetUserByNameDelegate()*/) const @@ -207,7 +251,7 @@ bool OpenAPIUserApi::GetUserByName(const GetUserByNameRequest& Request, const FG if (!IsValid()) return false; - TSharedRef HttpRequest = FHttpModule::Get().CreateRequest(); + FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest(); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) @@ -217,15 +261,26 @@ bool OpenAPIUserApi::GetUserByName(const GetUserByNameRequest& Request, const FG Request.SetupHttpRequest(HttpRequest); - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnGetUserByNameResponse, Delegate); + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnGetUserByNameResponse, Delegate, Request.GetAutoRetryCount()); return HttpRequest->ProcessRequest(); } -void OpenAPIUserApi::OnGetUserByNameResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetUserByNameDelegate Delegate) const +void OpenAPIUserApi::OnGetUserByNameResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetUserByNameDelegate Delegate, int AutoRetryCount) const { GetUserByNameResponse Response; + Response.SetHttpRequest(HttpRequest); + HandleResponse(HttpResponse, bSucceeded, Response); - Delegate.ExecuteIfBound(Response); + + if(!Response.IsSuccessful() && AutoRetryCount > 0) + { + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnGetUserByNameResponse, Delegate, AutoRetryCount - 1); + Response.AsyncRetry(); + } + else + { + Delegate.ExecuteIfBound(Response); + } } bool OpenAPIUserApi::LoginUser(const LoginUserRequest& Request, const FLoginUserDelegate& Delegate /*= FLoginUserDelegate()*/) const @@ -233,7 +288,7 @@ bool OpenAPIUserApi::LoginUser(const LoginUserRequest& Request, const FLoginUser if (!IsValid()) return false; - TSharedRef HttpRequest = FHttpModule::Get().CreateRequest(); + FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest(); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) @@ -243,15 +298,26 @@ bool OpenAPIUserApi::LoginUser(const LoginUserRequest& Request, const FLoginUser Request.SetupHttpRequest(HttpRequest); - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnLoginUserResponse, Delegate); + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnLoginUserResponse, Delegate, Request.GetAutoRetryCount()); return HttpRequest->ProcessRequest(); } -void OpenAPIUserApi::OnLoginUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FLoginUserDelegate Delegate) const +void OpenAPIUserApi::OnLoginUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FLoginUserDelegate Delegate, int AutoRetryCount) const { LoginUserResponse Response; + Response.SetHttpRequest(HttpRequest); + HandleResponse(HttpResponse, bSucceeded, Response); - Delegate.ExecuteIfBound(Response); + + if(!Response.IsSuccessful() && AutoRetryCount > 0) + { + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnLoginUserResponse, Delegate, AutoRetryCount - 1); + Response.AsyncRetry(); + } + else + { + Delegate.ExecuteIfBound(Response); + } } bool OpenAPIUserApi::LogoutUser(const LogoutUserRequest& Request, const FLogoutUserDelegate& Delegate /*= FLogoutUserDelegate()*/) const @@ -259,7 +325,7 @@ bool OpenAPIUserApi::LogoutUser(const LogoutUserRequest& Request, const FLogoutU if (!IsValid()) return false; - TSharedRef HttpRequest = FHttpModule::Get().CreateRequest(); + FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest(); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) @@ -269,15 +335,26 @@ bool OpenAPIUserApi::LogoutUser(const LogoutUserRequest& Request, const FLogoutU Request.SetupHttpRequest(HttpRequest); - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnLogoutUserResponse, Delegate); + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnLogoutUserResponse, Delegate, Request.GetAutoRetryCount()); return HttpRequest->ProcessRequest(); } -void OpenAPIUserApi::OnLogoutUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FLogoutUserDelegate Delegate) const +void OpenAPIUserApi::OnLogoutUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FLogoutUserDelegate Delegate, int AutoRetryCount) const { LogoutUserResponse Response; + Response.SetHttpRequest(HttpRequest); + HandleResponse(HttpResponse, bSucceeded, Response); - Delegate.ExecuteIfBound(Response); + + if(!Response.IsSuccessful() && AutoRetryCount > 0) + { + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnLogoutUserResponse, Delegate, AutoRetryCount - 1); + Response.AsyncRetry(); + } + else + { + Delegate.ExecuteIfBound(Response); + } } bool OpenAPIUserApi::UpdateUser(const UpdateUserRequest& Request, const FUpdateUserDelegate& Delegate /*= FUpdateUserDelegate()*/) const @@ -285,7 +362,7 @@ bool OpenAPIUserApi::UpdateUser(const UpdateUserRequest& Request, const FUpdateU if (!IsValid()) return false; - TSharedRef HttpRequest = FHttpModule::Get().CreateRequest(); + FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest(); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) @@ -295,15 +372,26 @@ bool OpenAPIUserApi::UpdateUser(const UpdateUserRequest& Request, const FUpdateU Request.SetupHttpRequest(HttpRequest); - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnUpdateUserResponse, Delegate); + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnUpdateUserResponse, Delegate, Request.GetAutoRetryCount()); return HttpRequest->ProcessRequest(); } -void OpenAPIUserApi::OnUpdateUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUpdateUserDelegate Delegate) const +void OpenAPIUserApi::OnUpdateUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUpdateUserDelegate Delegate, int AutoRetryCount) const { UpdateUserResponse Response; + Response.SetHttpRequest(HttpRequest); + HandleResponse(HttpResponse, bSucceeded, Response); - Delegate.ExecuteIfBound(Response); + + if(!Response.IsSuccessful() && AutoRetryCount > 0) + { + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnUpdateUserResponse, Delegate, AutoRetryCount - 1); + Response.AsyncRetry(); + } + else + { + Delegate.ExecuteIfBound(Response); + } } } diff --git a/samples/client/petstore/cpp-ue4/Private/OpenAPIUserApiOperations.cpp b/samples/client/petstore/cpp-ue4/Private/OpenAPIUserApiOperations.cpp index 5a698d4fa5c..7352577a79e 100644 --- a/samples/client/petstore/cpp-ue4/Private/OpenAPIUserApiOperations.cpp +++ b/samples/client/petstore/cpp-ue4/Private/OpenAPIUserApiOperations.cpp @@ -29,7 +29,7 @@ FString OpenAPIUserApi::CreateUserRequest::ComputePath() const return Path; } -void OpenAPIUserApi::CreateUserRequest::SetupHttpRequest(const TSharedRef& HttpRequest) const +void OpenAPIUserApi::CreateUserRequest::SetupHttpRequest(const FHttpRequestRef& HttpRequest) const { static const TArray Consumes = { }; //static const TArray Produces = { }; @@ -86,7 +86,7 @@ FString OpenAPIUserApi::CreateUsersWithArrayInputRequest::ComputePath() const return Path; } -void OpenAPIUserApi::CreateUsersWithArrayInputRequest::SetupHttpRequest(const TSharedRef& HttpRequest) const +void OpenAPIUserApi::CreateUsersWithArrayInputRequest::SetupHttpRequest(const FHttpRequestRef& HttpRequest) const { static const TArray Consumes = { }; //static const TArray Produces = { }; @@ -143,7 +143,7 @@ FString OpenAPIUserApi::CreateUsersWithListInputRequest::ComputePath() const return Path; } -void OpenAPIUserApi::CreateUsersWithListInputRequest::SetupHttpRequest(const TSharedRef& HttpRequest) const +void OpenAPIUserApi::CreateUsersWithListInputRequest::SetupHttpRequest(const FHttpRequestRef& HttpRequest) const { static const TArray Consumes = { }; //static const TArray Produces = { }; @@ -204,7 +204,7 @@ FString OpenAPIUserApi::DeleteUserRequest::ComputePath() const return Path; } -void OpenAPIUserApi::DeleteUserRequest::SetupHttpRequest(const TSharedRef& HttpRequest) const +void OpenAPIUserApi::DeleteUserRequest::SetupHttpRequest(const FHttpRequestRef& HttpRequest) const { static const TArray Consumes = { }; //static const TArray Produces = { }; @@ -256,7 +256,7 @@ FString OpenAPIUserApi::GetUserByNameRequest::ComputePath() const return Path; } -void OpenAPIUserApi::GetUserByNameRequest::SetupHttpRequest(const TSharedRef& HttpRequest) const +void OpenAPIUserApi::GetUserByNameRequest::SetupHttpRequest(const FHttpRequestRef& HttpRequest) const { static const TArray Consumes = { }; //static const TArray Produces = { TEXT("application/xml"), TEXT("application/json") }; @@ -313,7 +313,7 @@ FString OpenAPIUserApi::LoginUserRequest::ComputePath() const return Path; } -void OpenAPIUserApi::LoginUserRequest::SetupHttpRequest(const TSharedRef& HttpRequest) const +void OpenAPIUserApi::LoginUserRequest::SetupHttpRequest(const FHttpRequestRef& HttpRequest) const { static const TArray Consumes = { }; //static const TArray Produces = { TEXT("application/xml"), TEXT("application/json") }; @@ -361,7 +361,7 @@ FString OpenAPIUserApi::LogoutUserRequest::ComputePath() const return Path; } -void OpenAPIUserApi::LogoutUserRequest::SetupHttpRequest(const TSharedRef& HttpRequest) const +void OpenAPIUserApi::LogoutUserRequest::SetupHttpRequest(const FHttpRequestRef& HttpRequest) const { static const TArray Consumes = { }; //static const TArray Produces = { }; @@ -411,7 +411,7 @@ FString OpenAPIUserApi::UpdateUserRequest::ComputePath() const return Path; } -void OpenAPIUserApi::UpdateUserRequest::SetupHttpRequest(const TSharedRef& HttpRequest) const +void OpenAPIUserApi::UpdateUserRequest::SetupHttpRequest(const FHttpRequestRef& HttpRequest) const { static const TArray Consumes = { }; //static const TArray Produces = { }; diff --git a/samples/client/petstore/cpp-ue4/Public/OpenAPIBaseModel.h b/samples/client/petstore/cpp-ue4/Public/OpenAPIBaseModel.h index defa1b49263..d73441e1326 100644 --- a/samples/client/petstore/cpp-ue4/Public/OpenAPIBaseModel.h +++ b/samples/client/petstore/cpp-ue4/Public/OpenAPIBaseModel.h @@ -34,8 +34,14 @@ class OPENAPI_API Request { public: virtual ~Request() {} - virtual void SetupHttpRequest(const TSharedRef& HttpRequest) const = 0; + virtual void SetupHttpRequest(const FHttpRequestRef& HttpRequest) const = 0; virtual FString ComputePath() const = 0; + + void SetAutoRetryCount(int InCount) { AutoRetryCount = InCount; } + int GetAutoRetryCount() const { return AutoRetryCount; } + +private: + int AutoRetryCount = 0; }; class OPENAPI_API Response @@ -47,6 +53,8 @@ public: void SetSuccessful(bool InSuccessful) { Successful = InSuccessful; } bool IsSuccessful() const { return Successful; } + void AsyncRetry() const; + virtual void SetHttpResponseCode(EHttpResponseCodes::Type InHttpResponseCode); EHttpResponseCodes::Type GetHttpResponseCode() const { return ResponseCode; } @@ -56,11 +64,15 @@ public: void SetHttpResponse(const FHttpResponsePtr& InHttpResponse) { HttpResponse = InHttpResponse; } const FHttpResponsePtr& GetHttpResponse() const { return HttpResponse; } + void SetHttpRequest(const FHttpRequestPtr& InHttpRequest) { HttpRequest = InHttpRequest; } + const FHttpRequestPtr& GetHttpRequest() const { return HttpRequest; } + private: bool Successful; EHttpResponseCodes::Type ResponseCode; FString ResponseString; FHttpResponsePtr HttpResponse; + FHttpRequestPtr HttpRequest; }; } diff --git a/samples/client/petstore/cpp-ue4/Public/OpenAPIHelpers.h b/samples/client/petstore/cpp-ue4/Public/OpenAPIHelpers.h index 74e9e079610..e4f58b19c66 100644 --- a/samples/client/petstore/cpp-ue4/Public/OpenAPIHelpers.h +++ b/samples/client/petstore/cpp-ue4/Public/OpenAPIHelpers.h @@ -31,8 +31,8 @@ typedef TSharedRef> JsonWriter; class OPENAPI_API HttpFileInput { public: - HttpFileInput(const TCHAR* InFilePath); - HttpFileInput(const FString& InFilePath); + explicit HttpFileInput(const TCHAR* InFilePath); + explicit HttpFileInput(const FString& InFilePath); // This will automatically set the content type if not already set void SetFilePath(const TCHAR* InFilePath); @@ -62,7 +62,7 @@ class HttpMultipartFormData { public: void SetBoundary(const TCHAR* InBoundary); - void SetupHttpRequest(const TSharedRef& HttpRequest); + void SetupHttpRequest(const FHttpRequestRef& HttpRequest); void AddStringPart(const TCHAR* Name, const TCHAR* Data); void AddJsonPart(const TCHAR* Name, const FString& JsonString); @@ -277,11 +277,15 @@ inline bool TryGetJsonValue(const TSharedPtr& JsonValue, FString& Va return false; } +OPENAPI_API bool ParseDateTime(const FString& DateTimeString, FDateTime& OutDateTime); + inline bool TryGetJsonValue(const TSharedPtr& JsonValue, FDateTime& Value) { FString TmpValue; if (JsonValue->TryGetString(TmpValue)) - return FDateTime::Parse(TmpValue, Value); + { + return ParseDateTime(TmpValue, Value); + } else return false; } diff --git a/samples/client/petstore/cpp-ue4/Public/OpenAPIPetApi.h b/samples/client/petstore/cpp-ue4/Public/OpenAPIPetApi.h index 60bc4426318..bde6403c491 100644 --- a/samples/client/petstore/cpp-ue4/Public/OpenAPIPetApi.h +++ b/samples/client/petstore/cpp-ue4/Public/OpenAPIPetApi.h @@ -63,15 +63,16 @@ public: bool UpdatePetWithForm(const UpdatePetWithFormRequest& Request, const FUpdatePetWithFormDelegate& Delegate = FUpdatePetWithFormDelegate()) const; bool UploadFile(const UploadFileRequest& Request, const FUploadFileDelegate& Delegate = FUploadFileDelegate()) const; + private: - void OnAddPetResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FAddPetDelegate Delegate) const; - void OnDeletePetResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FDeletePetDelegate Delegate) const; - void OnFindPetsByStatusResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FFindPetsByStatusDelegate Delegate) const; - void OnFindPetsByTagsResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FFindPetsByTagsDelegate Delegate) const; - void OnGetPetByIdResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetPetByIdDelegate Delegate) const; - void OnUpdatePetResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUpdatePetDelegate Delegate) const; - void OnUpdatePetWithFormResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUpdatePetWithFormDelegate Delegate) const; - void OnUploadFileResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUploadFileDelegate Delegate) const; + void OnAddPetResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FAddPetDelegate Delegate, int AutoRetryCount) const; + void OnDeletePetResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FDeletePetDelegate Delegate, int AutoRetryCount) const; + void OnFindPetsByStatusResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FFindPetsByStatusDelegate Delegate, int AutoRetryCount) const; + void OnFindPetsByTagsResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FFindPetsByTagsDelegate Delegate, int AutoRetryCount) const; + void OnGetPetByIdResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetPetByIdDelegate Delegate, int AutoRetryCount) const; + void OnUpdatePetResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUpdatePetDelegate Delegate, int AutoRetryCount) const; + void OnUpdatePetWithFormResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUpdatePetWithFormDelegate Delegate, int AutoRetryCount) const; + void OnUploadFileResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUploadFileDelegate Delegate, int AutoRetryCount) const; bool IsValid() const; void HandleResponse(FHttpResponsePtr HttpResponse, bool bSucceeded, Response& InOutResponse) const; diff --git a/samples/client/petstore/cpp-ue4/Public/OpenAPIPetApiOperations.h b/samples/client/petstore/cpp-ue4/Public/OpenAPIPetApiOperations.h index 5b5c2511869..370e3d5fb67 100644 --- a/samples/client/petstore/cpp-ue4/Public/OpenAPIPetApiOperations.h +++ b/samples/client/petstore/cpp-ue4/Public/OpenAPIPetApiOperations.h @@ -29,7 +29,7 @@ class OPENAPI_API OpenAPIPetApi::AddPetRequest : public Request { public: virtual ~AddPetRequest() {} - void SetupHttpRequest(const TSharedRef& HttpRequest) const final; + void SetupHttpRequest(const FHttpRequestRef& HttpRequest) const final; FString ComputePath() const final; /* Pet object that needs to be added to the store */ @@ -53,7 +53,7 @@ class OPENAPI_API OpenAPIPetApi::DeletePetRequest : public Request { public: virtual ~DeletePetRequest() {} - void SetupHttpRequest(const TSharedRef& HttpRequest) const final; + void SetupHttpRequest(const FHttpRequestRef& HttpRequest) const final; FString ComputePath() const final; /* Pet id to delete */ @@ -79,7 +79,7 @@ class OPENAPI_API OpenAPIPetApi::FindPetsByStatusRequest : public Request { public: virtual ~FindPetsByStatusRequest() {} - void SetupHttpRequest(const TSharedRef& HttpRequest) const final; + void SetupHttpRequest(const FHttpRequestRef& HttpRequest) const final; FString ComputePath() const final; enum class StatusEnum @@ -110,7 +110,7 @@ class OPENAPI_API OpenAPIPetApi::FindPetsByTagsRequest : public Request { public: virtual ~FindPetsByTagsRequest() {} - void SetupHttpRequest(const TSharedRef& HttpRequest) const final; + void SetupHttpRequest(const FHttpRequestRef& HttpRequest) const final; FString ComputePath() const final; /* Tags to filter by */ @@ -135,7 +135,7 @@ class OPENAPI_API OpenAPIPetApi::GetPetByIdRequest : public Request { public: virtual ~GetPetByIdRequest() {} - void SetupHttpRequest(const TSharedRef& HttpRequest) const final; + void SetupHttpRequest(const FHttpRequestRef& HttpRequest) const final; FString ComputePath() const final; /* ID of pet to return */ @@ -159,7 +159,7 @@ class OPENAPI_API OpenAPIPetApi::UpdatePetRequest : public Request { public: virtual ~UpdatePetRequest() {} - void SetupHttpRequest(const TSharedRef& HttpRequest) const final; + void SetupHttpRequest(const FHttpRequestRef& HttpRequest) const final; FString ComputePath() const final; /* Pet object that needs to be added to the store */ @@ -183,7 +183,7 @@ class OPENAPI_API OpenAPIPetApi::UpdatePetWithFormRequest : public Request { public: virtual ~UpdatePetWithFormRequest() {} - void SetupHttpRequest(const TSharedRef& HttpRequest) const final; + void SetupHttpRequest(const FHttpRequestRef& HttpRequest) const final; FString ComputePath() const final; /* ID of pet that needs to be updated */ @@ -211,7 +211,7 @@ class OPENAPI_API OpenAPIPetApi::UploadFileRequest : public Request { public: virtual ~UploadFileRequest() {} - void SetupHttpRequest(const TSharedRef& HttpRequest) const final; + void SetupHttpRequest(const FHttpRequestRef& HttpRequest) const final; FString ComputePath() const final; /* ID of pet to update */ diff --git a/samples/client/petstore/cpp-ue4/Public/OpenAPIStoreApi.h b/samples/client/petstore/cpp-ue4/Public/OpenAPIStoreApi.h index 741e22fed8e..5f537732732 100644 --- a/samples/client/petstore/cpp-ue4/Public/OpenAPIStoreApi.h +++ b/samples/client/petstore/cpp-ue4/Public/OpenAPIStoreApi.h @@ -47,11 +47,12 @@ public: bool GetOrderById(const GetOrderByIdRequest& Request, const FGetOrderByIdDelegate& Delegate = FGetOrderByIdDelegate()) const; bool PlaceOrder(const PlaceOrderRequest& Request, const FPlaceOrderDelegate& Delegate = FPlaceOrderDelegate()) const; + private: - void OnDeleteOrderResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FDeleteOrderDelegate Delegate) const; - void OnGetInventoryResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetInventoryDelegate Delegate) const; - void OnGetOrderByIdResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetOrderByIdDelegate Delegate) const; - void OnPlaceOrderResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FPlaceOrderDelegate Delegate) const; + void OnDeleteOrderResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FDeleteOrderDelegate Delegate, int AutoRetryCount) const; + void OnGetInventoryResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetInventoryDelegate Delegate, int AutoRetryCount) const; + void OnGetOrderByIdResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetOrderByIdDelegate Delegate, int AutoRetryCount) const; + void OnPlaceOrderResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FPlaceOrderDelegate Delegate, int AutoRetryCount) const; bool IsValid() const; void HandleResponse(FHttpResponsePtr HttpResponse, bool bSucceeded, Response& InOutResponse) const; diff --git a/samples/client/petstore/cpp-ue4/Public/OpenAPIStoreApiOperations.h b/samples/client/petstore/cpp-ue4/Public/OpenAPIStoreApiOperations.h index 84a4fd6cf0e..ef7d6653663 100644 --- a/samples/client/petstore/cpp-ue4/Public/OpenAPIStoreApiOperations.h +++ b/samples/client/petstore/cpp-ue4/Public/OpenAPIStoreApiOperations.h @@ -28,7 +28,7 @@ class OPENAPI_API OpenAPIStoreApi::DeleteOrderRequest : public Request { public: virtual ~DeleteOrderRequest() {} - void SetupHttpRequest(const TSharedRef& HttpRequest) const final; + void SetupHttpRequest(const FHttpRequestRef& HttpRequest) const final; FString ComputePath() const final; /* ID of the order that needs to be deleted */ @@ -53,7 +53,7 @@ class OPENAPI_API OpenAPIStoreApi::GetInventoryRequest : public Request { public: virtual ~GetInventoryRequest() {} - void SetupHttpRequest(const TSharedRef& HttpRequest) const final; + void SetupHttpRequest(const FHttpRequestRef& HttpRequest) const final; FString ComputePath() const final; }; @@ -76,7 +76,7 @@ class OPENAPI_API OpenAPIStoreApi::GetOrderByIdRequest : public Request { public: virtual ~GetOrderByIdRequest() {} - void SetupHttpRequest(const TSharedRef& HttpRequest) const final; + void SetupHttpRequest(const FHttpRequestRef& HttpRequest) const final; FString ComputePath() const final; /* ID of pet that needs to be fetched */ @@ -100,7 +100,7 @@ class OPENAPI_API OpenAPIStoreApi::PlaceOrderRequest : public Request { public: virtual ~PlaceOrderRequest() {} - void SetupHttpRequest(const TSharedRef& HttpRequest) const final; + void SetupHttpRequest(const FHttpRequestRef& HttpRequest) const final; FString ComputePath() const final; /* order placed for purchasing the pet */ diff --git a/samples/client/petstore/cpp-ue4/Public/OpenAPIUserApi.h b/samples/client/petstore/cpp-ue4/Public/OpenAPIUserApi.h index 8ac3cdd7855..e60ce675403 100644 --- a/samples/client/petstore/cpp-ue4/Public/OpenAPIUserApi.h +++ b/samples/client/petstore/cpp-ue4/Public/OpenAPIUserApi.h @@ -63,15 +63,16 @@ public: bool LogoutUser(const LogoutUserRequest& Request, const FLogoutUserDelegate& Delegate = FLogoutUserDelegate()) const; bool UpdateUser(const UpdateUserRequest& Request, const FUpdateUserDelegate& Delegate = FUpdateUserDelegate()) const; + private: - void OnCreateUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FCreateUserDelegate Delegate) const; - void OnCreateUsersWithArrayInputResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FCreateUsersWithArrayInputDelegate Delegate) const; - void OnCreateUsersWithListInputResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FCreateUsersWithListInputDelegate Delegate) const; - void OnDeleteUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FDeleteUserDelegate Delegate) const; - void OnGetUserByNameResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetUserByNameDelegate Delegate) const; - void OnLoginUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FLoginUserDelegate Delegate) const; - void OnLogoutUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FLogoutUserDelegate Delegate) const; - void OnUpdateUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUpdateUserDelegate Delegate) const; + void OnCreateUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FCreateUserDelegate Delegate, int AutoRetryCount) const; + void OnCreateUsersWithArrayInputResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FCreateUsersWithArrayInputDelegate Delegate, int AutoRetryCount) const; + void OnCreateUsersWithListInputResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FCreateUsersWithListInputDelegate Delegate, int AutoRetryCount) const; + void OnDeleteUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FDeleteUserDelegate Delegate, int AutoRetryCount) const; + void OnGetUserByNameResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetUserByNameDelegate Delegate, int AutoRetryCount) const; + void OnLoginUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FLoginUserDelegate Delegate, int AutoRetryCount) const; + void OnLogoutUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FLogoutUserDelegate Delegate, int AutoRetryCount) const; + void OnUpdateUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUpdateUserDelegate Delegate, int AutoRetryCount) const; bool IsValid() const; void HandleResponse(FHttpResponsePtr HttpResponse, bool bSucceeded, Response& InOutResponse) const; diff --git a/samples/client/petstore/cpp-ue4/Public/OpenAPIUserApiOperations.h b/samples/client/petstore/cpp-ue4/Public/OpenAPIUserApiOperations.h index 8c287474ed3..7c08074dc57 100644 --- a/samples/client/petstore/cpp-ue4/Public/OpenAPIUserApiOperations.h +++ b/samples/client/petstore/cpp-ue4/Public/OpenAPIUserApiOperations.h @@ -28,7 +28,7 @@ class OPENAPI_API OpenAPIUserApi::CreateUserRequest : public Request { public: virtual ~CreateUserRequest() {} - void SetupHttpRequest(const TSharedRef& HttpRequest) const final; + void SetupHttpRequest(const FHttpRequestRef& HttpRequest) const final; FString ComputePath() const final; /* Created user object */ @@ -52,7 +52,7 @@ class OPENAPI_API OpenAPIUserApi::CreateUsersWithArrayInputRequest : public Requ { public: virtual ~CreateUsersWithArrayInputRequest() {} - void SetupHttpRequest(const TSharedRef& HttpRequest) const final; + void SetupHttpRequest(const FHttpRequestRef& HttpRequest) const final; FString ComputePath() const final; /* List of user object */ @@ -76,7 +76,7 @@ class OPENAPI_API OpenAPIUserApi::CreateUsersWithListInputRequest : public Reque { public: virtual ~CreateUsersWithListInputRequest() {} - void SetupHttpRequest(const TSharedRef& HttpRequest) const final; + void SetupHttpRequest(const FHttpRequestRef& HttpRequest) const final; FString ComputePath() const final; /* List of user object */ @@ -101,7 +101,7 @@ class OPENAPI_API OpenAPIUserApi::DeleteUserRequest : public Request { public: virtual ~DeleteUserRequest() {} - void SetupHttpRequest(const TSharedRef& HttpRequest) const final; + void SetupHttpRequest(const FHttpRequestRef& HttpRequest) const final; FString ComputePath() const final; /* The name that needs to be deleted */ @@ -125,7 +125,7 @@ class OPENAPI_API OpenAPIUserApi::GetUserByNameRequest : public Request { public: virtual ~GetUserByNameRequest() {} - void SetupHttpRequest(const TSharedRef& HttpRequest) const final; + void SetupHttpRequest(const FHttpRequestRef& HttpRequest) const final; FString ComputePath() const final; /* The name that needs to be fetched. Use user1 for testing. */ @@ -149,7 +149,7 @@ class OPENAPI_API OpenAPIUserApi::LoginUserRequest : public Request { public: virtual ~LoginUserRequest() {} - void SetupHttpRequest(const TSharedRef& HttpRequest) const final; + void SetupHttpRequest(const FHttpRequestRef& HttpRequest) const final; FString ComputePath() const final; /* The user name for login */ @@ -175,7 +175,7 @@ class OPENAPI_API OpenAPIUserApi::LogoutUserRequest : public Request { public: virtual ~LogoutUserRequest() {} - void SetupHttpRequest(const TSharedRef& HttpRequest) const final; + void SetupHttpRequest(const FHttpRequestRef& HttpRequest) const final; FString ComputePath() const final; }; @@ -198,7 +198,7 @@ class OPENAPI_API OpenAPIUserApi::UpdateUserRequest : public Request { public: virtual ~UpdateUserRequest() {} - void SetupHttpRequest(const TSharedRef& HttpRequest) const final; + void SetupHttpRequest(const FHttpRequestRef& HttpRequest) const final; FString ComputePath() const final; /* name that need to be deleted */