Skip to content

Commit

Permalink
Added support for customizing retry logic
Browse files Browse the repository at this point in the history
Can now set whether or not automatic retries are attempted on request failure and how many retries to attempt
  • Loading branch information
ecrichlow committed Dec 18, 2024
1 parent 32cb5db commit e310a9a
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 2 deletions.
39 changes: 39 additions & 0 deletions Source/IoGInfrastructure/Managers/RemoteData/IoGDataManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
* 09/27/18 * EGC * File creation date
* 02/16/22 * EGC * Added support for custom request type
* 06/19/22 * EGC * Added DocC support
* 12/17/24 * EGC * Added support for customizing retry logic
********************************************************************************
*/

Expand Down Expand Up @@ -121,6 +122,16 @@ public class IoGDataManager
case Comment
case Rating
case Search
case Info
case Validate
case Flight
case Seat
case Date
case Token
case Authenticate
case Authorization
case Permissions
case Secret
}

/// Returns the shared Data Manager instance.
Expand All @@ -129,6 +140,8 @@ public class IoGDataManager
var delegateList = NSPointerArray.weakObjects()
var outstandingRequests = [Int: IoGDataRequestResponse]()
var requestID = 0
var retryOnFailure = true
var numAutoRetries = IoGConfigurationManager.defaultRequestNumRetries

// MARK: Class Methods

Expand Down Expand Up @@ -218,6 +231,32 @@ public class IoGDataManager
}
}

/// Sets whether or not to automatically retry on failed requests
/// - Parameters:
/// - retry: whether or not to attempt automatic retries
public func setRetryOnFailure(retry: Bool)
{
retryOnFailure = retry
}

func getRetryOnFailure() -> Bool
{
return retryOnFailure
}

/// Sets the number of retries to automatically attempt on request failure
/// - Parameters:
/// - retries: the number of times to automatically retry a failed attempt
public func setNumberOfRetries(retries: Int)
{
numAutoRetries = retries
}

func getNumberofRetries() -> Int
{
return numAutoRetries
}

@discardableResult public func transmitRequest(request: URLRequest, type: IoGDataRequestType) -> Int
{
return 0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
* 11/19/18 * EGC * File creation date
* 02/16/22 * EGC * Added support for multiple API URLs
* 06/19/22 * EGC * Added DocC support
* 12/17/24 * EGC * Added support for customizing retry logic
********************************************************************************
*/

Expand Down Expand Up @@ -48,7 +49,7 @@ public class IoGLiveDataRequestResponse : IoGDataRequestResponse, URLSessionDele
{
timer in
self.retryNumber += 1
if self.retryNumber <= IoGConfigurationManager.defaultRequestNumRetries
if IoGDataManager.dataManagerOfDefaultType().getRetryOnFailure() && self.retryNumber <= IoGDataManager.dataManagerOfDefaultType().getNumberofRetries()
{
self.processRequest()
}
Expand Down Expand Up @@ -89,7 +90,7 @@ public class IoGLiveDataRequestResponse : IoGDataRequestResponse, URLSessionDele
{
timer in
self.retryNumber += 1
if self.retryNumber <= IoGConfigurationManager.defaultRequestNumRetries
if IoGDataManager.dataManagerOfDefaultType().getRetryOnFailure() && self.retryNumber <= IoGDataManager.dataManagerOfDefaultType().getNumberofRetries()
{
self.continueMultiPartRequest()
}
Expand Down

0 comments on commit e310a9a

Please sign in to comment.