@@ -151,29 +151,29 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
151
151
self . waitingForPoll = true
152
152
153
153
self . session. dataTaskWithRequest ( req) { [ weak self] data, res, err in
154
- if self == nil {
155
- return
156
- } else if err != nil {
157
- if self !. polling {
158
- self ? . handlePollingFailed ( err)
159
- }
160
- return
154
+ if self == nil {
155
+ return
156
+ } else if err != nil {
157
+ if self !. polling {
158
+ self ? . handlePollingFailed ( err)
161
159
}
160
+ return
161
+ }
162
+
163
+ // println(data)
164
+
165
+ if let str = NSString ( data: data, encoding: NSUTF8StringEncoding) as? String {
166
+ // println(str)
162
167
163
- // println(data)
164
-
165
- if let str = NSString ( data: data, encoding: NSUTF8StringEncoding) as? String {
166
- // println(str)
167
-
168
- dispatch_async ( self ? . parseQueue) { [ weak self] in
169
- self ? . parsePollingMessage ( str)
170
- return
171
- }
168
+ dispatch_async ( self ? . parseQueue) { [ weak self] in
169
+ self ? . parsePollingMessage ( str)
170
+ return
172
171
}
173
-
174
- self ? . waitingForPoll = false
175
- self ? . doPoll ( )
176
- } . resume ( )
172
+ }
173
+
174
+ self ? . waitingForPoll = false
175
+ self ? . doPoll ( )
176
+ } . resume ( )
177
177
}
178
178
179
179
private func flushProbeWait( ) {
@@ -229,12 +229,16 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
229
229
self ? . handlePollingFailed ( err)
230
230
}
231
231
return
232
+ } else if self == nil {
233
+ return
232
234
}
233
235
234
- self ? . flushWaitingForPost ( )
235
236
self ? . waitingForPost = false
236
- self ? . doPoll ( )
237
- } . resume ( )
237
+ dispatch_async ( self !. emitQueue) {
238
+ self ? . flushWaitingForPost ( )
239
+ self ? . doPoll ( )
240
+ return
241
+ } } . resume ( )
238
242
}
239
243
240
244
// We had packets waiting for send when we upgraded
@@ -252,6 +256,7 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
252
256
private func handlePollingFailed( reason: NSError ? ) {
253
257
if !self . client. reconnecting {
254
258
self . connected = false
259
+ self . ws? . close ( )
255
260
self . pingTimer? . invalidate ( )
256
261
self . waitingForPoll = false
257
262
self . waitingForPost = false
@@ -271,61 +276,58 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
271
276
let reqPolling = NSURLRequest ( URL: NSURL ( string: urlPolling + " &b64=1 " ) !)
272
277
273
278
self . session. dataTaskWithRequest ( reqPolling) { [ weak self] data, res, err in
274
- var err : NSError ?
275
- if self == nil {
279
+ var err2 : NSError ?
280
+ if self == nil {
281
+ return
282
+ } else if err != nil || data == nil {
283
+ self ? . handlePollingFailed ( err)
284
+ return
285
+ }
286
+
287
+ if let dataString = NSString ( data: data, encoding: NSUTF8StringEncoding) {
288
+ var mutString = RegexMutable ( dataString)
289
+ let parsed : [ String ] ? = mutString [ " ( \\ d*):( \\ d)( \\ {.* \\ })? " ] . groups ( )
290
+
291
+ if parsed == nil || parsed? . count != 4 {
276
292
return
277
- } else if err != nil || data == nil {
278
- if self !. polling {
279
- self ? . handlePollingFailed ( err)
280
- }
293
+ }
294
+
295
+ let length = parsed![ 1 ]
296
+ let type = parsed![ 2 ]
297
+ let jsonData = parsed![ 3 ] . dataUsingEncoding ( NSUTF8StringEncoding, allowLossyConversion: false )
298
+
299
+ if type != " 0 " {
300
+ NSLog ( " Error handshaking " )
281
301
return
282
302
}
283
303
284
- if let dataString = NSString ( data: data, encoding: NSUTF8StringEncoding) {
285
- var mutString = RegexMutable ( dataString)
286
- let parsed = mutString [ " ( \\ d*):( \\ d)( \\ {.* \\ })? " ] . groups ( )
287
-
288
- if parsed. count != 4 {
289
- return
290
- }
291
-
292
- let length = parsed [ 1 ]
293
- let type = parsed [ 2 ]
294
- let jsonData = parsed [ 3 ] . dataUsingEncoding ( NSUTF8StringEncoding, allowLossyConversion: false )
295
-
296
- if type != " 0 " {
297
- NSLog ( " Error handshaking " )
298
- return
299
- }
300
-
301
- self ? . connected = true
302
-
303
- if let json = NSJSONSerialization . JSONObjectWithData ( jsonData!,
304
- options: NSJSONReadingOptions . AllowFragments, error: & err) as? NSDictionary {
305
- if let sid = json [ " sid " ] as? String {
306
- // println(json)
307
- self ? . sid = sid
308
-
309
- if !self !. forcePolling {
310
- self ? . ws = SRWebSocket ( URL:
311
- NSURL ( string: urlWebSocket + " &sid= \( self !. sid) " ) !)
312
- self ? . ws? . delegate = self
313
- self ? . ws? . open ( )
314
- }
315
- } else {
316
- NSLog ( " Error handshaking " )
317
- return
318
- }
304
+ self ? . connected = true
305
+
306
+ if let json = NSJSONSerialization . JSONObjectWithData ( jsonData!,
307
+ options: NSJSONReadingOptions . AllowFragments, error: & err2) as? NSDictionary {
308
+ if let sid = json [ " sid " ] as? String {
309
+ // println(json)
310
+ self ? . sid = sid
319
311
320
- if let pingInterval = json [ " pingInterval " ] as? Int {
321
- self ? . pingInterval = pingInterval / 1000
312
+ if !self !. forcePolling {
313
+ self ? . ws = SRWebSocket ( URL:
314
+ NSURL ( string: urlWebSocket + " &sid= \( self !. sid) " ) !)
315
+ self ? . ws? . delegate = self
316
+ self ? . ws? . open ( )
322
317
}
323
- }
324
-
325
- self ? . doPoll ( )
326
- self ? . startPingTimer ( )
318
+ } else {
319
+ NSLog ( " Error handshaking " )
320
+ return
321
+ }
322
+
323
+ if let pingInterval = json [ " pingInterval " ] as? Int {
324
+ self ? . pingInterval = pingInterval / 1000
325
+ }
327
326
}
328
- } . resume ( )
327
+
328
+ self ? . doPoll ( )
329
+ self ? . startPingTimer ( )
330
+ } } . resume ( )
329
331
}
330
332
331
333
// Translatation of engine.io-parser#decodePayload
@@ -525,7 +527,7 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
525
527
if self . pingInterval == nil {
526
528
return
527
529
}
528
-
530
+
529
531
self . pingTimer? . invalidate ( )
530
532
dispatch_async ( dispatch_get_main_queue ( ) ) {
531
533
self . pingTimer = NSTimer . scheduledTimerWithTimeInterval ( NSTimeInterval ( self . pingInterval!) , target: self ,
0 commit comments