rabbitmq 0.2.3 → 0.2.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +3 -0
- data/ext/rabbitmq/Rakefile +14 -9
- data/lib/rabbitmq/connection/channel_manager.rb +61 -0
- data/lib/rabbitmq/connection/event_manager.rb +55 -0
- data/lib/rabbitmq/connection/transport.rb +157 -0
- data/lib/rabbitmq/ffi.rb +4 -356
- data/lib/rabbitmq/ffi/ext.rb +12 -299
- data/lib/rabbitmq/ffi/ext/basic_properties.rb +57 -0
- data/lib/rabbitmq/ffi/ext/bytes.rb +29 -0
- data/lib/rabbitmq/ffi/ext/connection_info.rb +12 -0
- data/lib/rabbitmq/ffi/ext/field_value.rb +49 -0
- data/lib/rabbitmq/ffi/ext/frame.rb +43 -0
- data/lib/rabbitmq/ffi/ext/frame_payload_properties.rb +12 -0
- data/lib/rabbitmq/ffi/ext/method.rb +49 -0
- data/lib/rabbitmq/ffi/ext/table.rb +51 -0
- data/lib/rabbitmq/ffi/ext/timeval.rb +18 -0
- data/lib/rabbitmq/ffi/gen.rb +65 -0
- data/lib/rabbitmq/ffi/gen/access_request.rb +49 -0
- data/lib/rabbitmq/ffi/gen/access_request_ok.rb +29 -0
- data/lib/rabbitmq/ffi/gen/basic_ack.rb +36 -0
- data/lib/rabbitmq/ffi/gen/basic_cancel.rb +37 -0
- data/lib/rabbitmq/ffi/gen/basic_cancel_ok.rb +30 -0
- data/lib/rabbitmq/ffi/gen/basic_consume.rb +57 -0
- data/lib/rabbitmq/ffi/gen/basic_consume_ok.rb +30 -0
- data/lib/rabbitmq/ffi/gen/basic_deliver.rb +48 -0
- data/lib/rabbitmq/ffi/gen/basic_get.rb +40 -0
- data/lib/rabbitmq/ffi/gen/basic_get_empty.rb +30 -0
- data/lib/rabbitmq/ffi/gen/basic_get_ok.rb +47 -0
- data/lib/rabbitmq/ffi/gen/basic_nack.rb +39 -0
- data/lib/rabbitmq/ffi/gen/basic_publish.rb +47 -0
- data/lib/rabbitmq/ffi/gen/basic_qos.rb +39 -0
- data/lib/rabbitmq/ffi/gen/basic_qos_ok.rb +28 -0
- data/lib/rabbitmq/ffi/gen/basic_recover.rb +29 -0
- data/lib/rabbitmq/ffi/gen/basic_recover_async.rb +29 -0
- data/lib/rabbitmq/ffi/gen/basic_recover_ok.rb +28 -0
- data/lib/rabbitmq/ffi/gen/basic_reject.rb +36 -0
- data/lib/rabbitmq/ffi/gen/basic_return.rb +45 -0
- data/lib/rabbitmq/ffi/gen/channel_close.rb +45 -0
- data/lib/rabbitmq/ffi/gen/channel_close_ok.rb +28 -0
- data/lib/rabbitmq/ffi/gen/channel_flow.rb +29 -0
- data/lib/rabbitmq/ffi/gen/channel_flow_ok.rb +29 -0
- data/lib/rabbitmq/ffi/gen/channel_open.rb +30 -0
- data/lib/rabbitmq/ffi/gen/channel_open_ok.rb +30 -0
- data/lib/rabbitmq/ffi/gen/confirm_select.rb +29 -0
- data/lib/rabbitmq/ffi/gen/confirm_select_ok.rb +28 -0
- data/lib/rabbitmq/ffi/gen/connection_blocked.rb +30 -0
- data/lib/rabbitmq/ffi/gen/connection_close.rb +45 -0
- data/lib/rabbitmq/ffi/gen/connection_close_ok.rb +28 -0
- data/lib/rabbitmq/ffi/gen/connection_open.rb +41 -0
- data/lib/rabbitmq/ffi/gen/connection_open_ok.rb +30 -0
- data/lib/rabbitmq/ffi/gen/connection_secure.rb +30 -0
- data/lib/rabbitmq/ffi/gen/connection_secure_ok.rb +30 -0
- data/lib/rabbitmq/ffi/gen/connection_start.rb +48 -0
- data/lib/rabbitmq/ffi/gen/connection_start_ok.rb +46 -0
- data/lib/rabbitmq/ffi/gen/connection_tune.rb +39 -0
- data/lib/rabbitmq/ffi/gen/connection_tune_ok.rb +39 -0
- data/lib/rabbitmq/ffi/gen/connection_unblocked.rb +28 -0
- data/lib/rabbitmq/ffi/gen/exchange_bind.rb +52 -0
- data/lib/rabbitmq/ffi/gen/exchange_bind_ok.rb +28 -0
- data/lib/rabbitmq/ffi/gen/exchange_declare.rb +60 -0
- data/lib/rabbitmq/ffi/gen/exchange_declare_ok.rb +28 -0
- data/lib/rabbitmq/ffi/gen/exchange_delete.rb +43 -0
- data/lib/rabbitmq/ffi/gen/exchange_delete_ok.rb +28 -0
- data/lib/rabbitmq/ffi/gen/exchange_unbind.rb +52 -0
- data/lib/rabbitmq/ffi/gen/exchange_unbind_ok.rb +28 -0
- data/lib/rabbitmq/ffi/gen/queue_bind.rb +52 -0
- data/lib/rabbitmq/ffi/gen/queue_bind_ok.rb +28 -0
- data/lib/rabbitmq/ffi/gen/queue_declare.rb +56 -0
- data/lib/rabbitmq/ffi/gen/queue_declare_ok.rb +40 -0
- data/lib/rabbitmq/ffi/gen/queue_delete.rb +46 -0
- data/lib/rabbitmq/ffi/gen/queue_delete_ok.rb +29 -0
- data/lib/rabbitmq/ffi/gen/queue_purge.rb +40 -0
- data/lib/rabbitmq/ffi/gen/queue_purge_ok.rb +29 -0
- data/lib/rabbitmq/ffi/gen/queue_unbind.rb +49 -0
- data/lib/rabbitmq/ffi/gen/queue_unbind_ok.rb +28 -0
- data/lib/rabbitmq/ffi/gen/tx_commit.rb +28 -0
- data/lib/rabbitmq/ffi/gen/tx_commit_ok.rb +28 -0
- data/lib/rabbitmq/ffi/gen/tx_rollback.rb +28 -0
- data/lib/rabbitmq/ffi/gen/tx_rollback_ok.rb +28 -0
- data/lib/rabbitmq/ffi/gen/tx_select.rb +28 -0
- data/lib/rabbitmq/ffi/gen/tx_select_ok.rb +28 -0
- metadata +79 -2
@@ -0,0 +1,43 @@
|
|
1
|
+
|
2
|
+
module RabbitMQ
|
3
|
+
module FFI
|
4
|
+
|
5
|
+
class Frame
|
6
|
+
def payload
|
7
|
+
member = case self[:frame_type]
|
8
|
+
when :method; :method
|
9
|
+
when :header; :properties
|
10
|
+
when :body; :body_fragment
|
11
|
+
else; raise NotImplementedError, "frame type: #{self[:frame_type]}"
|
12
|
+
end
|
13
|
+
self[:payload][member]
|
14
|
+
end
|
15
|
+
|
16
|
+
def as_method_to_h(free=false)
|
17
|
+
# TODO: raise correct error class with enough info for appropriate action
|
18
|
+
raise "Wrong frame type for method frame of event: #{self[:frame_type]}" \
|
19
|
+
unless self[:frame_type] == :method
|
20
|
+
|
21
|
+
payload.to_h(free).merge(channel: self[:channel])
|
22
|
+
end
|
23
|
+
|
24
|
+
def as_header_to_h(free=false)
|
25
|
+
# TODO: raise correct error class with enough info for appropriate action
|
26
|
+
raise "Wrong frame type for header frame of multiframe event: #{self[:frame_type]}" \
|
27
|
+
unless self[:frame_type] == :header
|
28
|
+
|
29
|
+
properties = self[:payload][:properties]
|
30
|
+
{ header: properties.decoded.to_h(free), body_size: properties[:body_size] }
|
31
|
+
end
|
32
|
+
|
33
|
+
def as_body_to_s(free=false)
|
34
|
+
# TODO: raise correct error class with enough info for appropriate action
|
35
|
+
raise "Wrong frame type for body frame of multiframe event: #{self[:frame_type]}" \
|
36
|
+
unless self[:frame_type] == :body
|
37
|
+
|
38
|
+
self[:payload][:body_fragment].to_s(free)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
|
2
|
+
module RabbitMQ
|
3
|
+
module FFI
|
4
|
+
|
5
|
+
class Method
|
6
|
+
MethodClasses = FFI::MethodNumber.symbols.map do |name|
|
7
|
+
const_name = name.to_s.gsub(/((?:\A\w)|(?:_\w))/) { |x| x[-1].upcase }
|
8
|
+
[name, FFI.const_get(const_name)]
|
9
|
+
end.to_h.freeze
|
10
|
+
|
11
|
+
MethodNames = MethodClasses.to_a.map(&:reverse).to_h.freeze
|
12
|
+
|
13
|
+
def to_h(free=false)
|
14
|
+
{ method: self[:id],
|
15
|
+
properties: self.decoded.to_h(free) }
|
16
|
+
end
|
17
|
+
|
18
|
+
def decoded
|
19
|
+
MethodClasses.fetch(self[:id]).new(self[:decoded])
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.lookup(kls)
|
23
|
+
MethodNames.fetch(kls)
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.lookup_class(name)
|
27
|
+
MethodClasses.fetch(name)
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.from(decoded)
|
31
|
+
obj = new
|
32
|
+
obj[:id] = lookup(decoded.class)
|
33
|
+
obj[:decoded] = decoded.pointer
|
34
|
+
obj
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.has_content?(type)
|
38
|
+
case type
|
39
|
+
when :basic_publish; true
|
40
|
+
when :basic_return; true
|
41
|
+
when :basic_deliver; true
|
42
|
+
when :basic_get_ok; true
|
43
|
+
else false
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
|
2
|
+
module RabbitMQ
|
3
|
+
module FFI
|
4
|
+
|
5
|
+
class Table
|
6
|
+
include Enumerable
|
7
|
+
|
8
|
+
def each(*a, &b)
|
9
|
+
entry_ptr = self[:entries]
|
10
|
+
entries = self[:num_entries].times.map do |i|
|
11
|
+
FFI::TableEntry.new(entry_ptr + i * FFI::TableEntry.size)
|
12
|
+
end
|
13
|
+
entries.each(*a, &b)
|
14
|
+
end
|
15
|
+
|
16
|
+
def to_h(free=false)
|
17
|
+
result = self.map do |entry|
|
18
|
+
[entry[:key].to_s(free), entry[:value].to_value(free)]
|
19
|
+
end.to_h
|
20
|
+
|
21
|
+
clear if free
|
22
|
+
result
|
23
|
+
end
|
24
|
+
|
25
|
+
def free!
|
26
|
+
self.each do
|
27
|
+
entry[:key].free!
|
28
|
+
entry[:value].free!
|
29
|
+
end
|
30
|
+
FFI.free(self[:entries])
|
31
|
+
clear
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.from(params)
|
35
|
+
size = params.size
|
36
|
+
entry_ptr = Util.mem_ptr(size * FFI::TableEntry.size, release: false)
|
37
|
+
params.each_with_index do |param, idx|
|
38
|
+
entry = FFI::TableEntry.new(entry_ptr + idx * FFI::TableEntry.size)
|
39
|
+
entry[:key] = FFI::Bytes.from_s(param.first.to_s)
|
40
|
+
entry[:value] = FFI::FieldValue.from(param.last)
|
41
|
+
end
|
42
|
+
|
43
|
+
obj = new
|
44
|
+
obj[:num_entries] = size
|
45
|
+
obj[:entries] = entry_ptr
|
46
|
+
obj
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
|
2
|
+
module RabbitMQ
|
3
|
+
module FFI
|
4
|
+
|
5
|
+
class Timeval
|
6
|
+
def self.from(seconds)
|
7
|
+
obj = new
|
8
|
+
obj[:tv_sec] = Integer(seconds)
|
9
|
+
obj[:tv_usec] = Integer(Float(seconds) * 1_000_000)
|
10
|
+
obj
|
11
|
+
end
|
12
|
+
|
13
|
+
@zero = self.from(0)
|
14
|
+
class << self; attr_reader :zero; end
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
|
2
|
+
require_relative 'gen/connection_start'
|
3
|
+
require_relative 'gen/connection_start_ok'
|
4
|
+
require_relative 'gen/connection_secure'
|
5
|
+
require_relative 'gen/connection_secure_ok'
|
6
|
+
require_relative 'gen/connection_tune'
|
7
|
+
require_relative 'gen/connection_tune_ok'
|
8
|
+
require_relative 'gen/connection_open'
|
9
|
+
require_relative 'gen/connection_open_ok'
|
10
|
+
require_relative 'gen/connection_close'
|
11
|
+
require_relative 'gen/connection_close_ok'
|
12
|
+
require_relative 'gen/connection_blocked'
|
13
|
+
require_relative 'gen/connection_unblocked'
|
14
|
+
require_relative 'gen/channel_open'
|
15
|
+
require_relative 'gen/channel_open_ok'
|
16
|
+
require_relative 'gen/channel_flow'
|
17
|
+
require_relative 'gen/channel_flow_ok'
|
18
|
+
require_relative 'gen/channel_close'
|
19
|
+
require_relative 'gen/channel_close_ok'
|
20
|
+
require_relative 'gen/access_request'
|
21
|
+
require_relative 'gen/access_request_ok'
|
22
|
+
require_relative 'gen/exchange_declare'
|
23
|
+
require_relative 'gen/exchange_declare_ok'
|
24
|
+
require_relative 'gen/exchange_delete'
|
25
|
+
require_relative 'gen/exchange_delete_ok'
|
26
|
+
require_relative 'gen/exchange_bind'
|
27
|
+
require_relative 'gen/exchange_bind_ok'
|
28
|
+
require_relative 'gen/exchange_unbind'
|
29
|
+
require_relative 'gen/exchange_unbind_ok'
|
30
|
+
require_relative 'gen/queue_declare'
|
31
|
+
require_relative 'gen/queue_declare_ok'
|
32
|
+
require_relative 'gen/queue_bind'
|
33
|
+
require_relative 'gen/queue_bind_ok'
|
34
|
+
require_relative 'gen/queue_purge'
|
35
|
+
require_relative 'gen/queue_purge_ok'
|
36
|
+
require_relative 'gen/queue_delete'
|
37
|
+
require_relative 'gen/queue_delete_ok'
|
38
|
+
require_relative 'gen/queue_unbind'
|
39
|
+
require_relative 'gen/queue_unbind_ok'
|
40
|
+
require_relative 'gen/basic_qos'
|
41
|
+
require_relative 'gen/basic_qos_ok'
|
42
|
+
require_relative 'gen/basic_consume'
|
43
|
+
require_relative 'gen/basic_consume_ok'
|
44
|
+
require_relative 'gen/basic_cancel'
|
45
|
+
require_relative 'gen/basic_cancel_ok'
|
46
|
+
require_relative 'gen/basic_publish'
|
47
|
+
require_relative 'gen/basic_return'
|
48
|
+
require_relative 'gen/basic_deliver'
|
49
|
+
require_relative 'gen/basic_get'
|
50
|
+
require_relative 'gen/basic_get_ok'
|
51
|
+
require_relative 'gen/basic_get_empty'
|
52
|
+
require_relative 'gen/basic_ack'
|
53
|
+
require_relative 'gen/basic_reject'
|
54
|
+
require_relative 'gen/basic_recover_async'
|
55
|
+
require_relative 'gen/basic_recover'
|
56
|
+
require_relative 'gen/basic_recover_ok'
|
57
|
+
require_relative 'gen/basic_nack'
|
58
|
+
require_relative 'gen/tx_select'
|
59
|
+
require_relative 'gen/tx_select_ok'
|
60
|
+
require_relative 'gen/tx_commit'
|
61
|
+
require_relative 'gen/tx_commit_ok'
|
62
|
+
require_relative 'gen/tx_rollback'
|
63
|
+
require_relative 'gen/tx_rollback_ok'
|
64
|
+
require_relative 'gen/confirm_select'
|
65
|
+
require_relative 'gen/confirm_select_ok'
|
@@ -0,0 +1,49 @@
|
|
1
|
+
|
2
|
+
module RabbitMQ
|
3
|
+
module FFI
|
4
|
+
class AccessRequest < ::FFI::Struct
|
5
|
+
layout(
|
6
|
+
:realm, Bytes,
|
7
|
+
:exclusive, Boolean,
|
8
|
+
:passive, Boolean,
|
9
|
+
:active, Boolean,
|
10
|
+
:write, Boolean,
|
11
|
+
:read, Boolean
|
12
|
+
)
|
13
|
+
|
14
|
+
def self.id
|
15
|
+
:access_request
|
16
|
+
end
|
17
|
+
|
18
|
+
def id
|
19
|
+
:access_request
|
20
|
+
end
|
21
|
+
|
22
|
+
def apply(realm: nil, exclusive: nil, passive: nil, active: nil, write: nil, read: nil)
|
23
|
+
self[:realm] = Bytes.from_s(realm.to_s) if realm
|
24
|
+
self[:exclusive] = exclusive unless exclusive.nil?
|
25
|
+
self[:passive] = passive unless passive.nil?
|
26
|
+
self[:active] = active unless active.nil?
|
27
|
+
self[:write] = write unless write.nil?
|
28
|
+
self[:read] = read unless read.nil?
|
29
|
+
self
|
30
|
+
end
|
31
|
+
|
32
|
+
def to_h(free=false)
|
33
|
+
{
|
34
|
+
realm: self[:realm].to_s(free),
|
35
|
+
exclusive: self[:exclusive],
|
36
|
+
passive: self[:passive],
|
37
|
+
active: self[:active],
|
38
|
+
write: self[:write],
|
39
|
+
read: self[:read]
|
40
|
+
}
|
41
|
+
end
|
42
|
+
|
43
|
+
def free!
|
44
|
+
self[:realm].free!
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
|
2
|
+
module RabbitMQ
|
3
|
+
module FFI
|
4
|
+
class AccessRequestOk < ::FFI::Struct
|
5
|
+
layout(:ticket, :uint16)
|
6
|
+
|
7
|
+
def self.id
|
8
|
+
:access_request_ok
|
9
|
+
end
|
10
|
+
|
11
|
+
def id
|
12
|
+
:access_request_ok
|
13
|
+
end
|
14
|
+
|
15
|
+
def apply(ticket: nil)
|
16
|
+
self[:ticket] = Integer(ticket) if ticket
|
17
|
+
self
|
18
|
+
end
|
19
|
+
|
20
|
+
def to_h(free=false)
|
21
|
+
{ticket: self[:ticket]}
|
22
|
+
end
|
23
|
+
|
24
|
+
def free!
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
|
2
|
+
module RabbitMQ
|
3
|
+
module FFI
|
4
|
+
class BasicAck < ::FFI::Struct
|
5
|
+
layout(
|
6
|
+
:delivery_tag, :uint64,
|
7
|
+
:multiple, Boolean
|
8
|
+
)
|
9
|
+
|
10
|
+
def self.id
|
11
|
+
:basic_ack
|
12
|
+
end
|
13
|
+
|
14
|
+
def id
|
15
|
+
:basic_ack
|
16
|
+
end
|
17
|
+
|
18
|
+
def apply(delivery_tag: nil, multiple: nil)
|
19
|
+
self[:delivery_tag] = Integer(delivery_tag) if delivery_tag
|
20
|
+
self[:multiple] = multiple unless multiple.nil?
|
21
|
+
self
|
22
|
+
end
|
23
|
+
|
24
|
+
def to_h(free=false)
|
25
|
+
{
|
26
|
+
delivery_tag: self[:delivery_tag],
|
27
|
+
multiple: self[:multiple]
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
def free!
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
|
2
|
+
module RabbitMQ
|
3
|
+
module FFI
|
4
|
+
class BasicCancel < ::FFI::Struct
|
5
|
+
layout(
|
6
|
+
:consumer_tag, Bytes,
|
7
|
+
:nowait, Boolean
|
8
|
+
)
|
9
|
+
|
10
|
+
def self.id
|
11
|
+
:basic_cancel
|
12
|
+
end
|
13
|
+
|
14
|
+
def id
|
15
|
+
:basic_cancel
|
16
|
+
end
|
17
|
+
|
18
|
+
def apply(consumer_tag: nil, nowait: nil)
|
19
|
+
self[:consumer_tag] = Bytes.from_s(consumer_tag.to_s) if consumer_tag
|
20
|
+
self[:nowait] = nowait unless nowait.nil?
|
21
|
+
self
|
22
|
+
end
|
23
|
+
|
24
|
+
def to_h(free=false)
|
25
|
+
{
|
26
|
+
consumer_tag: self[:consumer_tag].to_s(free),
|
27
|
+
nowait: self[:nowait]
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
def free!
|
32
|
+
self[:consumer_tag].free!
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
|
2
|
+
module RabbitMQ
|
3
|
+
module FFI
|
4
|
+
class BasicCancelOk < ::FFI::Struct
|
5
|
+
layout(:consumer_tag, Bytes)
|
6
|
+
|
7
|
+
def self.id
|
8
|
+
:basic_cancel_ok
|
9
|
+
end
|
10
|
+
|
11
|
+
def id
|
12
|
+
:basic_cancel_ok
|
13
|
+
end
|
14
|
+
|
15
|
+
def apply(consumer_tag: nil)
|
16
|
+
self[:consumer_tag] = Bytes.from_s(consumer_tag.to_s) if consumer_tag
|
17
|
+
self
|
18
|
+
end
|
19
|
+
|
20
|
+
def to_h(free=false)
|
21
|
+
{consumer_tag: self[:consumer_tag].to_s(free)}
|
22
|
+
end
|
23
|
+
|
24
|
+
def free!
|
25
|
+
self[:consumer_tag].free!
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
|
2
|
+
module RabbitMQ
|
3
|
+
module FFI
|
4
|
+
class BasicConsume < ::FFI::Struct
|
5
|
+
layout(
|
6
|
+
:ticket, :uint16,
|
7
|
+
:queue, Bytes,
|
8
|
+
:consumer_tag, Bytes,
|
9
|
+
:no_local, Boolean,
|
10
|
+
:no_ack, Boolean,
|
11
|
+
:exclusive, Boolean,
|
12
|
+
:nowait, Boolean,
|
13
|
+
:arguments, Table
|
14
|
+
)
|
15
|
+
|
16
|
+
def self.id
|
17
|
+
:basic_consume
|
18
|
+
end
|
19
|
+
|
20
|
+
def id
|
21
|
+
:basic_consume
|
22
|
+
end
|
23
|
+
|
24
|
+
def apply(ticket: nil, queue: nil, consumer_tag: nil, no_local: nil, no_ack: nil, exclusive: nil, nowait: nil, arguments: nil)
|
25
|
+
self[:ticket] = Integer(ticket) if ticket
|
26
|
+
self[:queue] = Bytes.from_s(queue.to_s) if queue
|
27
|
+
self[:consumer_tag] = Bytes.from_s(consumer_tag.to_s) if consumer_tag
|
28
|
+
self[:no_local] = no_local unless no_local.nil?
|
29
|
+
self[:no_ack] = no_ack unless no_ack.nil?
|
30
|
+
self[:exclusive] = exclusive unless exclusive.nil?
|
31
|
+
self[:nowait] = nowait unless nowait.nil?
|
32
|
+
self[:arguments] = Table.from(arguments) if arguments
|
33
|
+
self
|
34
|
+
end
|
35
|
+
|
36
|
+
def to_h(free=false)
|
37
|
+
{
|
38
|
+
ticket: self[:ticket],
|
39
|
+
queue: self[:queue].to_s(free),
|
40
|
+
consumer_tag: self[:consumer_tag].to_s(free),
|
41
|
+
no_local: self[:no_local],
|
42
|
+
no_ack: self[:no_ack],
|
43
|
+
exclusive: self[:exclusive],
|
44
|
+
nowait: self[:nowait],
|
45
|
+
arguments: self[:arguments].to_h(free)
|
46
|
+
}
|
47
|
+
end
|
48
|
+
|
49
|
+
def free!
|
50
|
+
self[:queue].free!
|
51
|
+
self[:consumer_tag].free!
|
52
|
+
self[:arguments].free!
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|