forked from loafle/openapi-generator-original
[swift5] URLSession: Fix memory leak of SessionDelegate (#8558)
* Remove unused stored reference of delegate. URLSession keeps a strong reference anyway. * Fix cleanup * Update samples
This commit is contained in:
parent
2553d056dc
commit
64f5dc8077
@ -24,9 +24,6 @@ private var urlSessionStore = SynchronizedDictionary<String, URLSession>()
|
|||||||
|
|
||||||
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}open{{/nonPublicApi}} class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}open{{/nonPublicApi}} class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||||
|
|
||||||
// swiftlint:disable:next weak_delegate
|
|
||||||
fileprivate let sessionDelegate = SessionDelegate()
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
May be assigned if you want to control the authentication challenges.
|
May be assigned if you want to control the authentication challenges.
|
||||||
*/
|
*/
|
||||||
@ -52,6 +49,7 @@ private var urlSessionStore = SynchronizedDictionary<String, URLSession>()
|
|||||||
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}open{{/nonPublicApi}} func createURLSession() -> URLSession {
|
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}open{{/nonPublicApi}} func createURLSession() -> URLSession {
|
||||||
let configuration = URLSessionConfiguration.default
|
let configuration = URLSessionConfiguration.default
|
||||||
configuration.httpAdditionalHeaders = buildHeaders()
|
configuration.httpAdditionalHeaders = buildHeaders()
|
||||||
|
let sessionDelegate = SessionDelegate()
|
||||||
sessionDelegate.credential = credential
|
sessionDelegate.credential = credential
|
||||||
sessionDelegate.taskDidReceiveChallenge = taskDidReceiveChallenge
|
sessionDelegate.taskDidReceiveChallenge = taskDidReceiveChallenge
|
||||||
return URLSession(configuration: configuration, delegate: sessionDelegate, delegateQueue: nil)
|
return URLSession(configuration: configuration, delegate: sessionDelegate, delegateQueue: nil)
|
||||||
@ -126,6 +124,7 @@ private var urlSessionStore = SynchronizedDictionary<String, URLSession>()
|
|||||||
}
|
}
|
||||||
|
|
||||||
let cleanupRequest = {
|
let cleanupRequest = {
|
||||||
|
urlSessionStore[urlSessionId]?.finishTasksAndInvalidate()
|
||||||
urlSessionStore[urlSessionId] = nil
|
urlSessionStore[urlSessionId] = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -144,12 +143,14 @@ private var urlSessionStore = SynchronizedDictionary<String, URLSession>()
|
|||||||
} else {
|
} else {
|
||||||
apiResponseQueue.async {
|
apiResponseQueue.async {
|
||||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||||
|
cleanupRequest()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
apiResponseQueue.async {
|
apiResponseQueue.async {
|
||||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||||
|
cleanupRequest()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,9 +24,6 @@ private var urlSessionStore = SynchronizedDictionary<String, URLSession>()
|
|||||||
|
|
||||||
open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||||
|
|
||||||
// swiftlint:disable:next weak_delegate
|
|
||||||
fileprivate let sessionDelegate = SessionDelegate()
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
May be assigned if you want to control the authentication challenges.
|
May be assigned if you want to control the authentication challenges.
|
||||||
*/
|
*/
|
||||||
@ -52,6 +49,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
|||||||
open func createURLSession() -> URLSession {
|
open func createURLSession() -> URLSession {
|
||||||
let configuration = URLSessionConfiguration.default
|
let configuration = URLSessionConfiguration.default
|
||||||
configuration.httpAdditionalHeaders = buildHeaders()
|
configuration.httpAdditionalHeaders = buildHeaders()
|
||||||
|
let sessionDelegate = SessionDelegate()
|
||||||
sessionDelegate.credential = credential
|
sessionDelegate.credential = credential
|
||||||
sessionDelegate.taskDidReceiveChallenge = taskDidReceiveChallenge
|
sessionDelegate.taskDidReceiveChallenge = taskDidReceiveChallenge
|
||||||
return URLSession(configuration: configuration, delegate: sessionDelegate, delegateQueue: nil)
|
return URLSession(configuration: configuration, delegate: sessionDelegate, delegateQueue: nil)
|
||||||
@ -126,6 +124,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let cleanupRequest = {
|
let cleanupRequest = {
|
||||||
|
urlSessionStore[urlSessionId]?.finishTasksAndInvalidate()
|
||||||
urlSessionStore[urlSessionId] = nil
|
urlSessionStore[urlSessionId] = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -144,12 +143,14 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
|||||||
} else {
|
} else {
|
||||||
apiResponseQueue.async {
|
apiResponseQueue.async {
|
||||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||||
|
cleanupRequest()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
apiResponseQueue.async {
|
apiResponseQueue.async {
|
||||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||||
|
cleanupRequest()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,9 +24,6 @@ private var urlSessionStore = SynchronizedDictionary<String, URLSession>()
|
|||||||
|
|
||||||
open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||||
|
|
||||||
// swiftlint:disable:next weak_delegate
|
|
||||||
fileprivate let sessionDelegate = SessionDelegate()
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
May be assigned if you want to control the authentication challenges.
|
May be assigned if you want to control the authentication challenges.
|
||||||
*/
|
*/
|
||||||
@ -52,6 +49,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
|||||||
open func createURLSession() -> URLSession {
|
open func createURLSession() -> URLSession {
|
||||||
let configuration = URLSessionConfiguration.default
|
let configuration = URLSessionConfiguration.default
|
||||||
configuration.httpAdditionalHeaders = buildHeaders()
|
configuration.httpAdditionalHeaders = buildHeaders()
|
||||||
|
let sessionDelegate = SessionDelegate()
|
||||||
sessionDelegate.credential = credential
|
sessionDelegate.credential = credential
|
||||||
sessionDelegate.taskDidReceiveChallenge = taskDidReceiveChallenge
|
sessionDelegate.taskDidReceiveChallenge = taskDidReceiveChallenge
|
||||||
return URLSession(configuration: configuration, delegate: sessionDelegate, delegateQueue: nil)
|
return URLSession(configuration: configuration, delegate: sessionDelegate, delegateQueue: nil)
|
||||||
@ -126,6 +124,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let cleanupRequest = {
|
let cleanupRequest = {
|
||||||
|
urlSessionStore[urlSessionId]?.finishTasksAndInvalidate()
|
||||||
urlSessionStore[urlSessionId] = nil
|
urlSessionStore[urlSessionId] = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -144,12 +143,14 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
|||||||
} else {
|
} else {
|
||||||
apiResponseQueue.async {
|
apiResponseQueue.async {
|
||||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||||
|
cleanupRequest()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
apiResponseQueue.async {
|
apiResponseQueue.async {
|
||||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||||
|
cleanupRequest()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,9 +24,6 @@ private var urlSessionStore = SynchronizedDictionary<String, URLSession>()
|
|||||||
|
|
||||||
open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||||
|
|
||||||
// swiftlint:disable:next weak_delegate
|
|
||||||
fileprivate let sessionDelegate = SessionDelegate()
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
May be assigned if you want to control the authentication challenges.
|
May be assigned if you want to control the authentication challenges.
|
||||||
*/
|
*/
|
||||||
@ -52,6 +49,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
|||||||
open func createURLSession() -> URLSession {
|
open func createURLSession() -> URLSession {
|
||||||
let configuration = URLSessionConfiguration.default
|
let configuration = URLSessionConfiguration.default
|
||||||
configuration.httpAdditionalHeaders = buildHeaders()
|
configuration.httpAdditionalHeaders = buildHeaders()
|
||||||
|
let sessionDelegate = SessionDelegate()
|
||||||
sessionDelegate.credential = credential
|
sessionDelegate.credential = credential
|
||||||
sessionDelegate.taskDidReceiveChallenge = taskDidReceiveChallenge
|
sessionDelegate.taskDidReceiveChallenge = taskDidReceiveChallenge
|
||||||
return URLSession(configuration: configuration, delegate: sessionDelegate, delegateQueue: nil)
|
return URLSession(configuration: configuration, delegate: sessionDelegate, delegateQueue: nil)
|
||||||
@ -126,6 +124,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let cleanupRequest = {
|
let cleanupRequest = {
|
||||||
|
urlSessionStore[urlSessionId]?.finishTasksAndInvalidate()
|
||||||
urlSessionStore[urlSessionId] = nil
|
urlSessionStore[urlSessionId] = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -144,12 +143,14 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
|||||||
} else {
|
} else {
|
||||||
apiResponseQueue.async {
|
apiResponseQueue.async {
|
||||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||||
|
cleanupRequest()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
apiResponseQueue.async {
|
apiResponseQueue.async {
|
||||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||||
|
cleanupRequest()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,9 +24,6 @@ private var urlSessionStore = SynchronizedDictionary<String, URLSession>()
|
|||||||
|
|
||||||
internal class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
internal class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||||
|
|
||||||
// swiftlint:disable:next weak_delegate
|
|
||||||
fileprivate let sessionDelegate = SessionDelegate()
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
May be assigned if you want to control the authentication challenges.
|
May be assigned if you want to control the authentication challenges.
|
||||||
*/
|
*/
|
||||||
@ -52,6 +49,7 @@ internal class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
|||||||
internal func createURLSession() -> URLSession {
|
internal func createURLSession() -> URLSession {
|
||||||
let configuration = URLSessionConfiguration.default
|
let configuration = URLSessionConfiguration.default
|
||||||
configuration.httpAdditionalHeaders = buildHeaders()
|
configuration.httpAdditionalHeaders = buildHeaders()
|
||||||
|
let sessionDelegate = SessionDelegate()
|
||||||
sessionDelegate.credential = credential
|
sessionDelegate.credential = credential
|
||||||
sessionDelegate.taskDidReceiveChallenge = taskDidReceiveChallenge
|
sessionDelegate.taskDidReceiveChallenge = taskDidReceiveChallenge
|
||||||
return URLSession(configuration: configuration, delegate: sessionDelegate, delegateQueue: nil)
|
return URLSession(configuration: configuration, delegate: sessionDelegate, delegateQueue: nil)
|
||||||
@ -126,6 +124,7 @@ internal class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let cleanupRequest = {
|
let cleanupRequest = {
|
||||||
|
urlSessionStore[urlSessionId]?.finishTasksAndInvalidate()
|
||||||
urlSessionStore[urlSessionId] = nil
|
urlSessionStore[urlSessionId] = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -144,12 +143,14 @@ internal class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
|||||||
} else {
|
} else {
|
||||||
apiResponseQueue.async {
|
apiResponseQueue.async {
|
||||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||||
|
cleanupRequest()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
apiResponseQueue.async {
|
apiResponseQueue.async {
|
||||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||||
|
cleanupRequest()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,9 +24,6 @@ private var urlSessionStore = SynchronizedDictionary<String, URLSession>()
|
|||||||
|
|
||||||
open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||||
|
|
||||||
// swiftlint:disable:next weak_delegate
|
|
||||||
fileprivate let sessionDelegate = SessionDelegate()
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
May be assigned if you want to control the authentication challenges.
|
May be assigned if you want to control the authentication challenges.
|
||||||
*/
|
*/
|
||||||
@ -52,6 +49,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
|||||||
open func createURLSession() -> URLSession {
|
open func createURLSession() -> URLSession {
|
||||||
let configuration = URLSessionConfiguration.default
|
let configuration = URLSessionConfiguration.default
|
||||||
configuration.httpAdditionalHeaders = buildHeaders()
|
configuration.httpAdditionalHeaders = buildHeaders()
|
||||||
|
let sessionDelegate = SessionDelegate()
|
||||||
sessionDelegate.credential = credential
|
sessionDelegate.credential = credential
|
||||||
sessionDelegate.taskDidReceiveChallenge = taskDidReceiveChallenge
|
sessionDelegate.taskDidReceiveChallenge = taskDidReceiveChallenge
|
||||||
return URLSession(configuration: configuration, delegate: sessionDelegate, delegateQueue: nil)
|
return URLSession(configuration: configuration, delegate: sessionDelegate, delegateQueue: nil)
|
||||||
@ -126,6 +124,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let cleanupRequest = {
|
let cleanupRequest = {
|
||||||
|
urlSessionStore[urlSessionId]?.finishTasksAndInvalidate()
|
||||||
urlSessionStore[urlSessionId] = nil
|
urlSessionStore[urlSessionId] = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -144,12 +143,14 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
|||||||
} else {
|
} else {
|
||||||
apiResponseQueue.async {
|
apiResponseQueue.async {
|
||||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||||
|
cleanupRequest()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
apiResponseQueue.async {
|
apiResponseQueue.async {
|
||||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||||
|
cleanupRequest()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,9 +24,6 @@ private var urlSessionStore = SynchronizedDictionary<String, URLSession>()
|
|||||||
|
|
||||||
open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||||
|
|
||||||
// swiftlint:disable:next weak_delegate
|
|
||||||
fileprivate let sessionDelegate = SessionDelegate()
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
May be assigned if you want to control the authentication challenges.
|
May be assigned if you want to control the authentication challenges.
|
||||||
*/
|
*/
|
||||||
@ -52,6 +49,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
|||||||
open func createURLSession() -> URLSession {
|
open func createURLSession() -> URLSession {
|
||||||
let configuration = URLSessionConfiguration.default
|
let configuration = URLSessionConfiguration.default
|
||||||
configuration.httpAdditionalHeaders = buildHeaders()
|
configuration.httpAdditionalHeaders = buildHeaders()
|
||||||
|
let sessionDelegate = SessionDelegate()
|
||||||
sessionDelegate.credential = credential
|
sessionDelegate.credential = credential
|
||||||
sessionDelegate.taskDidReceiveChallenge = taskDidReceiveChallenge
|
sessionDelegate.taskDidReceiveChallenge = taskDidReceiveChallenge
|
||||||
return URLSession(configuration: configuration, delegate: sessionDelegate, delegateQueue: nil)
|
return URLSession(configuration: configuration, delegate: sessionDelegate, delegateQueue: nil)
|
||||||
@ -126,6 +124,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let cleanupRequest = {
|
let cleanupRequest = {
|
||||||
|
urlSessionStore[urlSessionId]?.finishTasksAndInvalidate()
|
||||||
urlSessionStore[urlSessionId] = nil
|
urlSessionStore[urlSessionId] = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -144,12 +143,14 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
|||||||
} else {
|
} else {
|
||||||
apiResponseQueue.async {
|
apiResponseQueue.async {
|
||||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||||
|
cleanupRequest()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
apiResponseQueue.async {
|
apiResponseQueue.async {
|
||||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||||
|
cleanupRequest()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,9 +24,6 @@ private var urlSessionStore = SynchronizedDictionary<String, URLSession>()
|
|||||||
|
|
||||||
open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||||
|
|
||||||
// swiftlint:disable:next weak_delegate
|
|
||||||
fileprivate let sessionDelegate = SessionDelegate()
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
May be assigned if you want to control the authentication challenges.
|
May be assigned if you want to control the authentication challenges.
|
||||||
*/
|
*/
|
||||||
@ -52,6 +49,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
|||||||
open func createURLSession() -> URLSession {
|
open func createURLSession() -> URLSession {
|
||||||
let configuration = URLSessionConfiguration.default
|
let configuration = URLSessionConfiguration.default
|
||||||
configuration.httpAdditionalHeaders = buildHeaders()
|
configuration.httpAdditionalHeaders = buildHeaders()
|
||||||
|
let sessionDelegate = SessionDelegate()
|
||||||
sessionDelegate.credential = credential
|
sessionDelegate.credential = credential
|
||||||
sessionDelegate.taskDidReceiveChallenge = taskDidReceiveChallenge
|
sessionDelegate.taskDidReceiveChallenge = taskDidReceiveChallenge
|
||||||
return URLSession(configuration: configuration, delegate: sessionDelegate, delegateQueue: nil)
|
return URLSession(configuration: configuration, delegate: sessionDelegate, delegateQueue: nil)
|
||||||
@ -126,6 +124,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let cleanupRequest = {
|
let cleanupRequest = {
|
||||||
|
urlSessionStore[urlSessionId]?.finishTasksAndInvalidate()
|
||||||
urlSessionStore[urlSessionId] = nil
|
urlSessionStore[urlSessionId] = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -144,12 +143,14 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
|||||||
} else {
|
} else {
|
||||||
apiResponseQueue.async {
|
apiResponseQueue.async {
|
||||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||||
|
cleanupRequest()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
apiResponseQueue.async {
|
apiResponseQueue.async {
|
||||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||||
|
cleanupRequest()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,9 +24,6 @@ private var urlSessionStore = SynchronizedDictionary<String, URLSession>()
|
|||||||
|
|
||||||
open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||||
|
|
||||||
// swiftlint:disable:next weak_delegate
|
|
||||||
fileprivate let sessionDelegate = SessionDelegate()
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
May be assigned if you want to control the authentication challenges.
|
May be assigned if you want to control the authentication challenges.
|
||||||
*/
|
*/
|
||||||
@ -52,6 +49,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
|||||||
open func createURLSession() -> URLSession {
|
open func createURLSession() -> URLSession {
|
||||||
let configuration = URLSessionConfiguration.default
|
let configuration = URLSessionConfiguration.default
|
||||||
configuration.httpAdditionalHeaders = buildHeaders()
|
configuration.httpAdditionalHeaders = buildHeaders()
|
||||||
|
let sessionDelegate = SessionDelegate()
|
||||||
sessionDelegate.credential = credential
|
sessionDelegate.credential = credential
|
||||||
sessionDelegate.taskDidReceiveChallenge = taskDidReceiveChallenge
|
sessionDelegate.taskDidReceiveChallenge = taskDidReceiveChallenge
|
||||||
return URLSession(configuration: configuration, delegate: sessionDelegate, delegateQueue: nil)
|
return URLSession(configuration: configuration, delegate: sessionDelegate, delegateQueue: nil)
|
||||||
@ -126,6 +124,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let cleanupRequest = {
|
let cleanupRequest = {
|
||||||
|
urlSessionStore[urlSessionId]?.finishTasksAndInvalidate()
|
||||||
urlSessionStore[urlSessionId] = nil
|
urlSessionStore[urlSessionId] = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -144,12 +143,14 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
|||||||
} else {
|
} else {
|
||||||
apiResponseQueue.async {
|
apiResponseQueue.async {
|
||||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||||
|
cleanupRequest()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
apiResponseQueue.async {
|
apiResponseQueue.async {
|
||||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||||
|
cleanupRequest()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,9 +24,6 @@ private var urlSessionStore = SynchronizedDictionary<String, URLSession>()
|
|||||||
|
|
||||||
open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||||
|
|
||||||
// swiftlint:disable:next weak_delegate
|
|
||||||
fileprivate let sessionDelegate = SessionDelegate()
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
May be assigned if you want to control the authentication challenges.
|
May be assigned if you want to control the authentication challenges.
|
||||||
*/
|
*/
|
||||||
@ -52,6 +49,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
|||||||
open func createURLSession() -> URLSession {
|
open func createURLSession() -> URLSession {
|
||||||
let configuration = URLSessionConfiguration.default
|
let configuration = URLSessionConfiguration.default
|
||||||
configuration.httpAdditionalHeaders = buildHeaders()
|
configuration.httpAdditionalHeaders = buildHeaders()
|
||||||
|
let sessionDelegate = SessionDelegate()
|
||||||
sessionDelegate.credential = credential
|
sessionDelegate.credential = credential
|
||||||
sessionDelegate.taskDidReceiveChallenge = taskDidReceiveChallenge
|
sessionDelegate.taskDidReceiveChallenge = taskDidReceiveChallenge
|
||||||
return URLSession(configuration: configuration, delegate: sessionDelegate, delegateQueue: nil)
|
return URLSession(configuration: configuration, delegate: sessionDelegate, delegateQueue: nil)
|
||||||
@ -126,6 +124,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let cleanupRequest = {
|
let cleanupRequest = {
|
||||||
|
urlSessionStore[urlSessionId]?.finishTasksAndInvalidate()
|
||||||
urlSessionStore[urlSessionId] = nil
|
urlSessionStore[urlSessionId] = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -144,12 +143,14 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
|||||||
} else {
|
} else {
|
||||||
apiResponseQueue.async {
|
apiResponseQueue.async {
|
||||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||||
|
cleanupRequest()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
apiResponseQueue.async {
|
apiResponseQueue.async {
|
||||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||||
|
cleanupRequest()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,9 +24,6 @@ private var urlSessionStore = SynchronizedDictionary<String, URLSession>()
|
|||||||
|
|
||||||
open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
||||||
|
|
||||||
// swiftlint:disable:next weak_delegate
|
|
||||||
fileprivate let sessionDelegate = SessionDelegate()
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
May be assigned if you want to control the authentication challenges.
|
May be assigned if you want to control the authentication challenges.
|
||||||
*/
|
*/
|
||||||
@ -52,6 +49,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
|||||||
open func createURLSession() -> URLSession {
|
open func createURLSession() -> URLSession {
|
||||||
let configuration = URLSessionConfiguration.default
|
let configuration = URLSessionConfiguration.default
|
||||||
configuration.httpAdditionalHeaders = buildHeaders()
|
configuration.httpAdditionalHeaders = buildHeaders()
|
||||||
|
let sessionDelegate = SessionDelegate()
|
||||||
sessionDelegate.credential = credential
|
sessionDelegate.credential = credential
|
||||||
sessionDelegate.taskDidReceiveChallenge = taskDidReceiveChallenge
|
sessionDelegate.taskDidReceiveChallenge = taskDidReceiveChallenge
|
||||||
return URLSession(configuration: configuration, delegate: sessionDelegate, delegateQueue: nil)
|
return URLSession(configuration: configuration, delegate: sessionDelegate, delegateQueue: nil)
|
||||||
@ -126,6 +124,7 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let cleanupRequest = {
|
let cleanupRequest = {
|
||||||
|
urlSessionStore[urlSessionId]?.finishTasksAndInvalidate()
|
||||||
urlSessionStore[urlSessionId] = nil
|
urlSessionStore[urlSessionId] = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -144,12 +143,14 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
|
|||||||
} else {
|
} else {
|
||||||
apiResponseQueue.async {
|
apiResponseQueue.async {
|
||||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||||
|
cleanupRequest()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
apiResponseQueue.async {
|
apiResponseQueue.async {
|
||||||
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion)
|
||||||
|
cleanupRequest()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user