@@ -151,29 +151,29 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
151151 self . waitingForPoll = true
152152
153153 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)
161159 }
160+ return
161+ }
162+
163+ // println(data)
164+
165+ if let str = NSString ( data: data, encoding: NSUTF8StringEncoding) as? String {
166+ // println(str)
162167
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
172171 }
173-
174- self ? . waitingForPoll = false
175- self ? . doPoll ( )
176- } . resume ( )
172+ }
173+
174+ self ? . waitingForPoll = false
175+ self ? . doPoll ( )
176+ } . resume ( )
177177 }
178178
179179 private func flushProbeWait( ) {
@@ -229,12 +229,16 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
229229 self ? . handlePollingFailed ( err)
230230 }
231231 return
232+ } else if self == nil {
233+ return
232234 }
233235
234- self ? . flushWaitingForPost ( )
235236 self ? . waitingForPost = false
236- self ? . doPoll ( )
237- } . resume ( )
237+ dispatch_async ( self !. emitQueue) {
238+ self ? . flushWaitingForPost ( )
239+ self ? . doPoll ( )
240+ return
241+ } } . resume ( )
238242 }
239243
240244 // We had packets waiting for send when we upgraded
@@ -252,6 +256,7 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
252256 private func handlePollingFailed( reason: NSError ? ) {
253257 if !self . client. reconnecting {
254258 self . connected = false
259+ self . ws? . close ( )
255260 self . pingTimer? . invalidate ( )
256261 self . waitingForPoll = false
257262 self . waitingForPost = false
@@ -271,61 +276,58 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
271276 let reqPolling = NSURLRequest ( URL: NSURL ( string: urlPolling + " &b64=1 " ) !)
272277
273278 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 {
276292 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 " )
281301 return
282302 }
283303
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
319311
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 ( )
322317 }
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+ }
327326 }
328- } . resume ( )
327+
328+ self ? . doPoll ( )
329+ self ? . startPingTimer ( )
330+ } } . resume ( )
329331 }
330332
331333 // Translatation of engine.io-parser#decodePayload
@@ -525,7 +527,7 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
525527 if self . pingInterval == nil {
526528 return
527529 }
528-
530+
529531 self . pingTimer? . invalidate ( )
530532 dispatch_async ( dispatch_get_main_queue ( ) ) {
531533 self . pingTimer = NSTimer . scheduledTimerWithTimeInterval ( NSTimeInterval ( self . pingInterval!) , target: self ,
0 commit comments