qpid_proton 0.27.1 → 0.28.0

Sign up to get free protection for your applications and to get access to all the features.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qpid_proton
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.27.1
4
+ version: 0.28.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Darryl L. Pierce
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2019-05-06 00:00:00.000000000 Z
12
+ date: 2019-05-07 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: |
15
15
  Proton is a high performance, lightweight messaging library. It can be used in
@@ -91,21 +91,6 @@ files:
91
91
  - lib/util/schedule.rb
92
92
  - lib/util/version.rb
93
93
  - lib/util/wrapper.rb
94
- - tests/old-examples/broker.rb
95
- - tests/old-examples/client.rb
96
- - tests/old-examples/direct_recv.rb
97
- - tests/old-examples/direct_send.rb
98
- - tests/old-examples/helloworld.rb
99
- - tests/old-examples/helloworld_direct.rb
100
- - tests/old-examples/lib/debugging.rb
101
- - tests/old-examples/lib/driver.rb
102
- - tests/old-examples/lib/qpid_examples.rb
103
- - tests/old-examples/lib/selectable.rb
104
- - tests/old-examples/lib/send_and_receive.rb
105
- - tests/old-examples/old_example_test.rb
106
- - tests/old-examples/server.rb
107
- - tests/old-examples/simple_recv.rb
108
- - tests/old-examples/simple_send.rb
109
94
  - tests/test_connection_driver.rb
110
95
  - tests/test_container.rb
111
96
  - tests/test_container_sasl.rb
