Module: Bones::RPC::Adapter
- Extended by:
- Adapter
- Included in:
- Adapter
- Defined in:
- lib/bones/rpc/adapter.rb,
lib/bones/rpc/adapter/base.rb,
lib/bones/rpc/adapter/json.rb,
lib/bones/rpc/adapter/parser.rb
Defined Under Namespace
Modules: Base, JSON
Classes: Parser
Instance Method Summary
collapse
Instance Method Details
#get(adapter_name) ⇒ Object
7
8
9
|
# 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) ⇒ Object
11
12
13
|
# 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) ⇒ Object
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
# 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) ⇒ Object
15
16
17
18
19
20
21
22
23
|
# 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) ⇒ Object
25
26
27
28
|
# 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 = "") ⇒ Object
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
# 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
|