Class: GorgonBunny::Framing::IO::Frame

Inherits:
GorgonAMQ::Protocol::Frame show all
Defined in:
lib/gorgon_bunny/lib/gorgon_bunny/framing.rb

Constant Summary

Constants inherited from GorgonAMQ::Protocol::Frame

GorgonAMQ::Protocol::Frame::CHANNEL_RANGE, GorgonAMQ::Protocol::Frame::CLASSES, GorgonAMQ::Protocol::Frame::FINAL_OCTET, GorgonAMQ::Protocol::Frame::TYPES, GorgonAMQ::Protocol::Frame::TYPES_OPTIONS, GorgonAMQ::Protocol::Frame::TYPES_REVERSE

Class Method Summary collapse

Methods inherited from GorgonAMQ::Protocol::Frame

#__new__, decode_header, encode, encode_to_array, encoded_payload, #final?, find_type, new

Class Method Details

.decode(io) ⇒ Object

Raises:



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/gorgon_bunny/lib/gorgon_bunny/framing.rb', line 38

def self.decode(io)
  header = io.read(7)
  type, channel, size = self.decode_header(header)
  data = io.read_fully(size + 1)
  payload, frame_end = data[PAYLOAD_SLICE], data[-1, 1]

  # 1) the size is miscalculated
  if payload.bytesize != size
    raise BadLengthError.new(size, payload.bytesize)
  end

  # 2) the size is OK, but the string doesn't end with FINAL_OCTET
  raise NoFinalOctetError.new if frame_end != GorgonAMQ::Protocol::Frame::FINAL_OCTET
  self.new(type, payload, channel)
end