@@ -29,15 +29,15 @@ struct SocketPacket {
29
29
enum PacketType : Int {
30
30
case connect, disconnect, event, ack, error, binaryEvent, binaryAck
31
31
}
32
-
32
+
33
33
private let placeholders : Int
34
-
34
+
35
35
private static let logType = " SocketPacket "
36
36
37
37
let nsp : String
38
38
let id : Int
39
39
let type : PacketType
40
-
40
+
41
41
var binary : [ Data ]
42
42
var data : [ Any ]
43
43
var args : [ Any ] {
@@ -47,20 +47,20 @@ struct SocketPacket {
47
47
return data
48
48
}
49
49
}
50
-
50
+
51
51
var description : String {
52
52
return " SocketPacket {type: \( String ( type. rawValue) ) ; data: " +
53
53
" \( String ( describing: data) ) ; id: \( id) ; placeholders: \( placeholders) ; nsp: \( nsp) } "
54
54
}
55
-
55
+
56
56
var event : String {
57
57
return String ( describing: data [ 0 ] )
58
58
}
59
-
59
+
60
60
var packetString : String {
61
61
return createPacketString ( )
62
62
}
63
-
63
+
64
64
init ( type: PacketType , data: [ Any ] = [ Any] ( ) , id: Int = - 1 , nsp: String , placeholders: Int = 0 ,
65
65
binary: [ Data ] = [ Data] ( ) ) {
66
66
self . data = data
@@ -70,37 +70,34 @@ struct SocketPacket {
70
70
self . placeholders = placeholders
71
71
self . binary = binary
72
72
}
73
-
73
+
74
74
mutating func addData( _ data: Data ) -> Bool {
75
75
if placeholders == binary. count {
76
76
return true
77
77
}
78
-
78
+
79
79
binary. append ( data)
80
-
80
+
81
81
if placeholders == binary. count {
82
82
fillInPlaceholders ( )
83
83
return true
84
84
} else {
85
85
return false
86
86
}
87
87
}
88
-
88
+
89
89
private func completeMessage( _ message: String ) -> String {
90
- if data. count == 0 {
91
- return message + " [] "
92
- }
93
-
90
+ guard data. count != 0 else { return message + " [] " }
94
91
guard let jsonSend = try ? data. toJSON ( ) , let jsonString = String ( data: jsonSend, encoding: . utf8) else {
95
92
DefaultSocketLogger . Logger. error ( " Error creating JSON object in SocketPacket.completeMessage " ,
96
93
type: SocketPacket . logType)
97
-
94
+
98
95
return message + " [] "
99
96
}
100
-
97
+
101
98
return message + jsonString
102
99
}
103
-
100
+
104
101
private func createPacketString( ) -> String {
105
102
let typeString = String ( type. rawValue)
106
103
// Binary count?
@@ -109,17 +106,17 @@ struct SocketPacket {
109
106
let nspString = binaryCountString + ( nsp != " / " ? " \( nsp) , " : " " )
110
107
// Ack number?
111
108
let idString = nspString + ( id != - 1 ? String ( id) : " " )
112
-
109
+
113
110
return completeMessage ( idString)
114
111
}
115
-
112
+
116
113
// Called when we have all the binary data for a packet
117
114
// calls _fillInPlaceholders, which replaces placeholders with the
118
115
// corresponding binary
119
116
private mutating func fillInPlaceholders( ) {
120
117
data = data. map ( _fillInPlaceholders)
121
118
}
122
-
119
+
123
120
// Helper method that looks for placeholders
124
121
// If object is a collection it will recurse
125
122
// Returns the object if it is not a placeholder or the corresponding
@@ -132,9 +129,9 @@ struct SocketPacket {
132
129
} else {
133
130
return dict. reduce ( JSON ( ) , { cur, keyValue in
134
131
var cur = cur
135
-
132
+
136
133
cur [ keyValue. 0 ] = _fillInPlaceholders ( keyValue. 1 )
137
-
134
+
138
135
return cur
139
136
} )
140
137
}
@@ -161,46 +158,45 @@ extension SocketPacket {
161
158
return . error
162
159
}
163
160
}
164
-
161
+
165
162
static func packetFromEmit( _ items: [ Any ] , id: Int , nsp: String , ack: Bool ) -> SocketPacket {
166
163
let ( parsedData, binary) = deconstructData ( items)
167
- let packet = SocketPacket ( type: findType ( binary. count, ack: ack) , data: parsedData,
168
- id: id, nsp: nsp, binary: binary)
169
-
170
- return packet
164
+
165
+ return SocketPacket ( type: findType ( binary. count, ack: ack) , data: parsedData, id: id, nsp: nsp,
166
+ binary: binary)
171
167
}
172
168
}
173
169
174
170
private extension SocketPacket {
175
171
// Recursive function that looks for NSData in collections
176
172
static func shred( _ data: Any , binary: inout [ Data ] ) -> Any {
177
173
let placeholder = [ " _placeholder " : true , " num " : binary. count] as JSON
178
-
174
+
179
175
switch data {
180
176
case let bin as Data :
181
177
binary. append ( bin)
182
-
178
+
183
179
return placeholder
184
180
case let arr as [ Any ] :
185
181
return arr. map ( { shred ( $0, binary: & binary) } )
186
182
case let dict as JSON :
187
183
return dict. reduce ( JSON ( ) , { cur, keyValue in
188
184
var mutCur = cur
189
-
185
+
190
186
mutCur [ keyValue. 0 ] = shred ( keyValue. 1 , binary: & binary)
191
-
187
+
192
188
return mutCur
193
189
} )
194
190
default :
195
191
return data
196
192
}
197
193
}
198
-
194
+
199
195
// Removes binary data from emit data
200
196
// Returns a type containing the de-binaryed data and the binary
201
197
static func deconstructData( _ data: [ Any ] ) -> ( [ Any ] , [ Data ] ) {
202
198
var binary = [ Data] ( )
203
-
204
- return ( data. map ( { shred ( $0, binary: & binary) } ) , binary)
199
+
200
+ return ( data. map ( { shred ( $0, binary: & binary) } ) , binary)
205
201
}
206
202
}
0 commit comments