refactor. Remove var from methods and pattern matching
This commit is contained in:
parent
fff2f29c55
commit
d94a1901ca
@ -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)
|
||||
}
|
||||
dispatch_async(emitQueue) {
|
||||
for waiter in self.probeWait {
|
||||
self.write(waiter.msg, withType: waiter.type, withData: waiter.data)
|
||||
}
|
||||
|
||||
this.probeWait.removeAll(keepCapacity: false)
|
||||
self.probeWait.removeAll(keepCapacity: false)
|
||||
|
||||
if this.postWait.count != 0 {
|
||||
this.flushWaitingForPostToWebSocket()
|
||||
}
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user