Use guard
This commit is contained in:
parent
630ef27436
commit
6b4dfd578f
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user