stomp 1.2.5 → 1.2.6
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.rdoc +8 -0
- data/README.rdoc +19 -15
- data/lib/client/utils.rb +7 -7
- data/lib/connection/heartbeats.rb +10 -8
- data/lib/connection/netio.rb +3 -3
- data/lib/connection/utf8.rb +2 -2
- data/lib/connection/utils.rb +132 -3
- data/lib/stomp/client.rb +2 -10
- data/lib/stomp/connection.rb +30 -165
- data/lib/stomp/constants.rb +4 -3
- data/lib/stomp/errors.rb +2 -0
- data/lib/stomp/ext/hash.rb +2 -1
- data/lib/stomp/message.rb +3 -3
- data/lib/stomp/sslparams.rb +1 -1
- data/lib/stomp/version.rb +1 -1
- data/spec/client_spec.rb +2 -4
- data/spec/connection_spec.rb +23 -21
- data/stomp.gemspec +2 -2
- data/test/tlogger.rb +0 -10
- metadata +4 -4
data/CHANGELOG.rdoc
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
== 1.2.6 20120913
|
2
|
+
|
3
|
+
* Provide ability to eliminate checks for closed in protocol methods
|
4
|
+
* Cover ssl.connect with connection timeout parameter
|
5
|
+
* If heartbeat send raises, do not reraise unless client requests that
|
6
|
+
* Remove methods that invoke __send__
|
7
|
+
* Move internal methods to 'private'
|
8
|
+
|
1
9
|
== 1.2.5 20120804
|
2
10
|
|
3
11
|
* Issue #48 any forks with modifications will be affected!
|
data/README.rdoc
CHANGED
@@ -10,6 +10,7 @@ An implementation of the Stomp protocol for Ruby. See:
|
|
10
10
|
|
11
11
|
===New
|
12
12
|
|
13
|
+
* Gem version 1.2.6. Miscellaneous fixes and changes. See _CHANGELOG.rdoc_ for details.
|
13
14
|
* Gem version 1.2.5. Restructure. Forks with modifcations will be affected. See _CHANGELOG.rdoc_ for details.
|
14
15
|
* Gem version 1.2.4. Stomp 1.1 heartbeat fix, autoflush capability, miscellaneous fixes.
|
15
16
|
* Gem version 1.2.3. Miscellaneous fixes, see changelog for details.
|
@@ -23,23 +24,26 @@ See _CHANGELOG.rdoc_ for details.
|
|
23
24
|
|
24
25
|
hash = {
|
25
26
|
:hosts => [
|
27
|
+
# First connect is to remotehost1
|
26
28
|
{:login => "login1", :passcode => "passcode1", :host => "remotehost1", :port => 61612, :ssl => true},
|
29
|
+
# First failover connect is to remotehost2
|
27
30
|
{:login => "login2", :passcode => "passcode2", :host => "remotehost2", :port => 61613, :ssl => false},
|
28
31
|
|
29
32
|
],
|
30
|
-
# These are the default parameters
|
31
|
-
:reliable => true,
|
32
|
-
:initial_reconnect_delay => 0.01,
|
33
|
-
:max_reconnect_delay => 30.0,
|
34
|
-
:use_exponential_back_off => true,
|
35
|
-
:back_off_multiplier => 2,
|
36
|
-
:max_reconnect_attempts => 0,
|
37
|
-
:randomize => false,
|
38
|
-
:
|
39
|
-
:
|
40
|
-
:
|
41
|
-
:
|
42
|
-
:
|
33
|
+
# These are the default parameters and do not need to be set
|
34
|
+
:reliable => true, # reliable (use failover)
|
35
|
+
:initial_reconnect_delay => 0.01, # initial delay before reconnect (secs)
|
36
|
+
:max_reconnect_delay => 30.0, # max delay before reconnect
|
37
|
+
:use_exponential_back_off => true, # increase delay between reconnect attpempts
|
38
|
+
:back_off_multiplier => 2, # next delay multiplier
|
39
|
+
:max_reconnect_attempts => 0, # retry forever, use # for maximum attempts
|
40
|
+
:randomize => false, # do not radomize hosts hash before reconnect
|
41
|
+
:connect_headers => {}, # user supplied CONNECT headers (req'd for Stomp 1.1+)
|
42
|
+
:parse_timeout => 5, # receive / read timeout, secs
|
43
|
+
:logger => nil, # user suplied callback logger instance
|
44
|
+
:dmh => false, # do not support multihomed IPV4 / IPV6 hosts during failover
|
45
|
+
:closed_check => true, # check first if closed in each protocol method
|
46
|
+
:hbser => false, # raise on heartbeat send exception
|
43
47
|
}
|
44
48
|
|
45
49
|
# for client
|
@@ -101,8 +105,8 @@ The following people have contributed to Stomp:
|
|
101
105
|
* jstrachan
|
102
106
|
* Marius Mathiesen <marius.mathiesen@gmail.com>
|
103
107
|
* Johan S√∏rensen <johan@johansorensen.com>
|
104
|
-
* Thiago Morello
|
105
|
-
* Guy M. Allard
|
108
|
+
* Thiago Morello
|
109
|
+
* Guy M. Allard <stompgem@gmail.com>
|
106
110
|
* kookster
|
107
111
|
* Tony Garnock-Jones <tonyg@lshift.net>
|
108
112
|
* chirino
|
data/lib/client/utils.rb
CHANGED
@@ -56,7 +56,6 @@ module Stomp
|
|
56
56
|
end
|
57
57
|
|
58
58
|
# A very basic check of required arguments.
|
59
|
-
# *NOTE* This method will be made private in the next release.
|
60
59
|
def check_arguments!()
|
61
60
|
raise ArgumentError if @host.nil? || @host.empty?
|
62
61
|
raise ArgumentError if @port.nil? || @port == '' || @port < 1 || @port > 65535
|
@@ -72,8 +71,7 @@ module Stomp
|
|
72
71
|
new_options[:back_off_multiplier] = (options["backOffMultiplier"] || 2 ).to_i
|
73
72
|
new_options[:max_reconnect_attempts] = (options["maxReconnectAttempts"] || 0 ).to_i
|
74
73
|
new_options[:randomize] = options["randomize"] == "true" # Default: false
|
75
|
-
new_options[:
|
76
|
-
new_options[:timeout] = -1 # Not implemented yet: a "timeout(5) do ... end" would do the trick, feel free
|
74
|
+
new_options[:connect_timeout] = 0
|
77
75
|
|
78
76
|
new_options
|
79
77
|
end
|
@@ -108,9 +106,11 @@ module Stomp
|
|
108
106
|
listener.call(message)
|
109
107
|
end
|
110
108
|
end
|
111
|
-
end
|
109
|
+
end # while true
|
112
110
|
end
|
113
|
-
end
|
114
|
-
|
115
|
-
end
|
111
|
+
end # method start_listeners
|
112
|
+
|
113
|
+
end # class Client
|
114
|
+
|
115
|
+
end # module Stomp
|
116
116
|
|
@@ -25,7 +25,7 @@ module Stomp
|
|
25
25
|
# Init.
|
26
26
|
|
27
27
|
#
|
28
|
-
@cx = @cy = @sx = @sy = 0
|
28
|
+
@cx = @cy = @sx = @sy = 0 # Variable names as in spec
|
29
29
|
|
30
30
|
#
|
31
31
|
@hbsend_interval = @hbrecv_interval = 0.0 # Send/Receive ticker interval.
|
@@ -60,13 +60,13 @@ module Stomp
|
|
60
60
|
|
61
61
|
# See if we are doing anything at all.
|
62
62
|
|
63
|
-
#
|
64
63
|
@hbs = @hbr = true # Sending/Receiving heartbeats. Assume yes at first.
|
65
64
|
# Check if sending is possible.
|
66
|
-
@hbs = false if @cx == 0 || @sy == 0
|
65
|
+
@hbs = false if @cx == 0 || @sy == 0 # Reset if neither side wants
|
67
66
|
# Check if receiving is possible.
|
68
|
-
@hbr = false if @sx == 0 || @cy == 0
|
69
|
-
|
67
|
+
@hbr = false if @sx == 0 || @cy == 0 # Reset if neither side wants
|
68
|
+
|
69
|
+
# Check if we should not do heartbeats at all
|
70
70
|
return if (!@hbs && !@hbr)
|
71
71
|
|
72
72
|
# If sending
|
@@ -115,7 +115,9 @@ module Stomp
|
|
115
115
|
@logger.on_hbwrite_fail(log_params, {"ticker_interval" => @hbsend_interval,
|
116
116
|
"exception" => sendex})
|
117
117
|
end
|
118
|
-
|
118
|
+
if @hbser
|
119
|
+
raise # Re-raise if user requested this, otherwise ignore
|
120
|
+
end
|
119
121
|
end
|
120
122
|
end
|
121
123
|
end
|
@@ -167,7 +169,7 @@ module Stomp
|
|
167
169
|
}
|
168
170
|
end
|
169
171
|
|
170
|
-
end # class
|
172
|
+
end # class Connection
|
171
173
|
|
172
|
-
end # module
|
174
|
+
end # module Stomp
|
173
175
|
|
data/lib/connection/netio.rb
CHANGED
@@ -244,11 +244,11 @@ module Stomp
|
|
244
244
|
|
245
245
|
Timeout::timeout(@connect_timeout, Stomp::Error::SocketOpenTimeout) do
|
246
246
|
ssl = OpenSSL::SSL::SSLSocket.new(open_tcp_socket, ctx)
|
247
|
+
ssl.connect
|
247
248
|
end
|
248
249
|
def ssl.ready?
|
249
250
|
! @rbuffer.empty? || @io.ready?
|
250
251
|
end
|
251
|
-
ssl.connect
|
252
252
|
if @ssl != true
|
253
253
|
# Pass back results if possible
|
254
254
|
if RUBY_VERSION =~ /1\.8\.[56]/
|
@@ -316,7 +316,7 @@ module Stomp
|
|
316
316
|
@subscriptions.each { |k,v| _transmit(used_socket, Stomp::CMD_SUBSCRIBE, v) }
|
317
317
|
end
|
318
318
|
|
319
|
-
end # class
|
319
|
+
end # class Connection
|
320
320
|
|
321
|
-
end # module
|
321
|
+
end # module Stomp
|
322
322
|
|
data/lib/connection/utf8.rb
CHANGED
data/lib/connection/utils.rb
CHANGED
@@ -79,7 +79,7 @@ module Stomp
|
|
79
79
|
_validate_hbheader()
|
80
80
|
end
|
81
81
|
|
82
|
-
# _post_connect handles low level logic just
|
82
|
+
# _post_connect handles low level logic just after a physical connect.
|
83
83
|
def _post_connect()
|
84
84
|
return unless (@connect_headers[:"accept-version"] && @connect_headers[:host])
|
85
85
|
return if @connection_frame.command == Stomp::CMD_ERROR
|
@@ -98,7 +98,136 @@ module Stomp
|
|
98
98
|
_init_heartbeats()
|
99
99
|
end
|
100
100
|
|
101
|
-
|
101
|
+
# socket creates and returns a new socket for use by the connection.
|
102
|
+
def socket()
|
103
|
+
@socket_semaphore.synchronize do
|
104
|
+
used_socket = @socket
|
105
|
+
used_socket = nil if closed?
|
102
106
|
|
103
|
-
|
107
|
+
while used_socket.nil? || !@failure.nil?
|
108
|
+
@failure = nil
|
109
|
+
begin
|
110
|
+
used_socket = open_socket()
|
111
|
+
# Open is complete
|
112
|
+
connect(used_socket)
|
113
|
+
if @logger && @logger.respond_to?(:on_connected)
|
114
|
+
@logger.on_connected(log_params)
|
115
|
+
end
|
116
|
+
@connection_attempts = 0
|
117
|
+
rescue
|
118
|
+
@failure = $!
|
119
|
+
used_socket = nil
|
120
|
+
raise unless @reliable
|
121
|
+
raise if @failure.is_a?(Stomp::Error::LoggerConnectionError)
|
122
|
+
@closed = true
|
123
|
+
if @logger && @logger.respond_to?(:on_connectfail)
|
124
|
+
# on_connectfail may raise
|
125
|
+
begin
|
126
|
+
@logger.on_connectfail(log_params)
|
127
|
+
rescue Exception => aex
|
128
|
+
raise if aex.is_a?(Stomp::Error::LoggerConnectionError)
|
129
|
+
end
|
130
|
+
else
|
131
|
+
$stderr.print "connect to #{@host} failed: #{$!} will retry(##{@connection_attempts}) in #{@reconnect_delay}\n"
|
132
|
+
end
|
133
|
+
raise Stomp::Error::MaxReconnectAttempts if max_reconnect_attempts?
|
134
|
+
|
135
|
+
sleep(@reconnect_delay)
|
136
|
+
|
137
|
+
@connection_attempts += 1
|
138
|
+
|
139
|
+
if @parameters
|
140
|
+
change_host()
|
141
|
+
increase_reconnect_delay()
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
@socket = used_socket
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
# refine_params sets up defaults for a Hash initialize.
|
150
|
+
def refine_params(params)
|
151
|
+
params = params.uncamelize_and_symbolize_keys
|
152
|
+
default_params = {
|
153
|
+
:connect_headers => {},
|
154
|
+
:reliable => true,
|
155
|
+
# Failover parameters
|
156
|
+
:initial_reconnect_delay => 0.01,
|
157
|
+
:max_reconnect_delay => 30.0,
|
158
|
+
:use_exponential_back_off => true,
|
159
|
+
:back_off_multiplier => 2,
|
160
|
+
:max_reconnect_attempts => 0,
|
161
|
+
:randomize => false,
|
162
|
+
:connect_timeout => 0,
|
163
|
+
# Parse Timeout
|
164
|
+
:parse_timeout => 5,
|
165
|
+
:dmh => false,
|
166
|
+
# Closed check logic
|
167
|
+
:closed_check => true,
|
168
|
+
:hbser => false,
|
169
|
+
}
|
170
|
+
|
171
|
+
res_params = default_params.merge(params)
|
172
|
+
if res_params[:dmh]
|
173
|
+
res_params = _expand_hosts(res_params)
|
174
|
+
end
|
175
|
+
return res_params
|
176
|
+
end
|
177
|
+
|
178
|
+
# change_host selects the next host for retires.
|
179
|
+
def change_host
|
180
|
+
@parameters[:hosts] = @parameters[:hosts].sort_by { rand } if @parameters[:randomize]
|
181
|
+
|
182
|
+
# Set first as master and send it to the end of array
|
183
|
+
current_host = @parameters[:hosts].shift
|
184
|
+
@parameters[:hosts] << current_host
|
185
|
+
|
186
|
+
@ssl = current_host[:ssl]
|
187
|
+
@host = current_host[:host]
|
188
|
+
@port = current_host[:port] || Connection::default_port(@ssl)
|
189
|
+
@login = current_host[:login] || ""
|
190
|
+
@passcode = current_host[:passcode] || ""
|
191
|
+
|
192
|
+
end
|
193
|
+
|
194
|
+
# max_reconnect_attempts? returns nil or the number of maximum reconnect
|
195
|
+
# attempts.
|
196
|
+
def max_reconnect_attempts?
|
197
|
+
!(@parameters.nil? || @parameters[:max_reconnect_attempts].nil?) && @parameters[:max_reconnect_attempts] != 0 && @connection_attempts >= @parameters[:max_reconnect_attempts]
|
198
|
+
end
|
199
|
+
|
200
|
+
# increase_reconnect_delay increases the reconnect delay for the next connection
|
201
|
+
# attempt.
|
202
|
+
def increase_reconnect_delay
|
203
|
+
|
204
|
+
@reconnect_delay *= @parameters[:back_off_multiplier] if @parameters[:use_exponential_back_off]
|
205
|
+
@reconnect_delay = @parameters[:max_reconnect_delay] if @reconnect_delay > @parameters[:max_reconnect_delay]
|
206
|
+
|
207
|
+
@reconnect_delay
|
208
|
+
end
|
209
|
+
|
210
|
+
# __old_receive receives a frame, blocks until the frame is received.
|
211
|
+
def __old_receive()
|
212
|
+
# The receive may fail so we may need to retry.
|
213
|
+
while TRUE
|
214
|
+
begin
|
215
|
+
used_socket = socket
|
216
|
+
return _receive(used_socket)
|
217
|
+
rescue
|
218
|
+
@failure = $!
|
219
|
+
raise unless @reliable
|
220
|
+
errstr = "receive failed: #{$!}"
|
221
|
+
if @logger && @logger.respond_to?(:on_miscerr)
|
222
|
+
@logger.on_miscerr(log_params, errstr)
|
223
|
+
else
|
224
|
+
$stderr.print errstr
|
225
|
+
end
|
226
|
+
end
|
227
|
+
end
|
228
|
+
end
|
229
|
+
|
230
|
+
end # class Connection
|
231
|
+
|
232
|
+
end # module Stomp
|
104
233
|
|
data/lib/stomp/client.rb
CHANGED
@@ -48,7 +48,6 @@ module Stomp
|
|
48
48
|
# :back_off_multiplier => 2,
|
49
49
|
# :max_reconnect_attempts => 0,
|
50
50
|
# :randomize => false,
|
51
|
-
# :backup => false,
|
52
51
|
# :connect_timeout => 0,
|
53
52
|
# :connect_headers => {},
|
54
53
|
# :parse_timeout => 5,
|
@@ -141,7 +140,7 @@ module Stomp
|
|
141
140
|
|
142
141
|
end
|
143
142
|
|
144
|
-
# open is syntactic sugar for 'Client.new'
|
143
|
+
# open is syntactic sugar for 'Client.new', see 'initialize' for usage.
|
145
144
|
def self.open(login = '', passcode = '', host = 'localhost', port = 61613, reliable = false)
|
146
145
|
Client.new(login, passcode, host, port, reliable)
|
147
146
|
end
|
@@ -161,7 +160,7 @@ module Stomp
|
|
161
160
|
def abort(name, headers = {})
|
162
161
|
@connection.abort(name, headers)
|
163
162
|
|
164
|
-
#
|
163
|
+
# replay any ack'd messages in this transaction
|
165
164
|
replay_list = @replay_messages_by_txn[name]
|
166
165
|
if replay_list
|
167
166
|
replay_list.each do |message|
|
@@ -243,13 +242,6 @@ module Stomp
|
|
243
242
|
@connection.publish(destination, message, headers)
|
244
243
|
end
|
245
244
|
|
246
|
-
# :TODO: This should not be used. Currently only referenced in the
|
247
|
-
# spec tests.
|
248
|
-
# *NOTE* This will be removed in the next release.
|
249
|
-
def obj_send(*args)
|
250
|
-
__send__(*args)
|
251
|
-
end
|
252
|
-
|
253
245
|
# Return the broker's CONNECTED frame to the client. Misnamed.
|
254
246
|
def connection_frame()
|
255
247
|
@connection.connection_frame
|
data/lib/stomp/connection.rb
CHANGED
@@ -42,7 +42,7 @@ module Stomp
|
|
42
42
|
|
43
43
|
# A new Connection object can be initialized using two forms:
|
44
44
|
#
|
45
|
-
# Hash (this is the recommended Connection initialization method:
|
45
|
+
# Hash (this is the recommended Connection initialization method):
|
46
46
|
#
|
47
47
|
# hash = {
|
48
48
|
# :hosts => [
|
@@ -56,11 +56,13 @@ module Stomp
|
|
56
56
|
# :back_off_multiplier => 2,
|
57
57
|
# :max_reconnect_attempts => 0,
|
58
58
|
# :randomize => false,
|
59
|
-
# :backup => false,
|
60
59
|
# :connect_timeout => 0,
|
61
60
|
# :connect_headers => {},
|
62
61
|
# :parse_timeout => 5,
|
63
62
|
# :logger => nil,
|
63
|
+
# :dmh => false,
|
64
|
+
# :closed_check => true,
|
65
|
+
# :hbser => false,
|
64
66
|
# }
|
65
67
|
#
|
66
68
|
# e.g. c = Stomp::Connection.new(hash)
|
@@ -77,11 +79,10 @@ module Stomp
|
|
77
79
|
# e.g. c = Stomp::Connection.new("username", "password", "localhost", 61613, true)
|
78
80
|
#
|
79
81
|
def initialize(login = '', passcode = '', host = 'localhost', port = 61613, reliable = false, reconnect_delay = 5, connect_headers = {})
|
80
|
-
@received_messages = []
|
81
82
|
@protocol = Stomp::SPL_10 # Assumed at first
|
82
|
-
@hb_received = true
|
83
|
-
@hb_sent = true
|
84
|
-
@hbs = @hbr = false
|
83
|
+
@hb_received = true # Assumed at first
|
84
|
+
@hb_sent = true # Assumed at first
|
85
|
+
@hbs = @hbr = false # Sending/Receiving heartbeats. Assume no for now.
|
85
86
|
|
86
87
|
if login.is_a?(Hash)
|
87
88
|
hashed_initialize(login)
|
@@ -99,11 +100,13 @@ module Stomp
|
|
99
100
|
@connect_timeout = 0 # To override, use hashed parameters
|
100
101
|
@logger = nil # To override, use hashed parameters
|
101
102
|
@autoflush = false # To override, use hashed parameters or setter
|
103
|
+
@closed_check = true # Run closed check in each protocol method
|
104
|
+
@hbser = false # Raise if heartbeat send exception
|
102
105
|
warn "login looks like a URL, do you have the correct parameters?" if @login =~ /:\/\//
|
103
106
|
end
|
104
107
|
|
105
|
-
# Use Mutexes: only one lock per each thread
|
106
|
-
#
|
108
|
+
# Use Mutexes: only one lock per each thread.
|
109
|
+
# Reverted to original implementation attempt using Mutex.
|
107
110
|
@transmit_semaphore = Mutex.new
|
108
111
|
@read_semaphore = Mutex.new
|
109
112
|
@socket_semaphore = Mutex.new
|
@@ -127,128 +130,17 @@ module Stomp
|
|
127
130
|
@connect_timeout = @parameters[:connect_timeout]
|
128
131
|
@logger = @parameters[:logger]
|
129
132
|
@autoflush = @parameters[:autoflush]
|
133
|
+
@closed_check = @parameters[:closed_check]
|
134
|
+
@hbser = @parameters[:hbser]
|
130
135
|
#sets the first host to connect
|
131
136
|
change_host
|
132
137
|
end
|
133
138
|
|
134
|
-
# open is syntactic sugar for 'Connection.new'
|
139
|
+
# open is syntactic sugar for 'Connection.new', see 'initialize' for usage.
|
135
140
|
def Connection.open(login = '', passcode = '', host = 'localhost', port = 61613, reliable = false, reconnect_delay = 5, connect_headers = {})
|
136
141
|
Connection.new(login, passcode, host, port, reliable, reconnect_delay, connect_headers)
|
137
142
|
end
|
138
143
|
|
139
|
-
# socket creates and returns a new socket for use by the connection.
|
140
|
-
# *NOTE* this method will be made private in the next realease.
|
141
|
-
def socket()
|
142
|
-
@socket_semaphore.synchronize do
|
143
|
-
used_socket = @socket
|
144
|
-
used_socket = nil if closed?
|
145
|
-
|
146
|
-
while used_socket.nil? || !@failure.nil?
|
147
|
-
@failure = nil
|
148
|
-
begin
|
149
|
-
used_socket = open_socket()
|
150
|
-
# Open complete
|
151
|
-
|
152
|
-
connect(used_socket)
|
153
|
-
if @logger && @logger.respond_to?(:on_connected)
|
154
|
-
@logger.on_connected(log_params)
|
155
|
-
end
|
156
|
-
@connection_attempts = 0
|
157
|
-
rescue
|
158
|
-
@failure = $!
|
159
|
-
used_socket = nil
|
160
|
-
raise unless @reliable
|
161
|
-
raise if @failure.is_a?(Stomp::Error::LoggerConnectionError)
|
162
|
-
@closed = true
|
163
|
-
if @logger && @logger.respond_to?(:on_connectfail)
|
164
|
-
# on_connectfail may raise
|
165
|
-
begin
|
166
|
-
@logger.on_connectfail(log_params)
|
167
|
-
rescue Exception => aex
|
168
|
-
raise if aex.is_a?(Stomp::Error::LoggerConnectionError)
|
169
|
-
end
|
170
|
-
else
|
171
|
-
$stderr.print "connect to #{@host} failed: #{$!} will retry(##{@connection_attempts}) in #{@reconnect_delay}\n"
|
172
|
-
end
|
173
|
-
raise Stomp::Error::MaxReconnectAttempts if max_reconnect_attempts?
|
174
|
-
|
175
|
-
sleep(@reconnect_delay)
|
176
|
-
|
177
|
-
@connection_attempts += 1
|
178
|
-
|
179
|
-
if @parameters
|
180
|
-
change_host()
|
181
|
-
increase_reconnect_delay()
|
182
|
-
end
|
183
|
-
end
|
184
|
-
end
|
185
|
-
@socket = used_socket
|
186
|
-
end
|
187
|
-
end
|
188
|
-
|
189
|
-
# refine_params sets up defaults for a Hash initialize.
|
190
|
-
# *NOTE* This method will be made private in the next release.
|
191
|
-
def refine_params(params)
|
192
|
-
params = params.uncamelize_and_symbolize_keys
|
193
|
-
default_params = {
|
194
|
-
:connect_headers => {},
|
195
|
-
:reliable => true,
|
196
|
-
# Failover parameters
|
197
|
-
:initial_reconnect_delay => 0.01,
|
198
|
-
:max_reconnect_delay => 30.0,
|
199
|
-
:use_exponential_back_off => true,
|
200
|
-
:back_off_multiplier => 2,
|
201
|
-
:max_reconnect_attempts => 0,
|
202
|
-
:randomize => false,
|
203
|
-
:backup => false,
|
204
|
-
:connect_timeout => 0,
|
205
|
-
# Parse Timeout
|
206
|
-
:parse_timeout => 5,
|
207
|
-
:dmh => false,
|
208
|
-
}
|
209
|
-
|
210
|
-
res_params = default_params.merge(params)
|
211
|
-
if res_params[:dmh]
|
212
|
-
res_params = _expand_hosts(res_params)
|
213
|
-
end
|
214
|
-
return res_params
|
215
|
-
end
|
216
|
-
|
217
|
-
# change_host selects the next host for retires.
|
218
|
-
# *NOTE* This method will be made private in the next release.
|
219
|
-
def change_host
|
220
|
-
@parameters[:hosts] = @parameters[:hosts].sort_by { rand } if @parameters[:randomize]
|
221
|
-
|
222
|
-
# Set first as master and send it to the end of array
|
223
|
-
current_host = @parameters[:hosts].shift
|
224
|
-
@parameters[:hosts] << current_host
|
225
|
-
|
226
|
-
@ssl = current_host[:ssl]
|
227
|
-
@host = current_host[:host]
|
228
|
-
@port = current_host[:port] || Connection::default_port(@ssl)
|
229
|
-
@login = current_host[:login] || ""
|
230
|
-
@passcode = current_host[:passcode] || ""
|
231
|
-
|
232
|
-
end
|
233
|
-
|
234
|
-
# max_reconnect_attempts? returns nil or the number of maximum reconnect
|
235
|
-
# attempts.
|
236
|
-
# *NOTE* This method will be made private in the next release.
|
237
|
-
def max_reconnect_attempts?
|
238
|
-
!(@parameters.nil? || @parameters[:max_reconnect_attempts].nil?) && @parameters[:max_reconnect_attempts] != 0 && @connection_attempts >= @parameters[:max_reconnect_attempts]
|
239
|
-
end
|
240
|
-
|
241
|
-
# increase_reconnect_delay increases the reconnect delay for the next connection
|
242
|
-
# attempt.
|
243
|
-
# *NOTE* This method will be made private in the next release.
|
244
|
-
def increase_reconnect_delay
|
245
|
-
|
246
|
-
@reconnect_delay *= @parameters[:back_off_multiplier] if @parameters[:use_exponential_back_off]
|
247
|
-
@reconnect_delay = @parameters[:max_reconnect_delay] if @reconnect_delay > @parameters[:max_reconnect_delay]
|
248
|
-
|
249
|
-
@reconnect_delay
|
250
|
-
end
|
251
|
-
|
252
144
|
# open? tests if this connection is open.
|
253
145
|
def open?
|
254
146
|
!@closed
|
@@ -261,7 +153,7 @@ module Stomp
|
|
261
153
|
|
262
154
|
# Begin starts a transaction, and requires a name for the transaction
|
263
155
|
def begin(name, headers = {})
|
264
|
-
raise Stomp::Error::NoCurrentConnection if closed?
|
156
|
+
raise Stomp::Error::NoCurrentConnection if @closed_check && closed?
|
265
157
|
headers = headers.symbolize_keys
|
266
158
|
headers[:transaction] = name
|
267
159
|
_headerCheck(headers)
|
@@ -272,7 +164,7 @@ module Stomp
|
|
272
164
|
# client acknowledgement i.e. connection.subscribe("/queue/a", :ack => 'client').
|
273
165
|
# Accepts a transaction header ( :transaction => 'some_transaction_id' )
|
274
166
|
def ack(message_id, headers = {})
|
275
|
-
raise Stomp::Error::NoCurrentConnection if closed?
|
167
|
+
raise Stomp::Error::NoCurrentConnection if @closed_check && closed?
|
276
168
|
raise Stomp::Error::MessageIDRequiredError if message_id.nil? || message_id == ""
|
277
169
|
headers = headers.symbolize_keys
|
278
170
|
headers[:'message-id'] = message_id
|
@@ -285,7 +177,7 @@ module Stomp
|
|
285
177
|
|
286
178
|
# STOMP 1.1+ NACK.
|
287
179
|
def nack(message_id, headers = {})
|
288
|
-
raise Stomp::Error::NoCurrentConnection if closed?
|
180
|
+
raise Stomp::Error::NoCurrentConnection if @closed_check && closed?
|
289
181
|
raise Stomp::Error::UnsupportedProtocolError if @protocol == Stomp::SPL_10
|
290
182
|
raise Stomp::Error::MessageIDRequiredError if message_id.nil? || message_id == ""
|
291
183
|
headers = headers.symbolize_keys
|
@@ -297,7 +189,7 @@ module Stomp
|
|
297
189
|
|
298
190
|
# Commit commits a transaction by name.
|
299
191
|
def commit(name, headers = {})
|
300
|
-
raise Stomp::Error::NoCurrentConnection if closed?
|
192
|
+
raise Stomp::Error::NoCurrentConnection if @closed_check && closed?
|
301
193
|
headers = headers.symbolize_keys
|
302
194
|
headers[:transaction] = name
|
303
195
|
_headerCheck(headers)
|
@@ -306,7 +198,7 @@ module Stomp
|
|
306
198
|
|
307
199
|
# Abort aborts a transaction by name.
|
308
200
|
def abort(name, headers = {})
|
309
|
-
raise Stomp::Error::NoCurrentConnection if closed?
|
201
|
+
raise Stomp::Error::NoCurrentConnection if @closed_check && closed?
|
310
202
|
headers = headers.symbolize_keys
|
311
203
|
headers[:transaction] = name
|
312
204
|
_headerCheck(headers)
|
@@ -314,9 +206,9 @@ module Stomp
|
|
314
206
|
end
|
315
207
|
|
316
208
|
# Subscribe subscribes to a destination. A subscription name is required.
|
317
|
-
# For Stomp 1.1 a session unique subscription ID is required.
|
209
|
+
# For Stomp 1.1+ a session unique subscription ID is also required.
|
318
210
|
def subscribe(name, headers = {}, subId = nil)
|
319
|
-
raise Stomp::Error::NoCurrentConnection if closed?
|
211
|
+
raise Stomp::Error::NoCurrentConnection if @closed_check && closed?
|
320
212
|
headers = headers.symbolize_keys
|
321
213
|
headers[:destination] = name
|
322
214
|
if @protocol >= Stomp::SPL_11
|
@@ -328,7 +220,7 @@ module Stomp
|
|
328
220
|
@logger.on_subscribe(log_params, headers)
|
329
221
|
end
|
330
222
|
|
331
|
-
# Store the
|
223
|
+
# Store the subscription so that we can replay if we reconnect.
|
332
224
|
if @reliable
|
333
225
|
subId = name if subId.nil?
|
334
226
|
raise Stomp::Error::DuplicateSubscription if @subscriptions[subId]
|
@@ -339,9 +231,9 @@ module Stomp
|
|
339
231
|
end
|
340
232
|
|
341
233
|
# Unsubscribe from a destination. A subscription name is required.
|
342
|
-
# For Stomp 1.1 a session unique subscription ID is required.
|
234
|
+
# For Stomp 1.1+ a session unique subscription ID is also required.
|
343
235
|
def unsubscribe(dest, headers = {}, subId = nil)
|
344
|
-
raise Stomp::Error::NoCurrentConnection if closed?
|
236
|
+
raise Stomp::Error::NoCurrentConnection if @closed_check && closed?
|
345
237
|
headers = headers.symbolize_keys
|
346
238
|
headers[:destination] = dest
|
347
239
|
if @protocol >= Stomp::SPL_11
|
@@ -359,7 +251,7 @@ module Stomp
|
|
359
251
|
# To disable content length header use header ( :suppress_content_length => true ).
|
360
252
|
# Accepts a transaction header ( :transaction => 'some_transaction_id' ).
|
361
253
|
def publish(destination, message, headers = {})
|
362
|
-
raise Stomp::Error::NoCurrentConnection if closed?
|
254
|
+
raise Stomp::Error::NoCurrentConnection if @closed_check && closed?
|
363
255
|
headers = headers.symbolize_keys
|
364
256
|
headers[:destination] = destination
|
365
257
|
_headerCheck(headers)
|
@@ -369,18 +261,12 @@ module Stomp
|
|
369
261
|
transmit(Stomp::CMD_SEND, headers, message)
|
370
262
|
end
|
371
263
|
|
372
|
-
# :TODO: Remove this method.
|
373
|
-
# *NOTE* This method will be removed in the next release.
|
374
|
-
def obj_send(*args)
|
375
|
-
__send__(*args)
|
376
|
-
end
|
377
|
-
|
378
264
|
# Send a message back to the source or to the dead letter queue.
|
379
265
|
# Accepts a dead letter queue option ( :dead_letter_queue => "/queue/DLQ" ).
|
380
266
|
# Accepts a limit number of redeliveries option ( :max_redeliveries => 6 ).
|
381
267
|
# Accepts a force client acknowledgement option (:force_client_ack => true).
|
382
268
|
def unreceive(message, options = {})
|
383
|
-
raise Stomp::Error::NoCurrentConnection if closed?
|
269
|
+
raise Stomp::Error::NoCurrentConnection if @closed_check && closed?
|
384
270
|
options = { :dead_letter_queue => "/queue/DLQ", :max_redeliveries => 6 }.merge(options)
|
385
271
|
# Lets make sure all keys are symbols
|
386
272
|
message.headers = message.headers.symbolize_keys
|
@@ -421,9 +307,9 @@ module Stomp
|
|
421
307
|
end
|
422
308
|
|
423
309
|
# disconnect closes this connection. If requested, a disconnect RECEIPT
|
424
|
-
#
|
310
|
+
# will be received.
|
425
311
|
def disconnect(headers = {})
|
426
|
-
raise Stomp::Error::NoCurrentConnection if closed?
|
312
|
+
raise Stomp::Error::NoCurrentConnection if @closed_check && closed?
|
427
313
|
headers = headers.symbolize_keys
|
428
314
|
_headerCheck(headers)
|
429
315
|
if @protocol >= Stomp::SPL_11
|
@@ -441,37 +327,16 @@ module Stomp
|
|
441
327
|
# poll returns a pending message if one is available, otherwise
|
442
328
|
# returns nil.
|
443
329
|
def poll()
|
444
|
-
raise Stomp::Error::NoCurrentConnection if closed?
|
330
|
+
raise Stomp::Error::NoCurrentConnection if @closed_check && closed?
|
445
331
|
# No need for a read lock here. The receive method eventually fulfills
|
446
332
|
# that requirement.
|
447
333
|
return nil if @socket.nil? || !@socket.ready?
|
448
334
|
receive()
|
449
335
|
end
|
450
336
|
|
451
|
-
# __old_receive receives a frame, blocks until the frame is received.
|
452
|
-
# *NOTE* This method will be made private in the next release.
|
453
|
-
def __old_receive()
|
454
|
-
# The receive may fail so we may need to retry.
|
455
|
-
while TRUE
|
456
|
-
begin
|
457
|
-
used_socket = socket
|
458
|
-
return _receive(used_socket)
|
459
|
-
rescue
|
460
|
-
@failure = $!
|
461
|
-
raise unless @reliable
|
462
|
-
errstr = "receive failed: #{$!}"
|
463
|
-
if @logger && @logger.respond_to?(:on_miscerr)
|
464
|
-
@logger.on_miscerr(log_params, errstr)
|
465
|
-
else
|
466
|
-
$stderr.print errstr
|
467
|
-
end
|
468
|
-
end
|
469
|
-
end
|
470
|
-
end
|
471
|
-
|
472
337
|
# receive returns the next Message off of the wire.
|
473
338
|
def receive()
|
474
|
-
raise Stomp::Error::NoCurrentConnection if closed?
|
339
|
+
raise Stomp::Error::NoCurrentConnection if @closed_check && closed?
|
475
340
|
super_result = __old_receive
|
476
341
|
if super_result.nil? && @reliable && !closed?
|
477
342
|
errstr = "connection.receive returning EOF as nil - resetting connection.\n"
|
data/lib/stomp/constants.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
module Stomp
|
4
4
|
|
5
|
-
# Client
|
5
|
+
# Client generated frames
|
6
6
|
CMD_CONNECT = "CONNECT"
|
7
7
|
CMD_STOMP = "STOMP"
|
8
8
|
CMD_DISCONNECT = "DISCONNECT"
|
@@ -15,7 +15,7 @@ module Stomp
|
|
15
15
|
CMD_COMMIT = "COMMIT"
|
16
16
|
CMD_ABORT = "ABORT"
|
17
17
|
|
18
|
-
# Server
|
18
|
+
# Server generated names
|
19
19
|
CMD_CONNECTED = "CONNECTED"
|
20
20
|
CMD_MESSAGE = "MESSAGE"
|
21
21
|
CMD_RECEIPT = "RECEIPT"
|
@@ -75,6 +75,7 @@ module Stomp
|
|
75
75
|
"\\c", ":",
|
76
76
|
]
|
77
77
|
|
78
|
+
# A fairly safe and generally supported ciphers list.
|
78
79
|
DEFAULT_CIPHERS = [
|
79
80
|
["DHE-RSA-AES256-SHA", "TLSv1/SSLv3", 256, 256],
|
80
81
|
["DHE-DSS-AES256-SHA", "TLSv1/SSLv3", 256, 256],
|
@@ -97,4 +98,4 @@ module Stomp
|
|
97
98
|
["EXP-RC4-MD5", "TLSv1/SSLv3", 40, 128],
|
98
99
|
]
|
99
100
|
|
100
|
-
end
|
101
|
+
end # Module Stomp
|
data/lib/stomp/errors.rb
CHANGED
@@ -48,6 +48,7 @@ module Stomp
|
|
48
48
|
|
49
49
|
# NoCurrentConnection is raised if:
|
50
50
|
# * Any method is called when a current connection does not exist.
|
51
|
+
# * And @closed_check is true (the default).
|
51
52
|
class NoCurrentConnection < RuntimeError
|
52
53
|
def message
|
53
54
|
"no current connection exists"
|
@@ -189,5 +190,6 @@ module Stomp
|
|
189
190
|
end
|
190
191
|
|
191
192
|
end # module Error
|
193
|
+
|
192
194
|
end # module Stomp
|
193
195
|
|
data/lib/stomp/ext/hash.rb
CHANGED
data/lib/stomp/message.rb
CHANGED
@@ -94,7 +94,7 @@ module Stomp
|
|
94
94
|
self.body = work_body[0..body_length]
|
95
95
|
end
|
96
96
|
|
97
|
-
# to_s returns a string prepresentation of this Message
|
97
|
+
# to_s returns a string prepresentation of this Message.
|
98
98
|
def to_s
|
99
99
|
"<Stomp::Message headers=#{headers.inspect} body='#{body}' command='#{command}' >"
|
100
100
|
end
|
@@ -111,7 +111,7 @@ module Stomp
|
|
111
111
|
is_blank?(command) && is_blank?(headers) && is_blank?(body)
|
112
112
|
end
|
113
113
|
|
114
|
-
end
|
114
|
+
end # class Message
|
115
115
|
|
116
|
-
end
|
116
|
+
end # module Stomp
|
117
117
|
|
data/lib/stomp/sslparams.rb
CHANGED
@@ -41,7 +41,7 @@ module Stomp
|
|
41
41
|
# Client wants file existance check on initialize. true/value or false/nil.
|
42
42
|
attr_reader :fsck #
|
43
43
|
|
44
|
-
# initialize returns a valid
|
44
|
+
# initialize returns a valid instance of SSLParams or raises an error.
|
45
45
|
def initialize(opts={})
|
46
46
|
|
47
47
|
# Server authentication parameters
|
data/lib/stomp/version.rb
CHANGED
data/spec/client_spec.rb
CHANGED
@@ -236,8 +236,7 @@ describe Stomp::Client do
|
|
236
236
|
:back_off_multiplier => 2,
|
237
237
|
:max_reconnect_attempts => 0,
|
238
238
|
:randomize => false,
|
239
|
-
:
|
240
|
-
:timeout => -1
|
239
|
+
:connect_timeout => 0
|
241
240
|
}
|
242
241
|
end
|
243
242
|
it "should properly parse a URL with failover://" do
|
@@ -311,8 +310,7 @@ describe Stomp::Client do
|
|
311
310
|
:back_off_multiplier => 3,
|
312
311
|
:max_reconnect_attempts => 4,
|
313
312
|
:randomize => true,
|
314
|
-
:
|
315
|
-
:timeout => -1
|
313
|
+
:connect_timeout => 0
|
316
314
|
}
|
317
315
|
|
318
316
|
@parameters[:hosts] = [
|
data/spec/connection_spec.rb
CHANGED
@@ -17,11 +17,12 @@ describe Stomp::Connection do
|
|
17
17
|
:back_off_multiplier => 2,
|
18
18
|
:max_reconnect_attempts => 0,
|
19
19
|
:randomize => false,
|
20
|
-
:backup => false,
|
21
20
|
:connect_timeout => 0,
|
22
21
|
:parse_timeout => 5,
|
23
22
|
:connect_headers => {},
|
24
|
-
:dmh => false
|
23
|
+
:dmh => false,
|
24
|
+
:closed_check => true,
|
25
|
+
:hbser => false,
|
25
26
|
}
|
26
27
|
|
27
28
|
#POG:
|
@@ -52,7 +53,6 @@ describe Stomp::Connection do
|
|
52
53
|
"backOffMultiplier" => 2,
|
53
54
|
"maxReconnectAttempts" => 0,
|
54
55
|
"randomize" => false,
|
55
|
-
"backup" => false,
|
56
56
|
"connect_timeout" => 0,
|
57
57
|
"parse_timeout" => 5,
|
58
58
|
}
|
@@ -85,7 +85,6 @@ describe Stomp::Connection do
|
|
85
85
|
"backOffMultiplier" => 2,
|
86
86
|
"maxReconnectAttempts" => 0,
|
87
87
|
"randomize" => false,
|
88
|
-
"backup" => false,
|
89
88
|
"connect_timeout" => 0,
|
90
89
|
"parse_timeout" => 5
|
91
90
|
}
|
@@ -99,7 +98,7 @@ describe Stomp::Connection do
|
|
99
98
|
end
|
100
99
|
|
101
100
|
it "should change host to next one with randomize false" do
|
102
|
-
@connection.change_host
|
101
|
+
@connection.send(:change_host) # use .send(:name) to test a private method!
|
103
102
|
@connection.instance_variable_get(:@host).should == "remotehost"
|
104
103
|
end
|
105
104
|
|
@@ -287,21 +286,21 @@ describe Stomp::Connection do
|
|
287
286
|
|
288
287
|
describe "when called to increase reconnect delay" do
|
289
288
|
it "should exponentialy increase when use_exponential_back_off is true" do
|
290
|
-
@connection.increase_reconnect_delay.should == 0.02
|
291
|
-
@connection.increase_reconnect_delay.should == 0.04
|
292
|
-
@connection.increase_reconnect_delay.should == 0.08
|
289
|
+
@connection.send(:increase_reconnect_delay).should == 0.02
|
290
|
+
@connection.send(:increase_reconnect_delay).should == 0.04
|
291
|
+
@connection.send(:increase_reconnect_delay).should == 0.08
|
293
292
|
end
|
294
293
|
it "should not increase when use_exponential_back_off is false" do
|
295
294
|
@parameters[:use_exponential_back_off] = false
|
296
295
|
@connection = Stomp::Connection.new(@parameters)
|
297
|
-
@connection.increase_reconnect_delay.should == 0.01
|
298
|
-
@connection.increase_reconnect_delay.should == 0.01
|
296
|
+
@connection.send(:increase_reconnect_delay).should == 0.01
|
297
|
+
@connection.send(:increase_reconnect_delay).should == 0.01
|
299
298
|
end
|
300
299
|
it "should not increase when max_reconnect_delay is reached" do
|
301
300
|
@parameters[:initial_reconnect_delay] = 8.0
|
302
301
|
@connection = Stomp::Connection.new(@parameters)
|
303
|
-
@connection.increase_reconnect_delay.should == 16.0
|
304
|
-
@connection.increase_reconnect_delay.should == 30.0
|
302
|
+
@connection.send(:increase_reconnect_delay).should == 16.0
|
303
|
+
@connection.send(:increase_reconnect_delay).should == 30.0
|
305
304
|
end
|
306
305
|
|
307
306
|
it "should change to next host on socket error" do
|
@@ -311,7 +310,7 @@ describe Stomp::Connection do
|
|
311
310
|
#tries the new host
|
312
311
|
TCPSocket.should_receive(:open).and_return @tcp_socket
|
313
312
|
|
314
|
-
@connection.socket
|
313
|
+
@connection.send(:socket)
|
315
314
|
@connection.instance_variable_get(:@host).should == "remotehost"
|
316
315
|
end
|
317
316
|
|
@@ -329,11 +328,12 @@ describe Stomp::Connection do
|
|
329
328
|
:back_off_multiplier => 2,
|
330
329
|
:max_reconnect_attempts => 0,
|
331
330
|
:randomize => false,
|
332
|
-
:backup => false,
|
333
331
|
:connect_timeout => 0,
|
334
332
|
:parse_timeout => 5,
|
335
333
|
:connect_headers => {},
|
336
334
|
:dmh => false,
|
335
|
+
:closed_check => true,
|
336
|
+
:hbser => false,
|
337
337
|
}
|
338
338
|
|
339
339
|
used_hash = {
|
@@ -367,12 +367,14 @@ describe Stomp::Connection do
|
|
367
367
|
:dead_letter_queue => "queue/Error",
|
368
368
|
:max_redeliveries => 10,
|
369
369
|
:dmh => false,
|
370
|
+
:closed_check => true,
|
371
|
+
:hbser => false,
|
370
372
|
}
|
371
373
|
|
372
374
|
@connection = Stomp::Connection.new(used_hash)
|
373
375
|
received_hash = @connection.instance_variable_get(:@parameters)
|
374
376
|
|
375
|
-
#Using randomize we can't assure the hosts order
|
377
|
+
# Using randomize we can't assure the hosts order
|
376
378
|
received_hash.delete(:hosts)
|
377
379
|
used_hash.delete(:hosts)
|
378
380
|
|
@@ -386,11 +388,11 @@ describe Stomp::Connection do
|
|
386
388
|
describe "when closing a socket" do
|
387
389
|
it "should close the tcp connection" do
|
388
390
|
@tcp_socket.should_receive(:close)
|
389
|
-
@connection.
|
391
|
+
@connection.__send__(:close_socket).should be_true # Use Object.__send__
|
390
392
|
end
|
391
393
|
it "should ignore exceptions" do
|
392
394
|
@tcp_socket.should_receive(:close).and_raise "exception"
|
393
|
-
@connection.
|
395
|
+
@connection.__send__(:close_socket).should be_true # Use Object.__send__
|
394
396
|
end
|
395
397
|
end
|
396
398
|
|
@@ -399,11 +401,11 @@ describe Stomp::Connection do
|
|
399
401
|
host = @parameters[:hosts][0]
|
400
402
|
@connection = Stomp::Connection.new(host[:login], host[:passcode], host[:host], host[:port], reliable = true, 5, connect_headers = {})
|
401
403
|
@connection.instance_variable_set(:@connection_attempts, 10000)
|
402
|
-
@connection.max_reconnect_attempts
|
404
|
+
@connection.send(:max_reconnect_attempts?).should be_false
|
403
405
|
end
|
404
406
|
it "should return false if max_reconnect_attempts = 0" do
|
405
407
|
@connection.instance_variable_set(:@connection_attempts, 10000)
|
406
|
-
@connection.max_reconnect_attempts
|
408
|
+
@connection.send(:max_reconnect_attempts?).should be_false
|
407
409
|
end
|
408
410
|
it "should return true if connection attempts > max_reconnect_attempts" do
|
409
411
|
limit = 10000
|
@@ -411,10 +413,10 @@ describe Stomp::Connection do
|
|
411
413
|
@connection = Stomp::Connection.new(@parameters)
|
412
414
|
|
413
415
|
@connection.instance_variable_set(:@connection_attempts, limit-1)
|
414
|
-
@connection.max_reconnect_attempts
|
416
|
+
@connection.send(:max_reconnect_attempts?).should be_false
|
415
417
|
|
416
418
|
@connection.instance_variable_set(:@connection_attempts, limit)
|
417
|
-
@connection.max_reconnect_attempts
|
419
|
+
@connection.send(:max_reconnect_attempts?).should be_true
|
418
420
|
|
419
421
|
end
|
420
422
|
end
|
data/stomp.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{stomp}
|
8
|
-
s.version = "1.2.
|
8
|
+
s.version = "1.2.6"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Brian McCallister", "Marius Mathiesen", "Thiago Morello", "Guy M. Allard"]
|
12
|
-
s.date = %q{2012-
|
12
|
+
s.date = %q{2012-10-05}
|
13
13
|
s.description = %q{Ruby client for the Stomp messaging protocol. Note that this gem is no longer supported on rubyforge.}
|
14
14
|
s.email = ["brianm@apache.org", "marius@stones.com", "morellon@gmail.com", "allard.guy.m@gmail.com"]
|
15
15
|
s.executables = ["catstomp", "stompcat"]
|
data/test/tlogger.rb
CHANGED
@@ -93,16 +93,6 @@ class Tlogger
|
|
93
93
|
end
|
94
94
|
end
|
95
95
|
|
96
|
-
# Stomp 1.1+ - heart beat read (receive) failed
|
97
|
-
def on_hbread_fail(parms, ticker_data)
|
98
|
-
begin
|
99
|
-
@log.debug "Hbreadf Parms #{info(parms)}"
|
100
|
-
@log.debug "Hbreadf Result #{ticker_data}"
|
101
|
-
rescue
|
102
|
-
@log.debug "Hbreadf oops"
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
96
|
# Stomp 1.1+ - heart beat send (transmit) failed
|
107
97
|
def on_hbwrite_fail(parms, ticker_data)
|
108
98
|
begin
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stomp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 1.2.
|
9
|
+
- 6
|
10
|
+
version: 1.2.6
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Brian McCallister
|
@@ -18,7 +18,7 @@ autorequire:
|
|
18
18
|
bindir: bin
|
19
19
|
cert_chain: []
|
20
20
|
|
21
|
-
date: 2012-
|
21
|
+
date: 2012-10-05 00:00:00 -04:00
|
22
22
|
default_executable:
|
23
23
|
dependencies:
|
24
24
|
- !ruby/object:Gem::Dependency
|