@@ -41,6 +41,7 @@ public final class SocketEngine: NSObject, WebSocketDelegate {
41
41
private var fastUpgrade = false
42
42
private var forcePolling = false
43
43
private var forceWebsockets = false
44
+ private var invalidated = false
44
45
private var pingInterval : Double ?
45
46
private var pingTimer : NSTimer ?
46
47
private var pingTimeout = 0.0 {
@@ -99,6 +100,7 @@ public final class SocketEngine: NSObject, WebSocketDelegate {
99
100
100
101
deinit {
101
102
Logger . log ( " Engine is being deinit " , type: logType)
103
+ closed = true
102
104
stopPolling ( )
103
105
}
104
106
@@ -248,19 +250,23 @@ public final class SocketEngine: NSObject, WebSocketDelegate {
248
250
}
249
251
}
250
252
251
- doRequest ( req)
253
+ doLongPoll ( req)
252
254
}
255
+
256
+ private func doRequest( req: NSMutableURLRequest ,
257
+ withCallback callback: ( NSData ? , NSURLResponse ? , NSError ? ) -> Void ) {
258
+ if !polling || closed || invalidated {
259
+ return
260
+ }
261
+
262
+ Logger . log ( " Doing polling request " , type: logType)
253
263
254
- private func doRequest( req: NSMutableURLRequest ) {
255
- if !polling || closed {
256
- return
257
- }
258
-
259
- req. cachePolicy = NSURLRequestCachePolicy . ReloadIgnoringLocalAndRemoteCacheData
260
-
261
- Logger . log ( " Doing polling request " , type: logType)
264
+ req. cachePolicy = NSURLRequestCachePolicy . ReloadIgnoringLocalAndRemoteCacheData
265
+ session. dataTaskWithRequest ( req, completionHandler: callback) . resume ( )
266
+ }
262
267
263
- session. dataTaskWithRequest ( req) { [ weak self] data, res, err in
268
+ private func doLongPoll( req: NSMutableURLRequest ) {
269
+ doRequest ( req) { [ weak self] data, res, err in
264
270
if let this = self {
265
271
if err != nil || data == nil {
266
272
if this. polling {
@@ -270,23 +276,24 @@ public final class SocketEngine: NSObject, WebSocketDelegate {
270
276
}
271
277
return
272
278
}
273
-
279
+
274
280
Logger . log ( " Got polling response " , type: this. logType)
275
-
281
+
276
282
if let str = NSString ( data: data!, encoding: NSUTF8StringEncoding) as? String {
277
283
dispatch_async ( this. parseQueue) { [ weak this] in
278
284
this? . parsePollingMessage ( str)
279
285
}
280
286
}
281
-
287
+
282
288
this. waitingForPoll = false
283
-
289
+
284
290
if this. fastUpgrade {
285
291
this. doFastUpgrade ( )
286
292
} else if !this. closed && this. polling {
287
293
this. doPoll ( )
288
294
}
289
- } } . resume ( )
295
+ }
296
+ }
290
297
}
291
298
292
299
private func flushProbeWait( ) {
@@ -345,13 +352,13 @@ public final class SocketEngine: NSObject, WebSocketDelegate {
345
352
346
353
Logger . log ( " POSTing: %@ " , type: logType, args: postStr)
347
354
348
- session . dataTaskWithRequest ( req) { [ weak self] data, res, err in
355
+ doRequest ( req) { [ weak self] data, res, err in
349
356
if let this = self {
350
357
if err != nil && this. polling {
351
358
this. handlePollingFailed ( err? . localizedDescription ?? " Error " )
352
359
return
353
360
} else if err != nil {
354
- NSLog ( err? . localizedDescription ?? " Error " )
361
+ Logger . error ( err? . localizedDescription ?? " Error " , type : this . logType )
355
362
return
356
363
}
357
364
@@ -363,7 +370,8 @@ public final class SocketEngine: NSObject, WebSocketDelegate {
363
370
this? . doPoll ( )
364
371
}
365
372
}
366
- } } . resume ( )
373
+ }
374
+ }
367
375
}
368
376
369
377
// We had packets waiting for send when we upgraded
@@ -488,7 +496,7 @@ public final class SocketEngine: NSObject, WebSocketDelegate {
488
496
}
489
497
}
490
498
491
- doRequest ( reqPolling)
499
+ doLongPoll ( reqPolling)
492
500
}
493
501
494
502
private func parsePollingMessage( str: String) {
@@ -627,6 +635,7 @@ public final class SocketEngine: NSObject, WebSocketDelegate {
627
635
}
628
636
629
637
func stopPolling( ) {
638
+ invalidated = true
630
639
session. finishTasksAndInvalidate ( )
631
640
}
632
641
0 commit comments