onstomp 1.0.3 → 1.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/.rspec +1 -1
- data/CHANGELOG.md +10 -0
- data/Gemfile +5 -1
- data/lib/onstomp/client.rb +13 -1
- data/lib/onstomp/connections.rb +9 -5
- data/lib/onstomp/connections/base.rb +144 -38
- data/lib/onstomp/connections/heartbeating.rb +0 -14
- data/lib/onstomp/failover/buffers.rb +1 -0
- data/lib/onstomp/failover/buffers/base.rb +59 -0
- data/lib/onstomp/failover/buffers/receipts.rb +16 -69
- data/lib/onstomp/failover/buffers/written.rb +18 -70
- data/lib/onstomp/failover/failover_configurable.rb +0 -7
- data/lib/onstomp/failover/uri.rb +3 -1
- data/lib/onstomp/interfaces/client_events.rb +1 -1
- data/lib/onstomp/interfaces/connection_events.rb +8 -0
- data/lib/onstomp/interfaces/uri_configurable.rb +7 -0
- data/lib/onstomp/version.rb +1 -1
- data/spec/onstomp/client_spec.rb +13 -1
- data/spec/onstomp/components/scopes/transaction_scope_spec.rb +7 -7
- data/spec/onstomp/connections/base_spec.rb +194 -12
- data/spec/onstomp/connections/heartbeating_spec.rb +0 -24
- data/spec/onstomp/connections_spec.rb +19 -7
- data/spec/onstomp/full_stacks/failover_spec.rb +49 -33
- data/spec/onstomp/full_stacks/onstomp_spec.rb +45 -4
- data/spec/onstomp/full_stacks/onstomp_ssh_spec.rb +10 -2
- data/spec/onstomp/full_stacks/test_broker.rb +21 -18
- metadata +2 -1
@@ -65,30 +65,6 @@ module OnStomp::Connections
|
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
68
|
-
describe ".duration_since_transmitted" do
|
69
|
-
it "should be nil if last_transmitted_at is nil" do
|
70
|
-
connection.stub(:last_transmitted_at => nil)
|
71
|
-
connection.duration_since_transmitted.should be_nil
|
72
|
-
end
|
73
|
-
it "should be the difference between now and the last_transmitted_at in milliseconds" do
|
74
|
-
Time.stub(:now => 10)
|
75
|
-
connection.stub(:last_transmitted_at => 8.5)
|
76
|
-
connection.duration_since_transmitted.should == 1500
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
describe ".duration_since_received" do
|
81
|
-
it "should be nil if last_received_at is nil" do
|
82
|
-
connection.stub(:last_received_at => nil)
|
83
|
-
connection.duration_since_received.should be_nil
|
84
|
-
end
|
85
|
-
it "should be the difference between now and the last_received_at in milliseconds" do
|
86
|
-
Time.stub(:now => 10)
|
87
|
-
connection.stub(:last_received_at => 6)
|
88
|
-
connection.duration_since_received.should == 4000
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
68
|
describe ".client_pulse?" do
|
93
69
|
it "should be true if client heartbeating is disabled" do
|
94
70
|
connection.stub(:heartbeat_client_limit => 0)
|
@@ -24,12 +24,12 @@ module OnStomp
|
|
24
24
|
let(:stomp_1_0_class) { mock('stomp 1.0 class') }
|
25
25
|
let(:stomp_1_1_class) { mock('stomp 1.1 class') }
|
26
26
|
let(:stomp_1_0) {
|
27
|
-
mock('stomp 1.0', :is_a? => false).tap do |m|
|
27
|
+
mock('stomp 1.0', :is_a? => false, :read_timeout => 30, :write_timeout => 20).tap do |m|
|
28
28
|
m.stub(:is_a?).with(stomp_1_0_class).and_return(true)
|
29
29
|
end
|
30
30
|
}
|
31
31
|
let(:stomp_1_1) {
|
32
|
-
mock('stomp 1.1', :is_a? => false).tap do |m|
|
32
|
+
mock('stomp 1.1', :is_a? => false, :read_timeout => 30, :write_timeout => 20).tap do |m|
|
33
33
|
m.stub(:is_a?).with(stomp_1_1_class).and_return(true)
|
34
34
|
end
|
35
35
|
}
|
@@ -77,14 +77,20 @@ module OnStomp
|
|
77
77
|
it "should create a 1.0 connection" do
|
78
78
|
stomp_1_0.should_receive(:connect).and_return(['1.0', connected_frame])
|
79
79
|
stomp_1_0.should_receive(:configure).with(connected_frame, pend_events)
|
80
|
-
|
80
|
+
stomp_1_0.should_receive(:read_timeout=).with(5)
|
81
|
+
stomp_1_0.should_receive(:write_timeout=).with(10)
|
82
|
+
Connections.connect client, user_headers, connect_headers, pend_events, 5, 10
|
81
83
|
end
|
82
84
|
it "should create a 1.1 connection" do
|
83
85
|
stomp_1_0.should_receive(:connect).and_return(['1.1', connected_frame])
|
84
86
|
stomp_1_0.should_receive(:socket).and_return(tcp_socket)
|
87
|
+
stomp_1_0.should_receive(:read_timeout=).with(10)
|
88
|
+
stomp_1_0.should_receive(:write_timeout=).with(5)
|
85
89
|
stomp_1_1_class.should_receive(:new).with(tcp_socket, client).and_return(stomp_1_1)
|
86
90
|
stomp_1_1.should_receive(:configure).with(connected_frame, pend_events)
|
87
|
-
|
91
|
+
stomp_1_1.should_receive(:read_timeout=).with(30)
|
92
|
+
stomp_1_1.should_receive(:write_timeout=).with(20)
|
93
|
+
Connections.connect client, user_headers, connect_headers, pend_events, 10, 5
|
88
94
|
end
|
89
95
|
end
|
90
96
|
|
@@ -105,7 +111,9 @@ module OnStomp
|
|
105
111
|
ssl_context.should_receive(:"#{k}=").with(v)
|
106
112
|
end
|
107
113
|
ssl_socket.should_receive(:post_connection_check).with(ssl_options[:post_connection_check])
|
108
|
-
|
114
|
+
stomp_1_0.should_receive(:read_timeout=).with(5)
|
115
|
+
stomp_1_0.should_receive(:write_timeout=).with(10)
|
116
|
+
Connections.connect client, user_headers, connect_headers, pend_events, 5, 10
|
109
117
|
end
|
110
118
|
it "should create a 1.1 connection" do
|
111
119
|
client.stub(:ssl => nil)
|
@@ -117,9 +125,13 @@ module OnStomp
|
|
117
125
|
end
|
118
126
|
ssl_socket.should_receive(:post_connection_check).with(client_uri.host)
|
119
127
|
stomp_1_0.should_receive(:socket).and_return(ssl_socket)
|
128
|
+
stomp_1_0.should_receive(:read_timeout=).with(10)
|
129
|
+
stomp_1_0.should_receive(:write_timeout=).with(5)
|
120
130
|
stomp_1_1_class.should_receive(:new).with(ssl_socket, client).and_return(stomp_1_1)
|
121
131
|
stomp_1_1.should_receive(:configure).with(connected_frame, pend_events)
|
122
|
-
|
132
|
+
stomp_1_1.should_receive(:read_timeout=).with(30)
|
133
|
+
stomp_1_1.should_receive(:write_timeout=).with(20)
|
134
|
+
Connections.connect client, user_headers, connect_headers, pend_events, 10, 5
|
123
135
|
end
|
124
136
|
end
|
125
137
|
|
@@ -130,7 +142,7 @@ module OnStomp
|
|
130
142
|
Connections.stub(:negotiate_connection).and_raise OnStomp::OnStompError
|
131
143
|
stomp_1_0.should_receive(:close).with(true)
|
132
144
|
lambda {
|
133
|
-
Connections.connect client, user_headers, connect_headers, pend_events
|
145
|
+
Connections.connect client, user_headers, connect_headers, pend_events, 5, 10
|
134
146
|
}.should raise_error(OnStomp::OnStompError)
|
135
147
|
end
|
136
148
|
end
|
@@ -31,76 +31,92 @@ describe OnStomp::Failover, "full stack test", :fullstack => true, :failover =>
|
|
31
31
|
#
|
32
32
|
it "should failover" do
|
33
33
|
# Occasionally generates: ["CONNECT", "DISCONNECT", "BEGIN", "SEND", "SUBSCRIBE", "SEND", "COMMIT"]
|
34
|
-
committed = false
|
35
34
|
brokers.first.kill_on_command 'SUBSCRIBE'
|
36
|
-
|
35
|
+
brokers.last.accept_delay = 1
|
37
36
|
|
38
37
|
client = OnStomp::Failover::Client.new('failover:(stomp://localhost:10102,stomp://localhost:10103)')
|
39
38
|
client.on_subscribe do |s, rc|
|
40
39
|
# This frame will almost always get written to the first broker before the hangup occurs
|
41
|
-
client.send '/queue/onstomp/failover/test', 'are you receiving?'
|
42
|
-
:'x-onstomp-real-client' => rc.uri
|
40
|
+
client.send '/queue/onstomp/failover/test', 'are you receiving?'
|
43
41
|
end
|
44
42
|
|
45
43
|
client.connect
|
46
|
-
client.send '/queue/onstomp/failover/test', '4-3-2-1 Earth Below Me'
|
47
|
-
|
48
|
-
client.begin 't-1234', :'x-onstomp-real-client' => client.active_client.uri
|
44
|
+
client.send '/queue/onstomp/failover/test', '4-3-2-1 Earth Below Me'
|
45
|
+
client.begin 't-1234'
|
49
46
|
client.send '/queue/onstomp/failover/test', 'hello major tom',
|
50
|
-
:transaction => 't-1234'
|
51
|
-
client.subscribe('/queue/onstomp/failover/test'
|
47
|
+
:transaction => 't-1234'
|
48
|
+
client.subscribe('/queue/onstomp/failover/test') do |m|
|
52
49
|
end
|
53
50
|
Thread.pass while client.connected?
|
54
51
|
|
55
|
-
client.send '/queue/onstomp/failover/test', 'Are you receiving?'
|
56
|
-
|
57
|
-
sub = client.subscribe('/queue/onstomp/failover/test2', :'x-onstomp-real-client' => client.active_client.uri) do |m|
|
52
|
+
client.send '/queue/onstomp/failover/test', 'Are you receiving?'
|
53
|
+
sub = client.subscribe('/queue/onstomp/failover/test2') do |m|
|
58
54
|
end
|
59
|
-
client.unsubscribe sub
|
60
|
-
client.commit 't-1234'
|
61
|
-
|
62
|
-
|
55
|
+
client.unsubscribe sub
|
56
|
+
client.commit 't-1234'
|
57
|
+
|
58
|
+
# Need to ensure that the DISCONNECT frame was actually received by
|
59
|
+
# the broker
|
60
|
+
client.disconnect :receipt => 'rcpt-disconnect'
|
63
61
|
brokers.each(&:join)
|
64
62
|
brokers.first.frames_received.map(&:command).should == ["CONNECT", "SEND", "BEGIN", "SEND", "SUBSCRIBE"]
|
63
|
+
# The reason there is only one SUBSCRIBE and no UNSUBSCRIBE is that
|
64
|
+
# the pair will cancel out before the connection has been re-established.
|
65
65
|
brokers.last.frames_received.map(&:command).should == ["CONNECT", "BEGIN", "SEND", "SUBSCRIBE", "SEND", "COMMIT", "SEND", "DISCONNECT"]
|
66
66
|
end
|
67
67
|
end
|
68
|
+
|
68
69
|
describe "failing over with a Receipts buffer" do
|
69
70
|
it "should failover" do
|
70
|
-
committed = false
|
71
|
-
killed = false
|
72
71
|
brokers.first.kill_on_command 'SUBSCRIBE'
|
72
|
+
brokers.last.accept_delay = 1
|
73
73
|
|
74
74
|
client = OnStomp::Failover::Client.new('failover:(stomp://localhost:10102,stomp://localhost:10103)',
|
75
75
|
:buffer => OnStomp::Failover::Buffers::Receipts)
|
76
|
-
|
76
|
+
check_for_maybes = []
|
77
|
+
client.after_transmitting do |f, c, *_|
|
78
|
+
#puts "Sending: #{f.command} to #{c.uri}"
|
79
|
+
if c.uri.to_s == 'stomp://localhost:10102' && f.headers?(:receipt,:may_be_receipted)
|
80
|
+
check_for_maybes << f
|
81
|
+
end
|
82
|
+
end
|
83
|
+
client.on_receipt do |r, c, *_|
|
84
|
+
if c.uri.to_s == 'stomp://localhost:10102'
|
85
|
+
check_for_maybes.reject! { |f| f[:receipt] == r[:'receipt-id'] }
|
86
|
+
end
|
87
|
+
end
|
88
|
+
client.on_subscribe do |s, *_|
|
77
89
|
# This frame will get written, but the broker will hang up before
|
78
90
|
# a RECEIPT is given, so it will get repeated
|
79
|
-
client.send '/queue/onstomp/failover/test', 'are you receiving?'
|
80
|
-
:'x-onstomp-real-client' => rc.uri
|
91
|
+
client.send '/queue/onstomp/failover/test', 'are you receiving?'
|
81
92
|
end
|
82
93
|
|
83
94
|
client.connect
|
84
95
|
client.send '/queue/onstomp/failover/test', '4-3-2-1 Earth Below Me',
|
85
|
-
:
|
86
|
-
client.begin 't-1234'
|
96
|
+
:may_be_receipted => '1'
|
97
|
+
client.begin 't-1234'
|
87
98
|
client.send '/queue/onstomp/failover/test', 'hello major tom',
|
88
|
-
:transaction => 't-1234'
|
89
|
-
client.subscribe('/queue/onstomp/failover/test'
|
99
|
+
:transaction => 't-1234'
|
100
|
+
client.subscribe('/queue/onstomp/failover/test') do |m|
|
90
101
|
end
|
91
102
|
Thread.pass while client.connected?
|
92
103
|
|
93
|
-
client.send '/queue/onstomp/failover/test', 'Are you receiving?'
|
94
|
-
|
95
|
-
sub = client.subscribe('/queue/onstomp/failover/test2', :'x-onstomp-real-client' => client.active_client.uri) do |m|
|
104
|
+
client.send '/queue/onstomp/failover/test', 'Are you receiving?'
|
105
|
+
sub = client.subscribe('/queue/onstomp/failover/test2') do |m|
|
96
106
|
end
|
97
|
-
client.unsubscribe sub
|
98
|
-
client.commit 't-1234'
|
99
|
-
|
100
|
-
|
107
|
+
client.unsubscribe sub
|
108
|
+
client.commit 't-1234'
|
109
|
+
|
110
|
+
# Need to ensure that the DISCONNECT frame was actually received by
|
111
|
+
# the broker
|
112
|
+
client.disconnect :receipt => 'rcpt-disconnect'
|
101
113
|
brokers.each(&:join)
|
114
|
+
may_be_present = check_for_maybes.map(&:command)
|
115
|
+
# The reason there is only one SUBSCRIBE and no UNSUBSCRIBE is that
|
116
|
+
# the pair will cancel out before the connection has been re-established.
|
102
117
|
brokers.first.frames_received.map(&:command).should == ["CONNECT", "SEND", "BEGIN", "SEND", "SUBSCRIBE"]
|
103
|
-
brokers.last.frames_received.map(&:command).should == ["CONNECT"
|
118
|
+
brokers.last.frames_received.map(&:command).should == (["CONNECT"] +
|
119
|
+
may_be_present + ["BEGIN", "SEND", "SUBSCRIBE", "SEND", "SEND", "COMMIT", "SEND", "DISCONNECT"])
|
104
120
|
end
|
105
121
|
end
|
106
122
|
end
|
@@ -3,6 +3,14 @@ require 'spec_helper'
|
|
3
3
|
require File.expand_path('../test_broker', __FILE__)
|
4
4
|
|
5
5
|
describe OnStomp::Client, "full stack test (stomp+ssl:)", :fullstack => true do
|
6
|
+
def encode_body body, encoding
|
7
|
+
if RUBY_VERSION >= '1.9'
|
8
|
+
body.encode(encoding)
|
9
|
+
else
|
10
|
+
body
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
6
14
|
describe "STOMP 1.0" do
|
7
15
|
let(:broker) {
|
8
16
|
TestBroker.new 10101
|
@@ -15,16 +23,49 @@ describe OnStomp::Client, "full stack test (stomp+ssl:)", :fullstack => true do
|
|
15
23
|
end
|
16
24
|
|
17
25
|
describe "connecting" do
|
18
|
-
it "should
|
26
|
+
it "should run just fine" do
|
27
|
+
blocked_up = false
|
19
28
|
client = OnStomp::Client.new('stomp://localhost:10101')
|
29
|
+
client.on_connection_blocked do |*_|
|
30
|
+
blocked_up = true
|
31
|
+
end
|
32
|
+
client.write_timeout = 1
|
20
33
|
client.connect
|
21
34
|
client.send '/queue/test', 'my message body', {
|
22
35
|
"this:is\na \\fun\\ header" => 'blather matter'
|
23
36
|
}
|
24
|
-
client.send '/queue/test', "\x01\x02\x03\x04\x05\x06"
|
37
|
+
client.send '/queue/test', encode_body("\x01\x02\x03\x04\x05\x06", 'BINARY'),
|
25
38
|
:'content-type' => 'application/octet-stream'
|
26
|
-
|
39
|
+
sleep 1.5
|
40
|
+
client.send '/queue/test', encode_body("hëllo", 'ISO-8859-1')
|
41
|
+
client.disconnect :receipt => 'rcpt-disconnect'
|
27
42
|
broker.join
|
43
|
+
blocked_up.should be_false
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should block on write" do
|
47
|
+
blocked_up = false
|
48
|
+
client = OnStomp::Client.new('stomp://localhost:10101')
|
49
|
+
client.on_connection_blocked do |*_|
|
50
|
+
blocked_up = true
|
51
|
+
end
|
52
|
+
client.write_timeout = 1
|
53
|
+
client.connect
|
54
|
+
# Can't seem to make this happen, so we'll do the next best thing.
|
55
|
+
con = client.connection
|
56
|
+
def con.ready_for_write?
|
57
|
+
false
|
58
|
+
end
|
59
|
+
client.send '/queue/test', 'my message body', {
|
60
|
+
"this:is\na \\fun\\ header" => 'blather matter'
|
61
|
+
}
|
62
|
+
client.send '/queue/test', encode_body("\x01\x02\x03\x04\x05\x06", 'BINARY'),
|
63
|
+
:'content-type' => 'application/octet-stream'
|
64
|
+
sleep 1.5
|
65
|
+
client.send '/queue/test', encode_body("hëllo", 'ISO-8859-1')
|
66
|
+
client.disconnect
|
67
|
+
broker.stop
|
68
|
+
blocked_up.should be_true
|
28
69
|
end
|
29
70
|
end
|
30
71
|
end
|
@@ -48,7 +89,7 @@ describe OnStomp::Client, "full stack test (stomp+ssl:)", :fullstack => true do
|
|
48
89
|
client.send '/queue/test', 'my message body', {
|
49
90
|
"this:is\na \\fun\\ header" => 'blather matter'
|
50
91
|
}
|
51
|
-
client.send '/queue/test', "\x01\x02\x03\x04\x05\x06"
|
92
|
+
client.send '/queue/test', encode_body("\x01\x02\x03\x04\x05\x06", 'BINARY'),
|
52
93
|
:'content-type' => 'application/octet-stream'
|
53
94
|
client.disconnect
|
54
95
|
broker.join
|
@@ -3,6 +3,14 @@ require 'spec_helper'
|
|
3
3
|
require File.expand_path('../test_broker', __FILE__)
|
4
4
|
|
5
5
|
describe OnStomp::Client, "full stack test (stomp+ssl:)", :fullstack => true do
|
6
|
+
def encode_body body, encoding
|
7
|
+
if RUBY_VERSION >= '1.9'
|
8
|
+
body.encode(encoding)
|
9
|
+
else
|
10
|
+
body
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
6
14
|
describe "STOMP 1.0" do
|
7
15
|
let(:broker) {
|
8
16
|
TestSSLBroker.new 10103
|
@@ -24,7 +32,7 @@ describe OnStomp::Client, "full stack test (stomp+ssl:)", :fullstack => true do
|
|
24
32
|
client.send '/queue/test', 'my message body', {
|
25
33
|
"this:is\na \\fun\\ header" => 'blather matter'
|
26
34
|
}
|
27
|
-
client.send '/queue/test', "\x01\x02\x03\x04\x05\x06"
|
35
|
+
client.send '/queue/test', encode_body("\x01\x02\x03\x04\x05\x06",'BINARY'),
|
28
36
|
:'content-type' => 'application/octet-stream'
|
29
37
|
client.disconnect
|
30
38
|
broker.join
|
@@ -63,7 +71,7 @@ describe OnStomp::Client, "full stack test (stomp+ssl:)", :fullstack => true do
|
|
63
71
|
client.send '/queue/test', 'my message body', {
|
64
72
|
"this:is\na \\fun\\ header" => 'blather matter'
|
65
73
|
}
|
66
|
-
client.send '/queue/test', "\x01\x02\x03\x04\x05\x06"
|
74
|
+
client.send '/queue/test', encode_body("\x01\x02\x03\x04\x05\x06",'BINARY'),
|
67
75
|
:'content-type' => 'application/octet-stream'
|
68
76
|
client.disconnect
|
69
77
|
broker.join
|
@@ -7,7 +7,7 @@ class TestBroker
|
|
7
7
|
|
8
8
|
attr_reader :messages, :sessions, :mau_dib
|
9
9
|
attr_reader :frames_received, :frames_transmitted
|
10
|
-
attr_accessor :session_class
|
10
|
+
attr_accessor :session_class, :accept_delay
|
11
11
|
|
12
12
|
def initialize(port=61613)
|
13
13
|
@frames_received = []
|
@@ -24,6 +24,7 @@ class TestBroker
|
|
24
24
|
$stdout.puts "Could not bind: #{ex}"
|
25
25
|
end
|
26
26
|
@session_class = Session10
|
27
|
+
@accept_delay = nil
|
27
28
|
end
|
28
29
|
|
29
30
|
def kill_on_command command
|
@@ -38,7 +39,6 @@ class TestBroker
|
|
38
39
|
end
|
39
40
|
msg[:'message-id'] = "msg-#{Time.now.to_f}"
|
40
41
|
dest = msg[:destination]
|
41
|
-
#$stdout.puts "Enqueuing on #{dest}"
|
42
42
|
if !@subscribes[dest].empty?
|
43
43
|
session, subid = @subscribes[dest].first
|
44
44
|
deliver_message msg, session, subid
|
@@ -46,7 +46,6 @@ class TestBroker
|
|
46
46
|
@messages[dest] << msg
|
47
47
|
end
|
48
48
|
end
|
49
|
-
#$stdout.puts "Done enqueueing!"
|
50
49
|
end
|
51
50
|
|
52
51
|
def deliver_message msg, sess, subid
|
@@ -88,6 +87,7 @@ class TestBroker
|
|
88
87
|
begin
|
89
88
|
loop do
|
90
89
|
sock = @socket.accept
|
90
|
+
@accept_delay && sleep(@accept_delay)
|
91
91
|
@session_mutex.synchronize do
|
92
92
|
@sessions << @session_class.new(self, sock)
|
93
93
|
end
|
@@ -133,6 +133,12 @@ class TestBroker
|
|
133
133
|
def init_connection
|
134
134
|
@connection = OnStomp::Connections::Stomp_1_0.new(socket, self)
|
135
135
|
@processor = OnStomp::Components::ThreadedProcessor.new self
|
136
|
+
@killing = false
|
137
|
+
@session_killer = Thread.new do
|
138
|
+
Thread.pass until @killing
|
139
|
+
@socket.close rescue nil
|
140
|
+
@processor.stop rescue nil
|
141
|
+
end
|
136
142
|
end
|
137
143
|
|
138
144
|
def reply_to_connect connect_frame
|
@@ -150,22 +156,19 @@ class TestBroker
|
|
150
156
|
|
151
157
|
def init_events
|
152
158
|
on_subscribe do |s,_|
|
153
|
-
|
154
|
-
@server.subscribe s, self
|
159
|
+
@server.subscribe(s, self) unless @killing
|
155
160
|
end
|
156
161
|
|
157
162
|
on_unsubscribe do |u, _|
|
158
|
-
|
159
|
-
@server.unsubscribe u, self
|
163
|
+
@server.unsubscribe(u, self) unless @killing
|
160
164
|
end
|
161
165
|
|
162
166
|
on_send do |s,_|
|
163
|
-
|
164
|
-
@server.enqueue_message s
|
167
|
+
@server.enqueue_message(s) unless @killing
|
165
168
|
end
|
166
169
|
|
167
170
|
on_disconnect do |d,_|
|
168
|
-
|
171
|
+
#@connection.close
|
169
172
|
end
|
170
173
|
|
171
174
|
after_transmitting do |f,_|
|
@@ -173,13 +176,14 @@ class TestBroker
|
|
173
176
|
end
|
174
177
|
|
175
178
|
before_receiving do |f,_|
|
176
|
-
@server.frames_received << f
|
179
|
+
@server.frames_received << f unless @killing
|
177
180
|
if @server.mau_dib && f.command == @server.mau_dib
|
178
181
|
kill
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
182
|
+
elsif !@killing
|
183
|
+
if f.header? :receipt
|
184
|
+
transmit OnStomp::Components::Frame.new('RECEIPT',
|
185
|
+
:'receipt-id' => f[:receipt])
|
186
|
+
end
|
183
187
|
end
|
184
188
|
end
|
185
189
|
end
|
@@ -203,13 +207,12 @@ class TestBroker
|
|
203
207
|
def join
|
204
208
|
if @connection.connected?
|
205
209
|
#@connection.close
|
206
|
-
@processor.join
|
210
|
+
@processor.join rescue nil
|
207
211
|
end
|
208
212
|
end
|
209
213
|
|
210
214
|
def kill
|
211
|
-
@
|
212
|
-
@processor.stop
|
215
|
+
@killing = true
|
213
216
|
end
|
214
217
|
|
215
218
|
def stop
|