Class: AMF::Pure::Response

Inherits:
Object
  • Object
show all
Includes:
WriteIOHelpers
Defined in:
lib/amf/pure/remoting.rb

Overview

AMF response object wrapper, it is responsible for serializing the AMF response

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from WriteIOHelpers

#byte_order, #byte_order_little?, #pack_double, #pack_int16_network, #pack_int8, #pack_integer, #pack_word32_network

Constructor Details

#initializeResponse

Returns a new instance of Response.



55
56
57
58
59
# File 'lib/amf/pure/remoting.rb', line 55

def initialize
  @amf_version = 3
  @headers = []
  @messages = []
end

Instance Attribute Details

#amf_versionObject

Returns the value of attribute amf_version.



53
54
55
# File 'lib/amf/pure/remoting.rb', line 53

def amf_version
  @amf_version
end

#headersObject

Returns the value of attribute headers.



53
54
55
# File 'lib/amf/pure/remoting.rb', line 53

def headers
  @headers
end

#messagesObject

Returns the value of attribute messages.



53
54
55
# File 'lib/amf/pure/remoting.rb', line 53

def messages
  @messages
end

Instance Method Details

#serializeObject



61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/amf/pure/remoting.rb', line 61

def serialize
  stream = ""

  # Write version
  stream << pack_int16_network(@amf_version)

  # Write headers
  stream << pack_int16_network(@headers.length) # Header count
  @headers.each do |h|
    stream << pack_int16_network(h.name.length)
    stream << h.name
    stream << pack_int8(h.must_understand ? 1 : 0)
    stream << pack_word32_network(-1)
    stream << AMF.serialize(h.data, 0)
  end

  # Write messages
  stream << pack_int16_network(@messages.length) # Message count
  @messages.each do |m|
    stream << pack_int16_network(m.target_uri.length)
    stream << m.target_uri

    stream << pack_int16_network(m.response_uri.length)
    stream << m.response_uri

    stream << pack_word32_network(-1)
    stream << AMF0_AMF3_MARKER if @amf_version == 3
    stream << AMF.serialize(m.data, @amf_version)
  end

  stream
end