9
9
import Foundation
10
10
11
11
class RequestOperation : AsynchronousOperation {
12
-
12
+
13
13
var task : URLSessionTask ?
14
14
var request : URLRequest ?
15
-
15
+
16
16
init ( session: URLSession , request: URLRequest , finished: SentryEndpointRequestFinished ? = nil ) {
17
17
super. init ( )
18
-
18
+
19
19
self . request = request
20
20
#if swift(>=3.0)
21
- task = session. dataTask ( with: request) { data, response, error in
21
+ task = session. dataTask ( with: request) { [ weak self ] data, response, error in
22
22
defer {
23
- self . completeOperation ( )
23
+ self ? . completeOperation ( )
24
24
}
25
-
25
+
26
26
var success = false
27
-
27
+
28
28
// Returns success if we have data and 200 response code
29
29
if let data = data, let response = response as? HTTPURLResponse {
30
30
Log . Debug. log ( " status = \( response. statusCode) " )
@@ -36,20 +36,20 @@ class RequestOperation: AsynchronousOperation {
36
36
}
37
37
if let error = error {
38
38
Log . Error. log ( " error = \( error) " )
39
-
39
+
40
40
success = false
41
41
}
42
-
42
+
43
43
finished ? ( success)
44
44
}
45
45
#else
46
- task = session. dataTaskWithRequest ( request) { data, response, error in
46
+ task = session. dataTaskWithRequest ( request) { [ weak self ] data, response, error in
47
47
defer {
48
- self . completeOperation ( )
48
+ self ? . completeOperation ( )
49
49
}
50
-
50
+
51
51
var success = false
52
-
52
+
53
53
// Returns success if we have data and 200 response code
54
54
if let data = data, let response = response as? NSHTTPURLResponse {
55
55
Log . Debug. log ( " status = \( response. statusCode) " )
@@ -63,32 +63,32 @@ class RequestOperation: AsynchronousOperation {
63
63
Log . Error. log ( " error = \( error) " )
64
64
success = false
65
65
}
66
-
66
+
67
67
finished ? ( success)
68
68
}
69
69
#endif
70
70
}
71
-
71
+
72
72
override func cancel( ) {
73
73
if let task = task {
74
74
task. cancel ( )
75
75
}
76
76
super. cancel ( )
77
77
}
78
-
78
+
79
79
override func main( ) {
80
80
if let task = task { task. resume ( ) }
81
81
}
82
-
82
+
83
83
}
84
84
85
85
#if swift(>=3.0)
86
86
class AsynchronousOperation : Operation {
87
-
87
+
88
88
override public var isAsynchronous : Bool { return true }
89
-
89
+
90
90
private let stateLock = NSLock ( )
91
-
91
+
92
92
private var _executing : Bool = false
93
93
override private( set) public var isExecuting : Bool {
94
94
get {
@@ -100,7 +100,7 @@ class AsynchronousOperation: Operation {
100
100
didChangeValue ( forKey: " isExecuting " )
101
101
}
102
102
}
103
-
103
+
104
104
private var _finished : Bool = false
105
105
override private( set) public var isFinished : Bool {
106
106
get {
@@ -112,37 +112,37 @@ class AsynchronousOperation: Operation {
112
112
didChangeValue ( forKey: " isFinished " )
113
113
}
114
114
}
115
-
115
+
116
116
/// Complete the operation
117
117
///
118
118
/// This will result in the appropriate KVN of isFinished and isExecuting
119
119
public func completeOperation( ) {
120
- if isExecuting { _executing = false }
121
- if !isFinished { _finished = true }
120
+ if isExecuting { isExecuting = false }
121
+ if !isFinished { isFinished = true }
122
122
}
123
-
123
+
124
124
override public func start( ) {
125
125
if isCancelled {
126
- _finished = true
126
+ isFinished = true
127
127
return
128
128
}
129
-
130
- _executing = true
131
-
129
+
130
+ isExecuting = true
131
+
132
132
main ( )
133
133
}
134
-
134
+
135
135
override public func main( ) {
136
136
fatalError ( " subclasses must override `main` " )
137
137
}
138
138
}
139
139
#else
140
140
public class AsynchronousOperation : NSOperation {
141
-
141
+
142
142
override public var asynchronous : Bool { return true }
143
-
143
+
144
144
private let stateLock = NSLock ( )
145
-
145
+
146
146
private var _executing : Bool = false
147
147
override private( set) public var executing : Bool {
148
148
get {
@@ -154,7 +154,7 @@ public class AsynchronousOperation : NSOperation {
154
154
didChangeValueForKey ( " isExecuting " )
155
155
}
156
156
}
157
-
157
+
158
158
private var _finished : Bool = false
159
159
override private( set) public var finished : Bool {
160
160
get {
@@ -166,46 +166,46 @@ public class AsynchronousOperation : NSOperation {
166
166
didChangeValueForKey ( " isFinished " )
167
167
}
168
168
}
169
-
169
+
170
170
/// Complete the operation
171
171
///
172
172
/// This will result in the appropriate KVN of isFinished and isExecuting
173
-
173
+
174
174
public func completeOperation( ) {
175
175
if executing {
176
176
executing = false
177
177
}
178
-
178
+
179
179
if !finished {
180
180
finished = true
181
181
}
182
182
}
183
-
183
+
184
184
override public func start( ) {
185
185
if cancelled {
186
186
finished = true
187
187
return
188
188
}
189
-
189
+
190
190
executing = true
191
-
191
+
192
192
main ( )
193
193
}
194
-
194
+
195
195
override public func main( ) {
196
196
fatalError ( " subclasses must override `main` " )
197
197
}
198
198
}
199
199
#endif
200
200
201
201
extension NSLock {
202
-
202
+
203
203
/// Perform closure within lock.
204
204
///
205
205
/// An extension to `NSLock` to simplify executing critical code.
206
206
///
207
207
/// - parameter block: The closure to be performed.
208
-
208
+
209
209
func withCriticalScope< T> ( block: ( Void ) -> T ) -> T {
210
210
lock ( )
211
211
let value = block ( )
0 commit comments