Skip to content

Commit

Permalink
Added retry for API requests with time-out error (#60)
Browse files Browse the repository at this point in the history
  • Loading branch information
timbaev authored Jun 28, 2024
1 parent 911888b commit fae91aa
Showing 1 changed file with 21 additions and 6 deletions.
27 changes: 21 additions & 6 deletions Sources/AnalyticsGenTools/HTTPService/HTTPServiceTask.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ public final class HTTPServiceTask<SessionTask: URLSessionTask>: HTTPTask {
// MARK: - Instance Properties

private var responseQueue: OperationQueue
private var numberOfRetries = 3

// MARK: -

Expand Down Expand Up @@ -213,7 +214,14 @@ extension HTTPServiceTask where SessionTask == URLSessionDataTask {
internal func launch() -> Self {
do {
sessionTask = session.dataTask(with: try route.asRequest()) { data, response, error in
self.handleResponse(response, data: data, error: error)
if let urlError = error as? URLError, urlError.code == .timedOut, self.numberOfRetries > .zero {
Log.info("Got TimeOut error. Retry \(self.numberOfRetries) time(s)...")

self.numberOfRetries -= 1
self.launch()
} else {
self.handleResponse(response, data: data, error: error)
}
}

sessionTask?.resume()
Expand All @@ -233,11 +241,18 @@ extension HTTPServiceTask where SessionTask == URLSessionDownloadTask {
internal func launch() -> Self {
do {
sessionTask = session.downloadTask(with: try route.asRequest()) { url, response, error in
self.handleResponse(
response,
data: url.flatMap { try? Data(contentsOf: $0) },
error: error
)
if let urlError = error as? URLError, urlError.code == .timedOut, self.numberOfRetries > .zero {
Log.info("Got TimeOut error. Retry \(self.numberOfRetries) time(s)...")

self.numberOfRetries -= 1
self.launch()
} else {
self.handleResponse(
response,
data: url.flatMap { try? Data(contentsOf: $0) },
error: error
)
}
}

sessionTask?.resume()
Expand Down

0 comments on commit fae91aa

Please sign in to comment.