@@ -46,7 +46,7 @@ private enum PacketType: String {
4646 case NOOP = " 6 "
4747}
4848
49- class SocketEngine : NSObject , SRWebSocketDelegate {
49+ class SocketEngine : NSObject , WebSocketDelegate {
5050 unowned let client : SocketIOClient
5151 private let workQueue = NSOperationQueue ( )
5252 private let emitQueue = dispatch_queue_create (
@@ -77,7 +77,7 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
7777 var websocket : Bool {
7878 return self . _websocket
7979 }
80- var ws : SRWebSocket ?
80+ var ws : WebSocket ?
8181
8282 init ( client: SocketIOClient , forcePolling: Bool = false ) {
8383 self . client = client
@@ -165,7 +165,11 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
165165 if let str = NSString ( data: data, encoding: NSUTF8StringEncoding) as? String {
166166 // println(str)
167167
168- dispatch_async ( self ? . parseQueue) { [ weak self] in
168+ dispatch_async ( self !. parseQueue) { [ weak self] in
169+ if self == nil {
170+ return
171+ }
172+
169173 self ? . parsePollingMessage ( str)
170174 return
171175 }
@@ -224,12 +228,10 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
224228 self . waitingForPost = true
225229
226230 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 {
231232 return
232- } else if self == nil {
233+ } else if err != nil && self !. polling {
234+ self ? . handlePollingFailed ( err)
233235 return
234236 }
235237
@@ -245,7 +247,7 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
245247 // Send them raw
246248 private func flushWaitingForPostToWebSocket( ) {
247249 for msg in self . postWait {
248- self . ws? . send ( msg)
250+ self . ws? . writeString ( msg)
249251 }
250252
251253 self . postWait. removeAll ( keepCapacity: true )
@@ -256,7 +258,7 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
256258 private func handlePollingFailed( reason: NSError ? ) {
257259 if !self . client. reconnecting {
258260 self . connected = false
259- self . ws? . close ( )
261+ self . ws? . disconnect ( )
260262 self . pingTimer? . invalidate ( )
261263 self . waitingForPoll = false
262264 self . waitingForPost = false
@@ -310,10 +312,10 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
310312 self ? . sid = sid
311313
312314 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
315317 self ? . ws? . delegate = self
316- self ? . ws? . open ( )
318+ self ? . ws? . connect ( )
317319 }
318320 } else {
319321 NSLog ( " Error handshaking " )
@@ -377,8 +379,9 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
377379 // Be sure to capture the value of the msg
378380 dispatch_async ( self . handleQueue) { [ weak self, msg] in
379381 fixSwift = msg
380- self ? . parseEngineMessage ( fixSwift)
381- return
382+ if fixSwift is String {
383+ self ? . parseEngineMessage ( fixSwift as String )
384+ }
382385 }
383386 }
384387
@@ -388,16 +391,14 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
388391 }
389392 }
390393
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 ) {
392399 // 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- }
398400
399- var messageString = message as String
400- var strMessage = RegexMutable ( messageString)
401+ var strMessage = RegexMutable ( message)
401402
402403 // We should upgrade
403404 if strMessage == " 3probe " {
@@ -409,16 +410,16 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
409410
410411 if type != PacketType . MESSAGE. rawValue {
411412 // TODO Handle other packets
412- if messageString . hasPrefix ( " b4 " ) {
413+ if message . hasPrefix ( " b4 " ) {
413414 // binary in base64 string
414415
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 ) ) )
417418
418- if let data = NSData ( base64EncodedString: messageString ,
419+ if let data = NSData ( base64EncodedString: message ,
419420 options: NSDataBase64DecodingOptions . IgnoreUnknownCharacters) {
420421 // println("sending \(data)")
421- self . client. parseSocketMessage ( data)
422+ self . client. parseBinaryData ( data)
422423 }
423424
424425 return
@@ -427,7 +428,7 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
427428 return
428429 }
429430
430- if messageString == PacketType . CLOSE. rawValue {
431+ if message == PacketType . CLOSE. rawValue {
431432 // do nothing
432433 return
433434 }
@@ -436,10 +437,10 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
436437 }
437438
438439 // Remove message type
439- messageString . removeAtIndex ( messageString . startIndex)
440+ message . removeAtIndex ( message . startIndex)
440441 // println("sending \(messageString)")
441442
442- self . client. parseSocketMessage ( messageString )
443+ self . client. parseSocketMessage ( message )
443444 }
444445
445446 private func probeWebSocket( ) {
@@ -480,6 +481,7 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
480481
481482 func sendPing( ) {
482483 if self . websocket {
484+ self . ws? . writePing ( NSData ( ) )
483485 self . sendWebSocketMessage ( " " , withType: PacketType . PING)
484486 } else {
485487 self . sendPollMessage ( " " , withType: PacketType . PING)
@@ -510,13 +512,13 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
510512
511513 private func sendWebSocketMessage( str: String , withType type: PacketType , datas: [ NSData ] ? = nil ) {
512514 // println("Sending: ws: \(str) as type: \(type.rawValue)")
513- self . ws? . send ( " \( type. rawValue) \( str) " )
515+ self . ws? . writeString ( " \( type. rawValue) \( str) " )
514516
515517 if datas != nil {
516518 for data in datas! {
517519 let ( data, nilString) = self . createBinaryDataForSend ( data)
518520 if data != nil {
519- self . ws? . send ( data!)
521+ self . ws? . writeData ( data!)
520522 }
521523 }
522524 }
@@ -546,25 +548,13 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
546548 }
547549 }
548550
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 ) {
561552 self . websocketConnected = true
562553 self . probing = true
563554 self . probeWebSocket ( )
564555 }
565556
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 ? ) {
568558 self . websocketConnected = false
569559 self . probing = false
570560
@@ -573,24 +563,17 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
573563 self . connected = false
574564 self . _websocket = false
575565 self . _polling = true
576- self . client. webSocketDidCloseWithCode ( code , reason: reason , wasClean: wasClean )
566+ self . client. webSocketDidCloseWithCode ( 1 , reason: " Socket Disconnect " , wasClean: true )
577567 } else {
578568 self . flushProbeWait ( )
579569 }
580570 }
581571
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)
595578 }
596579}
0 commit comments