Sha256: 74d025f5fa56de1a583f7717befdb29a24aed363ab0ddf8bfec131a8793fcdd6

Contents?: true

Size: 1.34 KB

Versions: 10

Compression:

Stored size: 1.34 KB

Contents

module AMQP
  class Frame #:nodoc: all
    def initialize payload = nil, channel = 0
      @channel, @payload = channel, payload
    end
    attr_accessor :channel, :payload

    def id
      self.class::ID
    end
    
    def to_binary
      buf = Buffer.new
      buf.write :octet, id
      buf.write :short, channel
      buf.write :longstr, payload
      buf.write :octet, FOOTER
      buf.rewind
      buf
    end

    def to_s
      to_binary.to_s
    end

    def == frame
      [ :id, :channel, :payload ].inject(true) do |eql, field|
        eql and __send__(field) == frame.__send__(field)
      end
    end
    
    class Method
      def initialize payload = nil, channel = 0
        super
        unless @payload.is_a? Protocol::Class::Method or @payload.nil?
          @payload = Protocol.parse(@payload)
        end
      end
    end

    class Header
      def initialize payload = nil, channel = 0
        super
        unless @payload.is_a? Protocol::Header or @payload.nil?
          @payload = Protocol::Header.new(@payload)
        end
      end
    end

    class Body; end

    def self.parse buf
      buf = Buffer.new(buf) unless buf.is_a? Buffer
      buf.extract do
        id, channel, payload, footer = buf.read(:octet, :short, :longstr, :octet)
        Frame.types[id].new(payload, channel) if footer == FOOTER
      end
    end
  end
end

Version data entries

10 entries across 10 versions & 2 rubygems

Version Path
celldee-bunny-0.0.6 lib/amqp/frame.rb
celldee-bunny-0.0.7 lib/amqp/frame.rb
celldee-bunny-0.0.8 lib/amqp/frame.rb
celldee-bunny-0.0.9 lib/amqp/frame.rb
celldee-bunny-0.1.0 lib/amqp/frame.rb
celldee-bunny-0.1.1 lib/amqp/frame.rb
bunny-0.1.1 lib/amqp/frame.rb
bunny-0.1.0 lib/amqp/frame.rb
bunny-0.0.9 lib/amqp/frame.rb
bunny-0.0.8 lib/amqp/frame.rb