Use guard

This commit is contained in:
Erik 2017-07-02 14:14:15 -04:00
parent 630ef27436
commit 6b4dfd578f
No known key found for this signature in database
GPG Key ID: 4930B7C5FBC1A69D

View File

@ -29,15 +29,15 @@ struct SocketPacket {
enum PacketType: Int { enum PacketType: Int {
case connect, disconnect, event, ack, error, binaryEvent, binaryAck case connect, disconnect, event, ack, error, binaryEvent, binaryAck
} }
private let placeholders: Int private let placeholders: Int
private static let logType = "SocketPacket" private static let logType = "SocketPacket"
let nsp: String let nsp: String
let id: Int let id: Int
let type: PacketType let type: PacketType
var binary: [Data] var binary: [Data]
var data: [Any] var data: [Any]
var args: [Any] { var args: [Any] {
@ -47,20 +47,20 @@ struct SocketPacket {
return data return data
} }
} }
var description: String { var description: String {
return "SocketPacket {type: \(String(type.rawValue)); data: " + return "SocketPacket {type: \(String(type.rawValue)); data: " +
"\(String(describing: data)); id: \(id); placeholders: \(placeholders); nsp: \(nsp)}" "\(String(describing: data)); id: \(id); placeholders: \(placeholders); nsp: \(nsp)}"
} }
var event: String { var event: String {
return String(describing: data[0]) return String(describing: data[0])
} }
var packetString: String { var packetString: String {
return createPacketString() return createPacketString()
} }
init(type: PacketType, data: [Any] = [Any](), id: Int = -1, nsp: String, placeholders: Int = 0, init(type: PacketType, data: [Any] = [Any](), id: Int = -1, nsp: String, placeholders: Int = 0,
binary: [Data] = [Data]()) { binary: [Data] = [Data]()) {
self.data = data self.data = data
@ -70,14 +70,14 @@ struct SocketPacket {
self.placeholders = placeholders self.placeholders = placeholders
self.binary = binary self.binary = binary
} }
mutating func addData(_ data: Data) -> Bool { mutating func addData(_ data: Data) -> Bool {
if placeholders == binary.count { if placeholders == binary.count {
return true return true
} }
binary.append(data) binary.append(data)
if placeholders == binary.count { if placeholders == binary.count {
fillInPlaceholders() fillInPlaceholders()
return true return true
@ -85,22 +85,19 @@ struct SocketPacket {
return false return false
} }
} }
private func completeMessage(_ message: String) -> String { private func completeMessage(_ message: String) -> String {
if data.count == 0 { guard data.count != 0 else { return message + "[]" }
return message + "[]"
}
guard let jsonSend = try? data.toJSON(), let jsonString = String(data: jsonSend, encoding: .utf8) else { guard let jsonSend = try? data.toJSON(), let jsonString = String(data: jsonSend, encoding: .utf8) else {
DefaultSocketLogger.Logger.error("Error creating JSON object in SocketPacket.completeMessage", DefaultSocketLogger.Logger.error("Error creating JSON object in SocketPacket.completeMessage",
type: SocketPacket.logType) type: SocketPacket.logType)
return message + "[]" return message + "[]"
} }
return message + jsonString return message + jsonString
} }
private func createPacketString() -> String { private func createPacketString() -> String {
let typeString = String(type.rawValue) let typeString = String(type.rawValue)
// Binary count? // Binary count?
@ -109,17 +106,17 @@ struct SocketPacket {
let nspString = binaryCountString + (nsp != "/" ? "\(nsp)," : "") let nspString = binaryCountString + (nsp != "/" ? "\(nsp)," : "")
// Ack number? // Ack number?
let idString = nspString + (id != -1 ? String(id) : "") let idString = nspString + (id != -1 ? String(id) : "")
return completeMessage(idString) return completeMessage(idString)
} }
// Called when we have all the binary data for a packet // Called when we have all the binary data for a packet
// calls _fillInPlaceholders, which replaces placeholders with the // calls _fillInPlaceholders, which replaces placeholders with the
// corresponding binary // corresponding binary
private mutating func fillInPlaceholders() { private mutating func fillInPlaceholders() {
data = data.map(_fillInPlaceholders) data = data.map(_fillInPlaceholders)
} }
// Helper method that looks for placeholders // Helper method that looks for placeholders
// If object is a collection it will recurse // If object is a collection it will recurse
// Returns the object if it is not a placeholder or the corresponding // Returns the object if it is not a placeholder or the corresponding
@ -132,9 +129,9 @@ struct SocketPacket {
} else { } else {
return dict.reduce(JSON(), {cur, keyValue in return dict.reduce(JSON(), {cur, keyValue in
var cur = cur var cur = cur
cur[keyValue.0] = _fillInPlaceholders(keyValue.1) cur[keyValue.0] = _fillInPlaceholders(keyValue.1)
return cur return cur
}) })
} }
@ -161,12 +158,12 @@ extension SocketPacket {
return .error return .error
} }
} }
static func packetFromEmit(_ items: [Any], id: Int, nsp: String, ack: Bool) -> SocketPacket { static func packetFromEmit(_ items: [Any], id: Int, nsp: String, ack: Bool) -> SocketPacket {
let (parsedData, binary) = deconstructData(items) let (parsedData, binary) = deconstructData(items)
let packet = SocketPacket(type: findType(binary.count, ack: ack), data: parsedData, let packet = SocketPacket(type: findType(binary.count, ack: ack), data: parsedData,
id: id, nsp: nsp, binary: binary) id: id, nsp: nsp, binary: binary)
return packet return packet
} }
} }
@ -175,32 +172,32 @@ private extension SocketPacket {
// Recursive function that looks for NSData in collections // Recursive function that looks for NSData in collections
static func shred(_ data: Any, binary: inout [Data]) -> Any { static func shred(_ data: Any, binary: inout [Data]) -> Any {
let placeholder = ["_placeholder": true, "num": binary.count] as JSON let placeholder = ["_placeholder": true, "num": binary.count] as JSON
switch data { switch data {
case let bin as Data: case let bin as Data:
binary.append(bin) binary.append(bin)
return placeholder return placeholder
case let arr as [Any]: case let arr as [Any]:
return arr.map({shred($0, binary: &binary)}) return arr.map({shred($0, binary: &binary)})
case let dict as JSON: case let dict as JSON:
return dict.reduce(JSON(), {cur, keyValue in return dict.reduce(JSON(), {cur, keyValue in
var mutCur = cur var mutCur = cur
mutCur[keyValue.0] = shred(keyValue.1, binary: &binary) mutCur[keyValue.0] = shred(keyValue.1, binary: &binary)
return mutCur return mutCur
}) })
default: default:
return data return data
} }
} }
// Removes binary data from emit data // Removes binary data from emit data
// Returns a type containing the de-binaryed data and the binary // Returns a type containing the de-binaryed data and the binary
static func deconstructData(_ data: [Any]) -> ([Any], [Data]) { static func deconstructData(_ data: [Any]) -> ([Any], [Data]) {
var binary = [Data]() var binary = [Data]()
return (data.map({shred($0, binary: &binary)}), binary) return (data.map({shred($0, binary: &binary)}), binary)
} }
} }