@@ -1,200 +0,0 @@
1
- # Licensed to the Apache Software Foundation (ASF) under one
2
- # or more contributor license agreements. See the NOTICE file
3
- # distributed with this work for additional information
4
- # regarding copyright ownership. The ASF licenses this file
5
- # to you under the Apache License, Version 2.0 (the
6
- # "License"); you may not use this file except in compliance
7
- # with the License. You may obtain a copy of the License at
8
- #
9
- # http://www.apache.org/licenses/LICENSE-2.0
10
- #
11
- # Unless required by applicable law or agreed to in writing,
12
- # software distributed under the License is distributed on an
13
- # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
- # KIND, either express or implied. See the License for the
15
- # specific language governing permissions and limitations
16
- # under the License.
17
-
18
-
19
- require 'qpid_proton'
20
- require 'optparse'
21
- require 'pathname'
22
-
23
- require_relative 'lib/debugging'
24
-
25
- class Exchange
26
-
27
- include Debugging
28
-
29
- def initialize(dynamic = false)
30
- @dynamic = dynamic
31
- @queue = Queue.new
32
- @consumers = []
33
- end
34
-
35
- def subscribe(consumer)
36
- debug("subscribing #{consumer}") if $options[:debug]
37
- @consumers << (consumer)
38
- debug(" there are #{@consumers.size} consumers") if $options[:debug]
39
- end
40
-
41
- def unsubscribe(consumer)
42
- debug("unsubscribing #{consumer}") if $options[:debug]
43
- if @consumers.include?(consumer)
44
- @consumers.delete(consumer)
45
- else
46
- debug(" consumer doesn't exist") if $options[:debug]
47
- end
48
- debug(" there are #{@consumers.size} consumers") if $options[:debug]
49
- @consumers.empty? && (@dynamic || @queue.empty?)
50
- end
51
-
52
- def publish(message)
53
- debug("queueing message: #{message.body}") if $options[:debug]
54
- @queue << message
55
- self.dispatch
56
- end
57
-
58
- def dispatch(consumer = nil)
59
- debug("dispatching: consumer=#{consumer}") if $options[:debug]
60
- if consumer
61
- c = [consumer]
62
- else
63
- c = @consumers
64
- end
65
-
66
- while self.deliver_to(c) do
67
- end
68
- end
69
-
70
- def deliver_to(consumers)
71
- debug("delivering to #{consumers.size} consumer(s)") if $options[:debug]
72
- result = false
73
- consumers.each do |consumer|
74
- debug(" current consumer=#{consumer} credit=#{consumer.credit}") if $options[:debug]
75
- if consumer.credit > 0 && !@queue.empty?
76
- consumer.send(@queue.pop(true))
77
- result = true
78
- end
79
- end
80
- return result
81
- end
82
-
83
- end
84
-
85
- class Broker < Qpid::Proton::Handler::MessagingHandler
86
-
87
- include Debugging
88
-
89
- def initialize(url)
90
- super()
91
- @url = url
92
- @queues = {}
93
- end
94
-
95
- def on_start(event)
96
- debug("on_start event") if $options[:debug]
97
- @acceptor = event.container.listen(@url)
98
- print "Listening on #{@url}\n"
99
- STDOUT.flush
100
- end
101
-
102
- def queue(address)
103
- debug("fetching queue for #{address}: (there are #{@queues.size} queues)") if $options[:debug]
104
- unless @queues.has_key?(address)
105
- debug(" creating new queue") if $options[:debug]
106
- @queues[address] = Exchange.new
107
- else
108
- debug(" using existing queue") if $options[:debug]
109
- end
110
- result = @queues[address]
111
- debug(" returning #{result}") if $options[:debug]
112
- return result
113
- end
114
-
115
- def on_link_opening(event)
116
- debug("processing on_link_opening") if $options[:debug]
117
- debug("link is#{event.link.sender? ? '' : ' not'} a sender") if $options[:debug]
118
- if event.link.sender?
119
- if event.link.remote_source.dynamic?
120
- address = SecureRandom.uuid
121
- event.link.source.address = address
122
- q = Exchange.new(true)
123
- @queues[address] = q
124
- q.subscribe(event.link)
125
- elsif event.link.remote_source.address
126
- event.link.source.address = event.link.remote_source.address
127
- self.queue(event.link.source.address).subscribe(event.link)
128
- end
129
- elsif event.link.remote_target.address
130
- event.link.target.address = event.link.remote_target.address
131
- end
132
- end
133
-
134
- def unsubscribe(link)
135
- debug("unsubscribing #{link.address}") if $options[:debug]
136
- if @queues.has_key?(link.source.address)
137
- if @queues[link.source.address].unsubscribe(link)
138
- @queues.delete(link.source.address)
139
- end
140
- end
141
- end
142
-
143
- def on_link_closing(event)
144
- self.unsubscribe(event.link) if event.link.sender?
145
- end
146
-
147
- def on_connection_closing(event)
148
- self.remove_stale_consumers(event.connection)
149
- end
150
-
151
- def on_disconnected(event)
152
- self.remove_stale_consumers(event.connection)
153
- end
154
-
155
- def remove_stale_consumers(connection)
156
- l = connection.link_head(Qpid::Proton::Endpoint::REMOTE_ACTIVE)
157
- while !l.nil?
158
- self.unsubscribe(l) if l.sender?
159
- l = l.next(Qpid::Proton::Endpoint::REMOTE_ACTIVE)
160
- end
161
- end
162
-
163
- def on_sendable(event)
164
- debug("on_sendable event") if $options[:debug]
165
- q = self.queue(event.link.source.address)
166
- debug(" dispatching #{event.message} to #{q}") if $options[:debug]
167
- q.dispatch(event.link)
168
- end
169
-
170
- def on_message(event)
171
- debug("on_message event") if $options[:debug]
172
- q = self.queue(event.link.target.address)
173
- debug(" dispatching #{event.message} to #{q}") if $options[:debug]
174
- q.publish(event.message)
175
- end
176
-
177
- end
178
-
179
- $options = {
180
- :address => "localhost:5672",
181
- :debug => false
182
- }
183
-
184
- OptionParser.new do |opts|
185
- opts.banner = "Usage: #{Pathname.new(__FILE__).basename} [$options]"
186
-
187
- opts.on("-a", "--address=ADDRESS", "Send messages to ADDRESS (def. #{$options[:address]}).") do |address|
188
- $options[:address] = address
189
- end
190
-
191
- opts.on("-d", "--debug", "Enable debugging output (def. #{$options[:debug]})") do
192
- $options[:debug] = true
193
- end
194
-
195
- end.parse!
196
-
197
- begin
198
- Qpid::Proton::Reactor::Container.new(Broker.new($options[:address])).run
199
- rescue Interrupt
200
- end
@@ -1,81 +0,0 @@
1
- # Licensed to the Apache Software Foundation (ASF) under one
2
- # or more contributor license agreements. See the NOTICE file
3
- # distributed with this work for additional information
4
- # regarding copyright ownership. The ASF licenses this file
5
- # to you under the Apache License, Version 2.0 (the
6
- # "License"); you may not use this file except in compliance
7
- # with the License. You may obtain a copy of the License at
8
- #
9
- # http://www.apache.org/licenses/LICENSE-2.0
10
- #
11
- # Unless required by applicable law or agreed to in writing,
12
- # software distributed under the License is distributed on an
13
- # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
- # KIND, either express or implied. See the License for the
15
- # specific language governing permissions and limitations
16
- # under the License.
17
-
18
-
19
- require 'qpid_proton'
20
- require 'optparse'
21
-
22
- class Client < Qpid::Proton::Handler::MessagingHandler
23
-
24
- def initialize(url, requests)
25
- super()
26
- @url = url
27
- @requests = requests
28
- end
29
-
30
- def on_start(event)
31
- @sender = event.container.create_sender(@url)
32
- @receiver = event.container.create_receiver(@sender.connection, :dynamic => true)
33
- end
34
-
35
- def next_request
36
- if @receiver.remote_source.address
37
- req = Qpid::Proton::Message.new
38
- req.reply_to = @receiver.remote_source.address
39
- req.body = @requests.first
40
- puts "-> #{req.body}"
41
- @sender.send(req)
42
- end
43
- end
44
-
45
- def on_link_opened(event)
46
- if event.receiver == @receiver
47
- next_request
48
- end
49
- end
50
-
51
- def on_message(event)
52
- puts "<- #{event.message.body}"
53
- @requests.delete_at(0)
54
- if !@requests.empty?
55
- next_request
56
- else
57
- event.connection.close
58
- end
59
- end
60
-
61
- def on_transport_error(event)
62
- raise "Connection error: #{event.transport.condition}"
63
- end
64
-
65
- end
66
-
67
- REQUESTS = ["Twas brillig, and the slithy toves",
68
- "Did gire and gymble in the wabe.",
69
- "All mimsy were the borogroves,",
70
- "And the mome raths outgrabe."]
71
-
72
- options = {
73
- :address => "localhost:5672/examples",
74
- }
75
-
76
- OptionParser.new do |opts|
77
- opts.banner = "Usage: client.rb [options]"
78
- opts.on("-a", "--address=ADDRESS", "Send messages to ADDRESS (def. #{options[:address]}).") { |address| options[:address] = address }
79
- end.parse!
80
-
81
- Qpid::Proton::Reactor::Container.new(Client.new(options[:address], REQUESTS)).run
@@ -1,64 +0,0 @@
1
- # Licensed to the Apache Software Foundation (ASF) under one
2
- # or more contributor license agreements. See the NOTICE file
3
- # distributed with this work for additional information
4
- # regarding copyright ownership. The ASF licenses this file
5
- # to you under the Apache License, Version 2.0 (the
6
- # "License"); you may not use this file except in compliance
7
- # with the License. You may obtain a copy of the License at
8
- #
9
- # http://www.apache.org/licenses/LICENSE-2.0
10
- #
11
- # Unless required by applicable law or agreed to in writing,
12
- # software distributed under the License is distributed on an
13
- # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
- # KIND, either express or implied. See the License for the
15
- # specific language governing permissions and limitations
16
- # under the License.
17
-
18
-
19
- require 'qpid_proton'
20
- require 'optparse'
21
-
22
- require_relative 'lib/send_and_receive'
23
-
24
- class DirectReceive < ExampleReceive
25
-
26
- def initialize(url, expected)
27
- super
28
- end
29
-
30
- def on_start(event)
31
- @acceptor = event.container.listen(self.url)
32
- puts "Listening"; STDOUT.flush
33
- end
34
-
35
- def on_connection_opening(event)
36
- @acceptor.close
37
- end
38
-
39
- def on_message(event)
40
- super(event)
41
- @acceptor.close if self.finished?
42
- end
43
-
44
- end
45
-
46
- options = {
47
- :address => "localhost:5672/examples",
48
- :messages => 10,
49
- }
50
-
51
- OptionParser.new do |opts|
52
- opts.banner = "Usage: simple_send.rb [options]"
53
-
54
- opts.on("-a", "--address=ADDRESS", "Send messages to ADDRESS (def. #{options[:address]}).") do |address|
55
- options[:address] = address
56
- end
57
-
58
- opts.on("-m", "--messages=COUNT", "The number of messages to send (def. #{options[:messages]}",
59
- OptionParser::DecimalInteger) do |messages|
60
- options[:messages] = messages
61
- end
62
- end.parse!
63
-
64
- Qpid::Proton::Reactor::Container.new(DirectReceive.new(options[:address], options[:messages])).run
@@ -1,63 +0,0 @@
1
- # Licensed to the Apache Software Foundation (ASF) under one
2
- # or more contributor license agreements. See the NOTICE file
3
- # distributed with this work for additional information
4
- # regarding copyright ownership. The ASF licenses this file
5
- # to you under the Apache License, Version 2.0 (the
6
- # "License"); you may not use this file except in compliance
7
- # with the License. You may obtain a copy of the License at
8
- #
9
- # http://www.apache.org/licenses/LICENSE-2.0
10
- #
11
- # Unless required by applicable law or agreed to in writing,
12
- # software distributed under the License is distributed on an
13
- # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
- # KIND, either express or implied. See the License for the
15
- # specific language governing permissions and limitations
16
- # under the License.
17
-
18
-
19
- require 'qpid_proton'
20
- require 'optparse'
21
-
22
- require_relative 'lib/send_and_receive'
23
-
24
- options = {
25
- :address => "localhost:5672/examples",
26
- :messages => 10,
27
- }
28
-
29
- class SimpleSend < ExampleSend
30
-
31
- def initialize(url, messages)
32
- super(url, messages)
33
- end
34
-
35
- def on_start(event)
36
- @acceptor = event.container.listen(url)
37
- puts "Listening"; STDOUT.flush
38
- end
39
-
40
- def on_connection_opening(event)
41
- @acceptor.close
42
- end
43
- end
44
-
45
- OptionParser.new do |opts|
46
- opts.banner = "Usage: simple_send.rb [options]"
47
-
48
- opts.on("-a", "--address=ADDRESS", "Send messages to ADDRESS (def. #{options[:address]}).") do |address|
49
- options[:address] = address
50
- end
51
-
52
- opts.on("-m", "--messages=COUNT", "The number of messages to send (def. #{options[:messages]}",
53
- OptionParser::DecimalInteger) do |messages|
54
- options[:messages] = messages
55
- end
56
- end.parse!
57
-
58
- begin
59
- Qpid::Proton::Reactor::Container.new(SimpleSend.new(options[:address], options[:messages]), {:container_id=> "direct_send"}).run
60
-
61
- rescue Interrupt => error
62
- puts "ERROR: #{error}"
63
- end