module Bones::RPC::Adapter
Public Instance Methods
get(adapter_name)
click to toggle source
# File lib/bones/rpc/adapter.rb, line 7 def get(adapter_name) adapters[adapter_name] || raise(Errors::InvalidAdapter, "Unknown adapter #{adapter_name.inspect}") end
get_by_ext_head(head)
click to toggle source
# File lib/bones/rpc/adapter.rb, line 11 def get_by_ext_head(head) ext_heads[head] || raise(Errors::InvalidExtMessage, "Unknown adapter for ext head #{head.inspect}") end
read_ext(buffer)
click to toggle source
# File lib/bones/rpc/adapter.rb, line 30 def read_ext(buffer) ext_code, = buffer.read(1).unpack('C') 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 ext_type, = buffer.read(1).unpack('c') ext_data = buffer.read(ext_length) return ext_data end
register(adapter)
click to toggle source
# File lib/bones/rpc/adapter.rb, line 15 def register(adapter) adapter.send(:attr_reader, :adapter_name) adapter.send(:include, Adapter::Base) adapter.send(:extend, adapter) adapters[adapter] ||= adapter adapters[adapter.adapter_name] ||= adapter adapters[adapter.adapter_name.to_s] ||= adapter return adapter end
register_ext_head(adapter, head)
click to toggle source
# File lib/bones/rpc/adapter.rb, line 25 def register_ext_head(adapter, head) ext_heads[head] ||= adapter return adapter end
write_ext(head, data, buffer = "")
click to toggle source
# File lib/bones/rpc/adapter.rb, line 45 def write_ext(head, data, buffer = "") ext_length = data.bytesize + 1 ext_code = if ext_length <= 0xFF 0xC7 elsif ext_length <= 0xFFFF 0xC8 elsif ext_length <= 0xFFFFFFFF 0xC9 else raise ArgumentError, "datasize too large: #{ext_length} (max #{0xFFFFFFFF} bytes)" end buffer << [ext_code].pack('C') ext_length_packer = case ext_code when 0xC7 'C' when 0xC8 'n' when 0xC9 'N' else raise ArgumentError, "bad ext_code: #{ext_code} (should be one of #{0xC7}, #{0xC8}, #{0xC9})" end buffer << [ext_length].pack(ext_length_packer) ext_type = 0x0D buffer << [ext_type].pack('c') buffer << [head].pack('C') buffer << data.force_encoding('BINARY') end
Private Instance Methods
adapters()
click to toggle source
# File lib/bones/rpc/adapter.rb, line 76 def adapters @adapters ||= {} end
ext_heads()
click to toggle source
# File lib/bones/rpc/adapter.rb, line 80 def ext_heads @ext_heads ||= {} end