@@ -76,11 +76,15 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
7676 self . forcePolling = forcePolling
7777 }
7878
79- func close( ) {
79+ func close( forced : Bool = false ) {
8080 self . pingTimer? . invalidate ( )
8181
82- self . send ( PacketType . CLOSE. rawValue)
83- self . ws? . close ( )
82+ if !forced {
83+ self . send ( PacketType . CLOSE. rawValue)
84+ self . ws? . close ( )
85+ } else {
86+ self . client. didForceClose ( )
87+ }
8488
8589 if self . polling {
8690 self . client. handleEvent ( " disconnect " , data: " close " , isInternalMessage: true )
@@ -343,6 +347,10 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
343347 return
344348 }
345349
350+ if messageString == PacketType . CLOSE. rawValue {
351+ self ? . close ( forced: true )
352+ return
353+ }
346354 // println("Got something idk what to do with")
347355 // println(messageString)
348356 }
@@ -353,27 +361,21 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
353361 }
354362 }
355363
356- func probeWebSocket( ) {
364+ private func probeWebSocket( ) {
357365 if self . websocketConnected {
358366 self . ws? . send ( " 2probe " )
359367 }
360368 }
361369
362- func send( msg: AnyObject , datas: [ NSData ] ? = nil ) {
363- let _send = { [ weak self] ( msg: AnyObject , datas: [ NSData ] ? ) -> ( ) -> Void in
370+ func send( msg: String , datas: [ NSData ] ? = nil ) {
371+ let _send = { [ weak self] ( msg: String , datas: [ NSData ] ? ) -> ( ) -> Void in
364372 return {
365373 if self == nil {
366374 return
367375 }
368376
369377 if self !. websocket {
370- self ? . ws? . send ( " \( PacketType . MESSAGE. rawValue) \( msg) " )
371- if datas != nil {
372- for data in datas! {
373- let ( data, nilString) = self !. createBinaryDataForSend ( data)
374- self ? . ws? . send ( data!)
375- }
376- }
378+ self ? . sendWebSocketMessage ( msg, datas: datas)
377379 } else {
378380 self ? . sendPollMessage ( msg, datas: datas)
379381 }
@@ -393,7 +395,7 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
393395 } else {
394396 let time = Int ( NSDate ( ) . timeIntervalSince1970)
395397 var req = NSMutableURLRequest ( URL: NSURL ( string:
396- self . urlPolling! + " &t= \( time ) -0&b64=1 " + " & sid=\( self . sid) " ) !)
398+ self . urlPolling! + " &sid= \( self . sid) " ) !)
397399 let postStr = " 1: \( PacketType . PING. rawValue) "
398400 let postData = postStr. dataUsingEncoding ( NSUTF8StringEncoding, allowLossyConversion: false ) !
399401 let postLength = " \( postData. length) "
@@ -418,13 +420,12 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
418420 }
419421 }
420422
421- func sendPollMessage( msg: AnyObject , datas: [ NSData ] ? ) {
423+ func sendPollMessage( msg: String , datas: [ NSData ] ? ) {
422424 // println("Sending: \(msg)")
423425 var postData : NSData
424426 var bDatas : [ String ] ?
425- let time = Int ( NSDate ( ) . timeIntervalSince1970)
426427 var req = NSMutableURLRequest ( URL:
427- NSURL ( string: self . urlPolling! + " &t= \( time ) &b64=1 " + " & sid=\( self . sid) " ) !)
428+ NSURL ( string: self . urlPolling! + " &sid= \( self . sid) " ) !)
428429
429430 req. HTTPMethod = " POST "
430431 req. setValue ( " application/html-text " , forHTTPHeaderField: " Content-Type " )
@@ -439,7 +440,7 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
439440 }
440441 }
441442
442- let strMsg = " \( PacketType . MESSAGE. rawValue) \( msg as String ) "
443+ let strMsg = " \( PacketType . MESSAGE. rawValue) \( msg) "
443444
444445 let postCount = countElements ( strMsg)
445446 var postStr = " \( postCount) : \( strMsg) "
@@ -459,12 +460,26 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
459460
460461 NSURLConnection . sendAsynchronousRequest ( req, queue: self . workQueue) { [ weak self] res, data, err in
461462 if err != nil {
462- println ( err)
463+ // println(err)
464+ self ? . handlePollingFailed ( )
463465 return
464466 }
465467 }
466468 }
467469
470+ func sendWebSocketMessage( str: String , datas: [ NSData ] ? ) {
471+ self . ws? . send ( " \( PacketType . MESSAGE. rawValue) \( str) " )
472+
473+ if datas != nil {
474+ for data in datas! {
475+ let ( data, nilString) = self . createBinaryDataForSend ( data)
476+ if data != nil {
477+ self . ws? . send ( data!)
478+ }
479+ }
480+ }
481+ }
482+
468483 // Starts the ping timer
469484 private func startPingTimer( ) {
470485 if self . pingInterval == nil {
@@ -491,7 +506,6 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
491506 // Called when a message is recieved
492507 func webSocket( webSocket: SRWebSocket ! , didReceiveMessage message: AnyObject ? ) {
493508 // println(message)
494-
495509 self . parseEngineMessage ( message)
496510 }
497511
@@ -506,11 +520,13 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
506520 func webSocket( webSocket: SRWebSocket ! , didCloseWithCode code: Int , reason: String ! , wasClean: Bool ) {
507521 self . websocketConnected = false
508522 self . probing = false
509- self . _websocket = false
510- self . _polling = true
511523 self . flushProbeWait ( )
512524
513- self . client. webSocketDidCloseWithCode ( code, reason: reason, wasClean: wasClean)
525+ if self . websocket {
526+ self . _websocket = false
527+ self . _polling = true
528+ self . client. webSocketDidCloseWithCode ( code, reason: reason, wasClean: wasClean)
529+ }
514530 }
515531
516532 // Called when an error occurs.
0 commit comments