39 lines
1000 B
Swift
39 lines
1000 B
Swift
// Copyright 2015-present 650 Industries. All rights reserved.
|
|
|
|
import ExpoModulesCore
|
|
|
|
/**
|
|
A SharedObject for request.
|
|
*/
|
|
internal final class NativeRequest: SharedObject, @unchecked Sendable {
|
|
internal let response: NativeResponse
|
|
internal let task: ExpoURLSessionTask
|
|
|
|
init(response: NativeResponse) {
|
|
self.response = response
|
|
self.task = ExpoURLSessionTask(delegate: self.response)
|
|
}
|
|
|
|
func start(
|
|
urlSession: URLSession,
|
|
urlSessionDelegate: URLSessionSessionDelegateProxy,
|
|
url: URL,
|
|
requestInit: NativeRequestInit,
|
|
requestBody: Data?
|
|
) {
|
|
self.response.redirectMode = requestInit.redirect
|
|
self.task.start(
|
|
urlSession: urlSession,
|
|
urlSessionDelegate: urlSessionDelegate,
|
|
url: url,
|
|
requestInit: requestInit,
|
|
requestBody: requestBody
|
|
)
|
|
}
|
|
|
|
func cancel(urlSessionDelegate: URLSessionSessionDelegateProxy) {
|
|
self.task.cancel(urlSessionDelegate: urlSessionDelegate)
|
|
self.response.emitRequestCanceled()
|
|
}
|
|
}
|