class AMQ::Protocol::Frame

Constants

CHANNEL_RANGE
CLASSES
FINAL_OCTET
TYPES
TYPES_OPTIONS
TYPES_REVERSE

Public Class Methods

__new__(original_type, *args)
Alias for: new
decode(*) click to toggle source
# File lib/amq/protocol/frame.rb, line 50
      def self.decode(*)
        raise NotImplementedError.new <<-EOF
You are supposed to redefine this method, because it's dependent on used IO adapter.

This functionality is part of the https://github.com/ruby-amqp/amq-client library.
        EOF
      end
decode_header(header) click to toggle source
# File lib/amq/protocol/frame.rb, line 58
def self.decode_header(header)
  raise EmptyResponseError if header == nil || header.empty?

  type_id, channel, size = header.unpack(PACK_CHAR_UINT16_UINT32)
  type = TYPES_REVERSE[type_id]
  raise FrameTypeError.new(TYPES_OPTIONS) unless type
  [type, channel, size]
end
encode(type, payload, channel) click to toggle source
# File lib/amq/protocol/frame.rb, line 30
def self.encode(type, payload, channel)
  encode_to_array(type, payload, channel).join
end
encode_to_array(type, payload, channel) click to toggle source

The channel number is 0 for all frames which are global to the connection and 1-65535 for frames that refer to specific channels.

# File lib/amq/protocol/frame.rb, line 20
def self.encode_to_array(type, payload, channel)
  raise RuntimeError.new("Channel has to be 0 or an integer in range 1..65535 but was #{channel.inspect}") unless CHANNEL_RANGE.include?(channel)
  raise RuntimeError.new("Payload can't be nil") if payload.nil?
  components = []
  components << [find_type(type), channel, payload.bytesize].pack(PACK_CHAR_UINT16_UINT32)
  components << encoded_payload(payload)
  components << FINAL_OCTET
  components
end
encoded_payload(payload) click to toggle source
# File lib/amq/protocol/frame.rb, line 11
def self.encoded_payload(payload)
  if payload.respond_to?(:force_encoding) && payload.encoding.name != 'BINARY'
    # Only copy if we have to.
    payload = payload.dup.force_encoding('BINARY')
  end
  payload
end
find_type(type) click to toggle source
# File lib/amq/protocol/frame.rb, line 44
def self.find_type(type)
  type_id = if Symbol === type then TYPES[type] else type end
  raise FrameTypeError.new(TYPES_OPTIONS) if type == nil || !TYPES_REVERSE.has_key?(type_id)
  type_id
end
new(original_type, *args) click to toggle source
# File lib/amq/protocol/frame.rb, line 38
def self.new(original_type, *args)
  type_id = find_type(original_type)
  klass = CLASSES[type_id]
  klass.new(*args)
end
Also aliased as: __new__

Public Instance Methods

final?() click to toggle source
# File lib/amq/protocol/frame.rb, line 67
def final?
  true
end