@@ -147,13 +147,12 @@ public final class SocketEngine: NSObject, SocketEngineSpec, WebSocketDelegate {
147147 }
148148 }
149149
150- private func checkIfMessageIsBase64Binary( var message: String ) -> Bool {
150+ private func checkIfMessageIsBase64Binary( message: String ) -> Bool {
151151 if message. hasPrefix ( " b4 " ) {
152152 // binary in base64 string
153- message. removeRange ( Range ( start: message. startIndex,
154- end: message. startIndex. advancedBy ( 2 ) ) )
153+ let noPrefix = message [ message. startIndex. advancedBy ( 2 ) ..< message. endIndex]
155154
156- if let data = NSData ( base64EncodedString: message ,
155+ if let data = NSData ( base64EncodedString: noPrefix ,
157156 options: . IgnoreUnknownCharacters) {
158157 client? . parseBinaryData ( data)
159158 }
@@ -282,17 +281,15 @@ public final class SocketEngine: NSObject, SocketEngineSpec, WebSocketDelegate {
282281 private func flushProbeWait( ) {
283282 DefaultSocketLogger . Logger. log ( " Flushing probe wait " , type: logType)
284283
285- dispatch_async ( emitQueue) { [ weak self] in
286- if let this = self {
287- for waiter in this. probeWait {
288- this. write ( waiter. msg, withType: waiter. type, withData: waiter. data)
289- }
290-
291- this. probeWait. removeAll ( keepCapacity: false )
292-
293- if this. postWait. count != 0 {
294- this. flushWaitingForPostToWebSocket ( )
295- }
284+ dispatch_async ( emitQueue) {
285+ for waiter in self . probeWait {
286+ self . write ( waiter. msg, withType: waiter. type, withData: waiter. data)
287+ }
288+
289+ self . probeWait. removeAll ( keepCapacity: false )
290+
291+ if self . postWait. count != 0 {
292+ self . flushWaitingForPostToWebSocket ( )
296293 }
297294 }
298295 }
@@ -420,10 +417,11 @@ public final class SocketEngine: NSObject, SocketEngineSpec, WebSocketDelegate {
420417 client? . parseBinaryData ( data. subdataWithRange ( NSMakeRange ( 1 , data. length - 1 ) ) )
421418 }
422419
423- private func parseEngineMessage( var message: String, fromPolling: Bool) {
420+ private func parseEngineMessage( message: String, fromPolling: Bool) {
424421 DefaultSocketLogger . Logger. log ( " Got message: %@ " , type: logType, args: message)
425422
426423 let reader = SocketStringReader ( message: message)
424+ let fixedString : String
427425
428426 guard let type = SocketEnginePacketType ( rawValue: Int ( reader. currentCharacter) ?? - 1 ) else {
429427 if !checkIfMessageIsBase64Binary( message) {
@@ -434,22 +432,22 @@ public final class SocketEngine: NSObject, SocketEngineSpec, WebSocketDelegate {
434432 }
435433
436434 if fromPolling && type != . Noop {
437- fixDoubleUTF8 ( & message)
435+ fixedString = fixDoubleUTF8 ( message)
436+ } else {
437+ fixedString = message
438438 }
439439
440440 switch type {
441441 case . Message:
442- message. removeAtIndex ( message. startIndex)
443- handleMessage ( message)
442+ handleMessage ( fixedString [ fixedString. startIndex. successor ( ) ..< fixedString. endIndex] )
444443 case . Noop:
445444 handleNOOP ( )
446445 case . Pong:
447- handlePong ( message )
446+ handlePong ( fixedString )
448447 case . Open:
449- message. removeAtIndex ( message. startIndex)
450- handleOpen ( message)
448+ handleOpen ( fixedString [ fixedString. startIndex. successor ( ) ..< fixedString. endIndex] )
451449 case . Close:
452- handleClose ( message )
450+ handleClose ( fixedString )
453451 default :
454452 DefaultSocketLogger . Logger. log ( " Got unknown packet type " , type: logType)
455453 }
@@ -567,7 +565,6 @@ extension SocketEngine {
567565 let req = NSMutableURLRequest ( URL: NSURL ( string: urlPolling + " &sid= \( sid) &b64=1 " ) !)
568566
569567 addHeaders ( req)
570-
571568 doLongPoll ( req)
572569 }
573570
@@ -600,9 +597,9 @@ extension SocketEngine {
600597
601598 DefaultSocketLogger . Logger. log ( " Got polling response " , type: this. logType)
602599
603- if let str = NSString ( data: data!, encoding: NSUTF8StringEncoding) as? String {
604- dispatch_async ( this. parseQueue) { [ weak this ] in
605- this? . parsePollingMessage ( str)
600+ if let str = String ( data: data!, encoding: NSUTF8StringEncoding) {
601+ dispatch_async ( this. parseQueue) {
602+ this. parsePollingMessage ( str)
606603 }
607604 }
608605
@@ -666,10 +663,10 @@ extension SocketEngine {
666663
667664 this. waitingForPost = false
668665
669- dispatch_async ( this. emitQueue) { [ weak this ] in
670- if !( this? . fastUpgrade ?? true ) {
671- this? . flushWaitingForPost ( )
672- this? . doPoll ( )
666+ dispatch_async ( this. emitQueue) {
667+ if !this. fastUpgrade {
668+ this. flushWaitingForPost ( )
669+ this. doPoll ( )
673670 }
674671 }
675672 }
@@ -712,12 +709,11 @@ extension SocketEngine {
712709
713710 /// Send polling message.
714711 /// Only call on emitQueue
715- private func sendPollMessage( var msg : String , withType type: SocketEnginePacketType ,
712+ private func sendPollMessage( message : String , withType type: SocketEnginePacketType ,
716713 datas: [ NSData ] ? = nil ) {
717- DefaultSocketLogger . Logger. log ( " Sending poll: %@ as type: %@ " , type: logType, args: msg, type. rawValue)
718-
719- doubleEncodeUTF8 ( & msg)
720- let strMsg = " \( type. rawValue) \( msg) "
714+ DefaultSocketLogger . Logger. log ( " Sending poll: %@ as type: %@ " , type: logType, args: message, type. rawValue)
715+ let fixedMessage = doubleEncodeUTF8 ( message)
716+ let strMsg = " \( type. rawValue) \( fixedMessage) "
721717
722718 postWait. append ( strMsg)
723719
@@ -749,7 +745,7 @@ extension SocketEngine {
749745 ws? . writeString ( " \( type. rawValue) \( str) " )
750746
751747 for data in datas ?? [ ] {
752- if case let Either . Left( bin) = createBinaryDataForSend ( data) {
748+ if case let . Left( bin) = createBinaryDataForSend ( data) {
753749 ws? . writeData ( bin)
754750 }
755751 }
0 commit comments