@@ -46,7 +46,7 @@ private enum PacketType: String {
46
46
case NOOP = " 6 "
47
47
}
48
48
49
- class SocketEngine : NSObject , SRWebSocketDelegate {
49
+ class SocketEngine : NSObject , WebSocketDelegate {
50
50
unowned let client : SocketIOClient
51
51
private let workQueue = NSOperationQueue ( )
52
52
private let emitQueue = dispatch_queue_create (
@@ -77,7 +77,7 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
77
77
var websocket : Bool {
78
78
return self . _websocket
79
79
}
80
- var ws : SRWebSocket ?
80
+ var ws : WebSocket ?
81
81
82
82
init ( client: SocketIOClient , forcePolling: Bool = false ) {
83
83
self . client = client
@@ -165,7 +165,11 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
165
165
if let str = NSString ( data: data, encoding: NSUTF8StringEncoding) as? String {
166
166
// println(str)
167
167
168
- dispatch_async ( self ? . parseQueue) { [ weak self] in
168
+ dispatch_async ( self !. parseQueue) { [ weak self] in
169
+ if self == nil {
170
+ return
171
+ }
172
+
169
173
self ? . parsePollingMessage ( str)
170
174
return
171
175
}
@@ -224,12 +228,10 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
224
228
self . waitingForPost = true
225
229
226
230
self . session. dataTaskWithRequest ( req) { [ weak self] data, res, err in
227
- if err != nil {
228
- if self !. polling {
229
- self ? . handlePollingFailed ( err)
230
- }
231
+ if self == nil {
231
232
return
232
- } else if self == nil {
233
+ } else if err != nil && self !. polling {
234
+ self ? . handlePollingFailed ( err)
233
235
return
234
236
}
235
237
@@ -245,7 +247,7 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
245
247
// Send them raw
246
248
private func flushWaitingForPostToWebSocket( ) {
247
249
for msg in self . postWait {
248
- self . ws? . send ( msg)
250
+ self . ws? . writeString ( msg)
249
251
}
250
252
251
253
self . postWait. removeAll ( keepCapacity: true )
@@ -256,7 +258,7 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
256
258
private func handlePollingFailed( reason: NSError ? ) {
257
259
if !self . client. reconnecting {
258
260
self . connected = false
259
- self . ws? . close ( )
261
+ self . ws? . disconnect ( )
260
262
self . pingTimer? . invalidate ( )
261
263
self . waitingForPoll = false
262
264
self . waitingForPost = false
@@ -310,10 +312,10 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
310
312
self ? . sid = sid
311
313
312
314
if !self !. forcePolling {
313
- self ? . ws = SRWebSocket ( URL :
314
- NSURL ( string : urlWebSocket + " &sid= \( self ! . sid ) " ) ! )
315
+ self ? . ws = WebSocket ( url : NSURL ( string : urlWebSocket + " &sid= \( self ! . sid ) " ) ! )
316
+ self ? . ws ? . queue = self ? . handleQueue
315
317
self ? . ws? . delegate = self
316
- self ? . ws? . open ( )
318
+ self ? . ws? . connect ( )
317
319
}
318
320
} else {
319
321
NSLog ( " Error handshaking " )
@@ -377,8 +379,9 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
377
379
// Be sure to capture the value of the msg
378
380
dispatch_async ( self . handleQueue) { [ weak self, msg] in
379
381
fixSwift = msg
380
- self ? . parseEngineMessage ( fixSwift)
381
- return
382
+ if fixSwift is String {
383
+ self ? . parseEngineMessage ( fixSwift as String )
384
+ }
382
385
}
383
386
}
384
387
@@ -388,16 +391,14 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
388
391
}
389
392
}
390
393
391
- private func parseEngineMessage( message: AnyObject ? ) {
394
+ private func parseEngineData( data: NSData ) {
395
+ self . client. parseBinaryData ( data. subdataWithRange ( NSMakeRange ( 1 , data. length - 1 ) ) )
396
+ }
397
+
398
+ private func parseEngineMessage( var message: String ) {
392
399
// println(message!)
393
- if let data = message as? NSData {
394
- // Strip off message type
395
- self . client. parseSocketMessage ( data. subdataWithRange ( NSMakeRange ( 1 , data. length - 1 ) ) )
396
- return
397
- }
398
400
399
- var messageString = message as String
400
- var strMessage = RegexMutable ( messageString)
401
+ var strMessage = RegexMutable ( message)
401
402
402
403
// We should upgrade
403
404
if strMessage == " 3probe " {
@@ -409,16 +410,16 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
409
410
410
411
if type != PacketType . MESSAGE. rawValue {
411
412
// TODO Handle other packets
412
- if messageString . hasPrefix ( " b4 " ) {
413
+ if message . hasPrefix ( " b4 " ) {
413
414
// binary in base64 string
414
415
415
- messageString . removeRange ( Range < String . Index > ( start: messageString . startIndex,
416
- end: advance ( messageString . startIndex, 2 ) ) )
416
+ message . removeRange ( Range < String . Index > ( start: message . startIndex,
417
+ end: advance ( message . startIndex, 2 ) ) )
417
418
418
- if let data = NSData ( base64EncodedString: messageString ,
419
+ if let data = NSData ( base64EncodedString: message ,
419
420
options: NSDataBase64DecodingOptions . IgnoreUnknownCharacters) {
420
421
// println("sending \(data)")
421
- self . client. parseSocketMessage ( data)
422
+ self . client. parseBinaryData ( data)
422
423
}
423
424
424
425
return
@@ -427,7 +428,7 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
427
428
return
428
429
}
429
430
430
- if messageString == PacketType . CLOSE. rawValue {
431
+ if message == PacketType . CLOSE. rawValue {
431
432
// do nothing
432
433
return
433
434
}
@@ -436,10 +437,10 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
436
437
}
437
438
438
439
// Remove message type
439
- messageString . removeAtIndex ( messageString . startIndex)
440
+ message . removeAtIndex ( message . startIndex)
440
441
// println("sending \(messageString)")
441
442
442
- self . client. parseSocketMessage ( messageString )
443
+ self . client. parseSocketMessage ( message )
443
444
}
444
445
445
446
private func probeWebSocket( ) {
@@ -480,6 +481,7 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
480
481
481
482
func sendPing( ) {
482
483
if self . websocket {
484
+ self . ws? . writePing ( NSData ( ) )
483
485
self . sendWebSocketMessage ( " " , withType: PacketType . PING)
484
486
} else {
485
487
self . sendPollMessage ( " " , withType: PacketType . PING)
@@ -510,13 +512,13 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
510
512
511
513
private func sendWebSocketMessage( str: String , withType type: PacketType , datas: [ NSData ] ? = nil ) {
512
514
// println("Sending: ws: \(str) as type: \(type.rawValue)")
513
- self . ws? . send ( " \( type. rawValue) \( str) " )
515
+ self . ws? . writeString ( " \( type. rawValue) \( str) " )
514
516
515
517
if datas != nil {
516
518
for data in datas! {
517
519
let ( data, nilString) = self . createBinaryDataForSend ( data)
518
520
if data != nil {
519
- self . ws? . send ( data!)
521
+ self . ws? . writeData ( data!)
520
522
}
521
523
}
522
524
}
@@ -546,25 +548,13 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
546
548
}
547
549
}
548
550
549
- // Called when a message is recieved
550
- func webSocket( webSocket: SRWebSocket ! , didReceiveMessage message: AnyObject ? ) {
551
- // println(message)
552
-
553
- dispatch_async ( self . handleQueue) { [ weak self] in
554
- self ? . parseEngineMessage ( message)
555
- return
556
- }
557
- }
558
-
559
- // Called when the socket is opened
560
- func webSocketDidOpen( webSocket: SRWebSocket ! ) {
551
+ func websocketDidConnect( socket: WebSocket ) {
561
552
self . websocketConnected = true
562
553
self . probing = true
563
554
self . probeWebSocket ( )
564
555
}
565
556
566
- // Called when the socket is closed
567
- func webSocket( webSocket: SRWebSocket ! , didCloseWithCode code: Int , reason: String ! , wasClean: Bool ) {
557
+ func websocketDidDisconnect( socket: WebSocket , error: NSError ? ) {
568
558
self . websocketConnected = false
569
559
self . probing = false
570
560
@@ -573,24 +563,17 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
573
563
self . connected = false
574
564
self . _websocket = false
575
565
self . _polling = true
576
- self . client. webSocketDidCloseWithCode ( code , reason: reason , wasClean: wasClean )
566
+ self . client. webSocketDidCloseWithCode ( 1 , reason: " Socket Disconnect " , wasClean: true )
577
567
} else {
578
568
self . flushProbeWait ( )
579
569
}
580
570
}
581
571
582
- // Called when an error occurs.
583
- func webSocket( webSocket: SRWebSocket ! , didFailWithError error: NSError ! ) {
584
- self . websocketConnected = false
585
- self . _polling = true
586
- self . probing = false
587
-
588
- if self . websocket {
589
- self . pingTimer? . invalidate ( )
590
- self . connected = false
591
- self . client. webSocketDidFailWithError ( error)
592
- } else {
593
- self . flushProbeWait ( )
594
- }
572
+ func websocketDidReceiveMessage( socket: WebSocket , text: String ) {
573
+ self . parseEngineMessage ( text)
574
+ }
575
+
576
+ func websocketDidReceiveData( socket: WebSocket , data: NSData ) {
577
+ self . parseEngineData ( data)
595
578
}
596
579
}
0 commit comments