refactor. Remove var from methods and pattern matching

This commit is contained in:
Erik 2015-12-20 15:01:28 -05:00
parent fff2f29c55
commit d94a1901ca
3 changed files with 62 additions and 77 deletions

View File

@ -147,13 +147,12 @@ public final class SocketEngine: NSObject, SocketEngineSpec, WebSocketDelegate {
}
}
private func checkIfMessageIsBase64Binary(var message: String) -> Bool {
private func checkIfMessageIsBase64Binary(message: String) -> Bool {
if message.hasPrefix("b4") {
// binary in base64 string
message.removeRange(Range(start: message.startIndex,
end: message.startIndex.advancedBy(2)))
let noPrefix = message[message.startIndex.advancedBy(2)..<message.endIndex]
if let data = NSData(base64EncodedString: message,
if let data = NSData(base64EncodedString: noPrefix,
options: .IgnoreUnknownCharacters) {
client?.parseBinaryData(data)
}
@ -282,17 +281,15 @@ public final class SocketEngine: NSObject, SocketEngineSpec, WebSocketDelegate {
private func flushProbeWait() {
DefaultSocketLogger.Logger.log("Flushing probe wait", type: logType)
dispatch_async(emitQueue) {[weak self] in
if let this = self {
for waiter in this.probeWait {
this.write(waiter.msg, withType: waiter.type, withData: waiter.data)
}
this.probeWait.removeAll(keepCapacity: false)
if this.postWait.count != 0 {
this.flushWaitingForPostToWebSocket()
}
dispatch_async(emitQueue) {
for waiter in self.probeWait {
self.write(waiter.msg, withType: waiter.type, withData: waiter.data)
}
self.probeWait.removeAll(keepCapacity: false)
if self.postWait.count != 0 {
self.flushWaitingForPostToWebSocket()
}
}
}
@ -420,10 +417,11 @@ public final class SocketEngine: NSObject, SocketEngineSpec, WebSocketDelegate {
client?.parseBinaryData(data.subdataWithRange(NSMakeRange(1, data.length - 1)))
}
private func parseEngineMessage(var message: String, fromPolling: Bool) {
private func parseEngineMessage(message: String, fromPolling: Bool) {
DefaultSocketLogger.Logger.log("Got message: %@", type: logType, args: message)
let reader = SocketStringReader(message: message)
let fixedString: String
guard let type = SocketEnginePacketType(rawValue: Int(reader.currentCharacter) ?? -1) else {
if !checkIfMessageIsBase64Binary(message) {
@ -434,22 +432,22 @@ public final class SocketEngine: NSObject, SocketEngineSpec, WebSocketDelegate {
}
if fromPolling && type != .Noop {
fixDoubleUTF8(&message)
fixedString = fixDoubleUTF8(message)
} else {
fixedString = message
}
switch type {
case .Message:
message.removeAtIndex(message.startIndex)
handleMessage(message)
handleMessage(fixedString[fixedString.startIndex.successor()..<fixedString.endIndex])
case .Noop:
handleNOOP()
case .Pong:
handlePong(message)
handlePong(fixedString)
case .Open:
message.removeAtIndex(message.startIndex)
handleOpen(message)
handleOpen(fixedString[fixedString.startIndex.successor()..<fixedString.endIndex])
case .Close:
handleClose(message)
handleClose(fixedString)
default:
DefaultSocketLogger.Logger.log("Got unknown packet type", type: logType)
}
@ -567,7 +565,6 @@ extension SocketEngine {
let req = NSMutableURLRequest(URL: NSURL(string: urlPolling + "&sid=\(sid)&b64=1")!)
addHeaders(req)
doLongPoll(req)
}
@ -600,9 +597,9 @@ extension SocketEngine {
DefaultSocketLogger.Logger.log("Got polling response", type: this.logType)
if let str = NSString(data: data!, encoding: NSUTF8StringEncoding) as? String {
dispatch_async(this.parseQueue) {[weak this] in
this?.parsePollingMessage(str)
if let str = String(data: data!, encoding: NSUTF8StringEncoding) {
dispatch_async(this.parseQueue) {
this.parsePollingMessage(str)
}
}
@ -666,10 +663,10 @@ extension SocketEngine {
this.waitingForPost = false
dispatch_async(this.emitQueue) {[weak this] in
if !(this?.fastUpgrade ?? true) {
this?.flushWaitingForPost()
this?.doPoll()
dispatch_async(this.emitQueue) {
if !this.fastUpgrade {
this.flushWaitingForPost()
this.doPoll()
}
}
}
@ -712,12 +709,11 @@ extension SocketEngine {
/// Send polling message.
/// Only call on emitQueue
private func sendPollMessage(var msg: String, withType type: SocketEnginePacketType,
private func sendPollMessage(message: String, withType type: SocketEnginePacketType,
datas:[NSData]? = nil) {
DefaultSocketLogger.Logger.log("Sending poll: %@ as type: %@", type: logType, args: msg, type.rawValue)
doubleEncodeUTF8(&msg)
let strMsg = "\(type.rawValue)\(msg)"
DefaultSocketLogger.Logger.log("Sending poll: %@ as type: %@", type: logType, args: message, type.rawValue)
let fixedMessage = doubleEncodeUTF8(message)
let strMsg = "\(type.rawValue)\(fixedMessage)"
postWait.append(strMsg)
@ -749,7 +745,7 @@ extension SocketEngine {
ws?.writeString("\(type.rawValue)\(str)")
for data in datas ?? [] {
if case let Either.Left(bin) = createBinaryDataForSend(data) {
if case let .Left(bin) = createBinaryDataForSend(data) {
ws?.writeData(bin)
}
}

View File

@ -25,16 +25,20 @@
import Foundation
func fixDoubleUTF8(inout name: String) {
if let utf8 = name.dataUsingEncoding(NSISOLatin1StringEncoding),
func fixDoubleUTF8(string: String) -> String {
if let utf8 = string.dataUsingEncoding(NSISOLatin1StringEncoding),
latin1 = NSString(data: utf8, encoding: NSUTF8StringEncoding) {
name = latin1 as String
return latin1 as String
} else {
return string
}
}
func doubleEncodeUTF8(inout str: String) {
if let latin1 = str.dataUsingEncoding(NSUTF8StringEncoding),
func doubleEncodeUTF8(string: String) -> String {
if let latin1 = string.dataUsingEncoding(NSUTF8StringEncoding),
utf8 = NSString(data: latin1, encoding: NSISOLatin1StringEncoding) {
str = utf8 as String
return utf8 as String
} else {
return string
}
}

View File

@ -95,7 +95,9 @@ struct SocketPacket {
}
}
private func completeMessage(var message: String, ack: Bool) -> String {
private func completeMessage(message: String, ack: Bool) -> String {
var restOfMessage = ""
if data.count == 0 {
return message + "]"
}
@ -107,28 +109,25 @@ struct SocketPacket {
options: NSJSONWritingOptions(rawValue: 0))
let jsonString = NSString(data: jsonSend, encoding: NSUTF8StringEncoding)
message += jsonString! as String + ","
restOfMessage += jsonString! as String + ","
} catch {
DefaultSocketLogger.Logger.error("Error creating JSON object in SocketPacket.completeMessage",
type: SocketPacket.logType)
}
} else if var str = arg as? String {
str = str["\n"] ~= "\\\\n"
str = str["\r"] ~= "\\\\r"
message += "\"\(str)\","
} else if let str = arg as? String {
restOfMessage += "\"\((str["\n"] ~= "\\\\n")["\r"] ~= "\\\\r")\","
} else if arg is NSNull {
message += "null,"
restOfMessage += "null,"
} else {
message += "\(arg),"
restOfMessage += "\(arg),"
}
}
if message != "" {
message.removeAtIndex(message.endIndex.predecessor())
if restOfMessage != "" {
restOfMessage.removeAtIndex(restOfMessage.endIndex.predecessor())
}
return message + "]"
return message + restOfMessage + "]"
}
private func createAck() -> String {
@ -191,7 +190,7 @@ struct SocketPacket {
private func createPacketString() -> String {
let str: String
if type == PacketType.Event || type == PacketType.BinaryEvent {
if type == .Event || type == .BinaryEvent {
str = createMessageForEvent()
} else {
str = createAck()
@ -226,14 +225,8 @@ struct SocketPacket {
}
return newDict
} else if let arr = data as? NSArray {
let newArr = NSMutableArray(array: arr)
for i in 0..<arr.count {
newArr[i] = _fillInPlaceholders(arr[i])
}
return newArr
} else if let arr = data as? [AnyObject] {
return arr.map({_fillInPlaceholders($0)})
} else {
return data
}
@ -268,17 +261,13 @@ extension SocketPacket {
private extension SocketPacket {
static func shred(data: AnyObject, inout binary: [NSData]) -> AnyObject {
if let bin = data as? NSData {
let placeholder = ["_placeholder" :true, "num": binary.count]
let placeholder = ["_placeholder": true, "num": binary.count]
binary.append(bin)
return placeholder
} else if var arr = data as? [AnyObject] {
for i in 0..<arr.count {
arr[i] = shred(arr[i], binary: &binary)
}
return arr
} else if let arr = data as? [AnyObject] {
return arr.map({shred($0, binary: &binary)})
} else if let dict = data as? NSDictionary {
let mutDict = NSMutableDictionary(dictionary: dict)
@ -292,13 +281,9 @@ private extension SocketPacket {
}
}
static func deconstructData(var data: [AnyObject]) -> ([AnyObject], [NSData]) {
static func deconstructData(data: [AnyObject]) -> ([AnyObject], [NSData]) {
var binary = [NSData]()
for i in 0..<data.count {
data[i] = shred(data[i], binary: &binary)
}
return (data, binary)
return (data.map({shred($0, binary: &binary)}), binary)
}
}