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