class Bones::RPC::Protocol::ExtMessage

Public Class Methods

deserialize(buffer, adapter = nil) click to toggle source
# File lib/bones/rpc/protocol/ext_message.rb, line 74
def self.deserialize(buffer, adapter = nil)
  message = allocate
  message.deserialize_ext_code(buffer)
  message.deserialize_ext_length(buffer)
  message.deserialize_ext_type(buffer)
  message.deserialize_ext_head(buffer)
  message
end

Public Instance Methods

data() click to toggle source
# File lib/bones/rpc/protocol/ext_message.rb, line 64
def data
  (self.class.fields - ExtMessage.fields).inject("".force_encoding('BINARY')) do |buffer, field|
    send("serialize_#{field}", buffer)
  end
end
datasize() click to toggle source
# File lib/bones/rpc/protocol/ext_message.rb, line 70
def datasize
  data.bytesize
end
deserialize_ext_length(buffer) click to toggle source
# File lib/bones/rpc/protocol/ext_message.rb, line 41
def deserialize_ext_length(buffer)
  self.ext_length, = case ext_code
  when 0xC7
    buffer.read(1).unpack('C')
  when 0xC8
    buffer.read(2).unpack('n')
  when 0xC9
    buffer.read(4).unpack('N')
  end
end
ext_code() click to toggle source
# File lib/bones/rpc/protocol/ext_message.rb, line 18
def ext_code
  @ext_code ||= begin
    len = datasize
    if len <= 0xFF
      0xC7
    elsif len <= 0xFFFF
      0xC8
    elsif len <= 0xFFFFFFFF
      0xC9
    else
      raise ArgumentError, "datasize too large: #{len} (max #{0xFFFFFFFF} bytes)"
    end
  end
end
ext_length() click to toggle source
# File lib/bones/rpc/protocol/ext_message.rb, line 33
def ext_length
  @ext_length ||= datasize + 1
end
ext_type() click to toggle source
# File lib/bones/rpc/protocol/ext_message.rb, line 37
def ext_type
  @ext_type ||= 0x0D
end
serialize_ext_length(buffer) click to toggle source
# File lib/bones/rpc/protocol/ext_message.rb, line 52
def serialize_ext_length(buffer)
  packer = case ext_code
  when 0xC7
    'C'
  when 0xC8
    'n'
  when 0xC9
    'N'
  end
  buffer << [ext_length].pack(packer)
end