Class: RocketAMF::Pure::AMF3Serializer
- Inherits:
-
Object
- Object
- RocketAMF::Pure::AMF3Serializer
show all
- Includes:
- WriteIOHelpers
- Defined in:
- lib/rocketamf/pure/serializer.rb
Overview
AMF3 implementation of serializer
Instance Attribute Summary collapse
Instance Method Summary
collapse
#byte_order, #byte_order_little?, #pack_double, #pack_int16_network, #pack_int8, #pack_integer, #pack_word32_network
Constructor Details
Returns a new instance of AMF3Serializer.
Instance Attribute Details
#string_cache ⇒ Object
Returns the value of attribute string_cache.
132
133
134
|
# File 'lib/rocketamf/pure/serializer.rb', line 132
def string_cache
@string_cache
end
|
Instance Method Details
#serialize(obj, stream = "") ⇒ Object
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
|
# File 'lib/rocketamf/pure/serializer.rb', line 143
def serialize obj, stream = ""
if obj.respond_to?(:to_amf)
stream << obj.to_amf(self)
elsif obj.is_a?(NilClass)
write_null stream
elsif obj.is_a?(TrueClass)
write_true stream
elsif obj.is_a?(FalseClass)
write_false stream
elsif obj.is_a?(Float)
write_float obj, stream
elsif obj.is_a?(Integer)
write_integer obj, stream
elsif obj.is_a?(Symbol) || obj.is_a?(String)
write_string obj.to_s, stream
elsif obj.is_a?(Time)
write_date obj, stream
elsif obj.is_a?(Array)
write_array obj, stream
elsif obj.is_a?(Hash) || obj.is_a?(Object)
write_object obj, stream
end
stream
end
|
#version ⇒ Object
139
140
141
|
# File 'lib/rocketamf/pure/serializer.rb', line 139
def version
3
end
|
#write_array(array, stream) ⇒ Object
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
|
# File 'lib/rocketamf/pure/serializer.rb', line 220
def write_array array, stream
stream << AMF3_ARRAY_MARKER
if @object_cache[array] != nil
write_reference @object_cache[array], stream
else
@object_cache.add_obj array
= array.length << 1 = | 1 stream << pack_integer()
stream << AMF3_CLOSE_DYNAMIC_ARRAY
array.each do |elem|
serialize elem, stream
end
end
end
|
#write_date(date, stream) ⇒ Object
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
|
# File 'lib/rocketamf/pure/serializer.rb', line 204
def write_date date, stream
stream << AMF3_DATE_MARKER
if @object_cache[date] != nil
write_reference @object_cache[date], stream
else
@object_cache.add_obj date
date.utc unless date.utc?
seconds = (date.to_f * 1000).to_i
stream << pack_integer(AMF3_NULL_MARKER)
stream << pack_double(seconds)
end
end
|
#write_false(stream) ⇒ Object
181
182
183
|
# File 'lib/rocketamf/pure/serializer.rb', line 181
def write_false stream
stream << AMF3_FALSE_MARKER
end
|
#write_float(float, stream) ⇒ Object
194
195
196
197
|
# File 'lib/rocketamf/pure/serializer.rb', line 194
def write_float float, stream
stream << AMF3_DOUBLE_MARKER
stream << pack_double(float)
end
|
#write_integer(int, stream) ⇒ Object
185
186
187
188
189
190
191
192
|
# File 'lib/rocketamf/pure/serializer.rb', line 185
def write_integer int, stream
if int < MIN_INTEGER || int > MAX_INTEGER write_float int.to_f, stream
else
stream << AMF3_INTEGER_MARKER
stream << pack_integer(int)
end
end
|
#write_null(stream) ⇒ Object
173
174
175
|
# File 'lib/rocketamf/pure/serializer.rb', line 173
def write_null stream
stream << AMF3_NULL_MARKER
end
|
#write_object(obj, stream) ⇒ Object
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
|
# File 'lib/rocketamf/pure/serializer.rb', line 239
def write_object obj, stream
stream << AMF3_OBJECT_MARKER
if @object_cache[obj] != nil
write_reference @object_cache[obj], stream
else
@object_cache.add_obj obj
stream << AMF3_DYNAMIC_OBJECT
class_name = ClassMapper.get_as_class_name obj
if class_name
write_utf8_vr class_name, stream
else
stream << AMF3_ANONYMOUS_OBJECT
end
props = ClassMapper.props_for_serialization obj
props.sort.each do |key, val| write_utf8_vr key.to_s, stream
serialize val, stream
end
stream << AMF3_CLOSE_DYNAMIC_OBJECT
end
end
|
#write_reference(index, stream) ⇒ Object
168
169
170
171
|
# File 'lib/rocketamf/pure/serializer.rb', line 168
def write_reference index, stream
= index << 1 stream << pack_integer()
end
|
#write_string(str, stream) ⇒ Object
199
200
201
202
|
# File 'lib/rocketamf/pure/serializer.rb', line 199
def write_string str, stream
stream << AMF3_STRING_MARKER
write_utf8_vr str, stream
end
|
#write_true(stream) ⇒ Object
177
178
179
|
# File 'lib/rocketamf/pure/serializer.rb', line 177
def write_true stream
stream << AMF3_TRUE_MARKER
end
|