@@ -164,18 +164,21 @@ public class SocketEngine: NSObject, WebSocketDelegate {
164
164
self . ws = WebSocket ( url: NSURL ( string: self . urlWebSocket! + " &sid= \( self . sid) " ) !)
165
165
self . ws? . queue = self . handleQueue
166
166
self . ws? . delegate = self
167
-
167
+
168
168
if connect {
169
169
self . ws? . connect ( )
170
170
}
171
171
}
172
172
173
173
private func doFastUpgrade( ) {
174
- self . sendWebSocketMessage ( " " , withType: PacketType . UPGRADE)
175
- self . _websocket = true
176
- self . _polling = false
177
- self . fastUpgrade = false
178
- self . flushProbeWait ( )
174
+ dispatch_async ( self . emitQueue) { [ weak self] in
175
+ self ? . sendWebSocketMessage ( " " , withType: PacketType . UPGRADE)
176
+ self ? . _websocket = true
177
+ self ? . _polling = false
178
+ self ? . fastUpgrade = false
179
+ self ? . probing = false
180
+ self ? . flushProbeWait ( )
181
+ }
179
182
}
180
183
181
184
private func doPoll( ) {
@@ -229,7 +232,7 @@ public class SocketEngine: NSObject, WebSocketDelegate {
229
232
}
230
233
231
234
private func flushProbeWait( ) {
232
- // println ("flushing probe wait")
235
+ // NSLog ("flushing probe wait")
233
236
dispatch_async ( self . emitQueue) { [ weak self] in
234
237
if self == nil {
235
238
return
@@ -240,6 +243,7 @@ public class SocketEngine: NSObject, WebSocketDelegate {
240
243
}
241
244
242
245
self ? . probeWait. removeAll ( keepCapacity: false )
246
+ // NSLog("waiting for post after flush probe: \(self!.postWait.count)")
243
247
}
244
248
}
245
249
@@ -269,11 +273,14 @@ public class SocketEngine: NSObject, WebSocketDelegate {
269
273
let postData = postStr. dataUsingEncoding ( NSUTF8StringEncoding,
270
274
allowLossyConversion: false ) !
271
275
272
- // NSLog("posting: \(postStr)")
273
276
req. HTTPBody = postData
274
277
req. setValue ( String ( postData. length) , forHTTPHeaderField: " Content-Length " )
275
278
276
279
self . waitingForPost = true
280
+
281
+ // NSLog("posting: \(postStr)")
282
+ // NSLog("Posting with WS status of: \(self.websocket)")
283
+
277
284
self . session. dataTaskWithRequest ( req) { [ weak self] data, res, err in
278
285
if self == nil {
279
286
return
@@ -284,9 +291,13 @@ public class SocketEngine: NSObject, WebSocketDelegate {
284
291
285
292
self ? . waitingForPost = false
286
293
dispatch_async ( self !. emitQueue) {
287
- self ? . flushWaitingForPost ( )
288
- self ? . doPoll ( )
289
- return
294
+ if self !. fastUpgrade {
295
+ self ? . doFastUpgrade ( )
296
+ return
297
+ } else {
298
+ self ? . flushWaitingForPost ( )
299
+ self ? . doPoll ( )
300
+ }
290
301
} } . resume ( )
291
302
}
292
303
@@ -517,6 +528,8 @@ public class SocketEngine: NSObject, WebSocketDelegate {
517
528
self . write ( " " , withType: PacketType . PING, withData: nil )
518
529
}
519
530
531
+ /// Send polling message.
532
+ /// Only call on emitQueue
520
533
private func sendPollMessage( var msg: String , withType type: PacketType ,
521
534
datas: ContiguousArray < NSData > ? = nil ) {
522
535
// println("Sending poll: \(msg) as type: \(type.rawValue)")
@@ -538,6 +551,8 @@ public class SocketEngine: NSObject, WebSocketDelegate {
538
551
}
539
552
}
540
553
554
+ /// Send message on WebSockets
555
+ /// Only call on emitQueue
541
556
private func sendWebSocketMessage( str: String , withType type: PacketType ,
542
557
datas: ContiguousArray < NSData > ? = nil ) {
543
558
// println("Sending ws: \(str) as type: \(type.rawValue)")
@@ -569,9 +584,9 @@ public class SocketEngine: NSObject, WebSocketDelegate {
569
584
570
585
private func upgradeTransport( ) {
571
586
if self . websocketConnected {
587
+ // NSLog("Doing fast upgrade")
572
588
// Do a fast upgrade
573
589
self . fastUpgrade = true
574
- self . probing = false
575
590
self . sendPollMessage ( " " , withType: PacketType . NOOP)
576
591
}
577
592
}
@@ -591,7 +606,7 @@ public class SocketEngine: NSObject, WebSocketDelegate {
591
606
}
592
607
}
593
608
}
594
-
609
+
595
610
// Delagate methods
596
611
597
612
public func websocketDidConnect( socket: WebSocket ) {
0 commit comments