stomp 1.2.4 → 1.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. data/CHANGELOG.rdoc +11 -0
  2. data/README.rdoc +38 -26
  3. data/Rakefile +3 -0
  4. data/bin/catstomp +34 -34
  5. data/bin/stompcat +36 -36
  6. data/examples/client11_ex1.rb +64 -55
  7. data/examples/client11_putget1.rb +47 -35
  8. data/examples/conn11_ex1.rb +59 -51
  9. data/examples/conn11_ex2.rb +59 -50
  10. data/examples/conn11_hb1.rb +35 -26
  11. data/examples/consumer.rb +25 -12
  12. data/examples/get11conn_ex1.rb +97 -89
  13. data/examples/get11conn_ex2.rb +55 -47
  14. data/examples/logexamp.rb +66 -52
  15. data/examples/logexamp_ssl.rb +66 -52
  16. data/examples/publisher.rb +21 -10
  17. data/examples/put11conn_ex1.rb +35 -24
  18. data/examples/putget11_rh1.rb +66 -56
  19. data/examples/slogger.rb +65 -52
  20. data/examples/ssl_uc1.rb +24 -13
  21. data/examples/ssl_uc1_ciphers.rb +28 -15
  22. data/examples/ssl_uc2.rb +26 -16
  23. data/examples/ssl_uc2_ciphers.rb +31 -18
  24. data/examples/ssl_uc3.rb +25 -14
  25. data/examples/ssl_uc3_ciphers.rb +31 -18
  26. data/examples/ssl_uc4.rb +26 -15
  27. data/examples/ssl_uc4_ciphers.rb +32 -19
  28. data/examples/ssl_ucx_default_ciphers.rb +25 -12
  29. data/examples/stomp11_common.rb +16 -15
  30. data/examples/topic_consumer.rb +23 -10
  31. data/examples/topic_publisher.rb +22 -8
  32. data/lib/client/utils.rb +116 -0
  33. data/lib/connection/heartbeats.rb +173 -0
  34. data/lib/connection/netio.rb +322 -0
  35. data/lib/connection/utf8.rb +294 -0
  36. data/lib/connection/utils.rb +104 -0
  37. data/lib/stomp/client.rb +127 -179
  38. data/lib/stomp/codec.rb +5 -2
  39. data/lib/stomp/connection.rb +109 -865
  40. data/lib/stomp/constants.rb +52 -33
  41. data/lib/stomp/errors.rb +56 -5
  42. data/lib/stomp/ext/hash.rb +4 -0
  43. data/lib/stomp/message.rb +49 -29
  44. data/lib/stomp/sslparams.rb +83 -71
  45. data/lib/stomp/version.rb +3 -1
  46. data/lib/stomp.rb +18 -9
  47. data/stomp.gemspec +58 -3
  48. data/test/test_client.rb +28 -1
  49. data/test/test_codec.rb +8 -2
  50. data/test/test_connection.rb +29 -0
  51. data/test/test_connection1p.rb +31 -16
  52. data/test/test_helper.rb +20 -3
  53. data/test/test_message.rb +8 -3
  54. data/test/test_ssl.rb +10 -4
  55. data/test/tlogger.rb +16 -15
  56. metadata +59 -4
data/CHANGELOG.rdoc CHANGED
@@ -1,3 +1,14 @@
1
+ == 1.2.5 20120804
2
+
3
+ * Issue #48 any forks with modifications will be affected!
4
+ * Source code restructured into individual files
5
+ * Common indentation used throughout the source
6
+ * Many method comments have been added
7
+ * See notes in source regarding making methods private in the next release
8
+ * See notes in source regarding removal of methods in the next release
9
+ * Include examples and tests in rdoc generated during install
10
+ * Issue #47 socket is open during retries
11
+
1
12
  == 1.2.4 20120625
2
13
 
3
14
  * Add ability for client to request flush on write to the connection (Issue #45)
data/README.rdoc CHANGED
@@ -10,35 +10,16 @@ An implementation of the Stomp protocol for Ruby. See:
10
10
 
11
11
  ===New
12
12
 
13
- * Gem version 1.2.2. Stomp 1.1 heartbeat fix, autoflush capability, miscellaneous fixes
14
- * Gem version 1.2.3. Miscellaneous fixes, see changelog for details.
15
- * Gem version 1.2.2. Performance and more SSL enhancements.
13
+ * Gem version 1.2.5. Restructure. Forks with modifcations will be affected. See _CHANGELOG.rdoc_ for details.
14
+ * Gem version 1.2.4. Stomp 1.1 heartbeat fix, autoflush capability, miscellaneous fixes.
15
+ * Gem version 1.2.3. Miscellaneous fixes, see changelog for details.
16
+ * Gem version 1.2.2. Performance and more SSL enhancements.
16
17
  * Full support of SSL certificates is announced as of gem version 1.2.1.
17
18
  * Support of Stomp protocol level 1.1 is announced as of gem version 1.2.0.
18
19
 
19
- See the change log for details.
20
+ See _CHANGELOG.rdoc_ for details.
20
21
 
21
- ===Example Usage
22
-
23
- client = Stomp::Client.new("test", "user", "localhost", 61613)
24
- client.send("/queue/mine", "hello world!")
25
- client.subscribe("/queue/mine") do |msg|
26
- p msg
27
- end
28
-
29
- ===Failover + SSL Example URL Usage
30
-
31
- options = "initialReconnectDelay=5000&randomize=false&useExponentialBackOff=false"
32
-
33
- # remotehost1 uses SSL, remotehost2 doesn't
34
- client = Stomp::Client.new("failover:(stomp+ssl://login1:passcode1@remotehost1:61612,stomp://login2:passcode2@remotehost2:61613)?#{options}")
35
-
36
- client.publish("/queue/mine", "hello world!")
37
- client.subscribe("/queue/mine") do |msg|
38
- p msg
39
- end
40
-
41
- ===Hash Login Example Usage
22
+ ===Hash Login Example Usage (this is the recommended login technique)
42
23
 
43
24
  hash = {
44
25
  :hosts => [
@@ -67,8 +48,39 @@ See the change log for details.
67
48
  # for connection
68
49
  connection = Stomp::Connection.new(hash)
69
50
 
51
+ ===Positional Parameter Usage
52
+
53
+ client = Stomp::Client.new("test", "user", "localhost", 61613)
54
+ client.send("/queue/mine", "hello world!")
55
+ client.subscribe("/queue/mine") do |msg|
56
+ p msg
57
+ end
58
+
59
+ ===Stomp URL Usage
60
+
61
+ # Stomp URL :
62
+ A Stomp URL must begin with 'stomp://' and can be in one of the following forms:
63
+
64
+ stomp://host:port
65
+ stomp://host.domain.tld:port
66
+ stomp://login:passcode@host:port
67
+ stomp://login:passcode@host.domain.tld:port
68
+
69
+ e.g. c = Stomp::Client.new(urlstring)
70
+
71
+ ===Failover + SSL Example URL Usage
72
+
73
+ options = "initialReconnectDelay=5000&randomize=false&useExponentialBackOff=false"
74
+
75
+ # remotehost1 uses SSL, remotehost2 doesn't
76
+ client = Stomp::Client.new("failover:(stomp+ssl://login1:passcode1@remotehost1:61612,stomp://login2:passcode2@remotehost2:61613)?#{options}")
77
+
78
+ client.publish("/queue/mine", "hello world!")
79
+ client.subscribe("/queue/mine") do |msg|
80
+ p msg
81
+ end
70
82
 
71
- ===Hstorical Information
83
+ ===Historical Information
72
84
 
73
85
  Up until March 2009 the project was maintained and primarily developed by Brian McCallister.
74
86
 
data/Rakefile CHANGED
@@ -37,6 +37,9 @@ begin
37
37
  gem.authors = ["Brian McCallister", 'Marius Mathiesen', 'Thiago Morello',
38
38
  'Guy M. Allard']
39
39
  gem.add_development_dependency "rspec", '>= 2.3'
40
+ gem.extra_rdoc_files = [ "README.rdoc", "CHANGELOG.rdoc", "LICENSE",
41
+ "lib/**/*.rb", "examples/**/*.rb",
42
+ "test/**/*.rb" ]
40
43
  end
41
44
  Jeweler::GemcutterTasks.new
42
45
  rescue LoadError
data/bin/catstomp CHANGED
@@ -28,46 +28,46 @@ require 'stomp'
28
28
  #
29
29
  begin
30
30
 
31
- if ARGV[0] == '-h' || ARGV[0] == '--help'
32
- $stdout.puts
33
- $stdout.puts 'Usage: catstomp DESTINATION'
34
- $stdout.puts
35
- $stdout.puts 'Publishes STDIN to the desired stomp destination'
36
- $stdout.puts
37
- $stdout.puts 'Example: ls | catstomp /topic/foo'
38
- $stdout.puts
39
- $stdout.puts 'Defaults:'
40
- $stdout.puts "DESTINATION\t/topic/default"
41
- $stdout.puts "STOMP_HOST\tlocalhost"
42
- $stdout.puts "STOMP_PORT\t61613"
43
- $stdout.puts "STOMP_USER"
44
- $stdout.puts "STOMP_PASSWORD"
45
- $stdout.puts
46
- $stdout.puts 'You can override the stomp host, port, user, or password through environment variables'
47
- exit 0
48
- end
31
+ if ARGV[0] == '-h' || ARGV[0] == '--help'
32
+ $stdout.puts
33
+ $stdout.puts 'Usage: catstomp DESTINATION'
34
+ $stdout.puts
35
+ $stdout.puts 'Publishes STDIN to the desired stomp destination'
36
+ $stdout.puts
37
+ $stdout.puts 'Example: ls | catstomp /topic/foo'
38
+ $stdout.puts
39
+ $stdout.puts 'Defaults:'
40
+ $stdout.puts "DESTINATION\t/topic/default"
41
+ $stdout.puts "STOMP_HOST\tlocalhost"
42
+ $stdout.puts "STOMP_PORT\t61613"
43
+ $stdout.puts "STOMP_USER"
44
+ $stdout.puts "STOMP_PASSWORD"
45
+ $stdout.puts
46
+ $stdout.puts 'You can override the stomp host, port, user, or password through environment variables'
47
+ exit 0
48
+ end
49
49
 
50
- @port = 61613
51
- @host = "localhost"
52
- @user = ENV["STOMP_USER"];
53
- @password = ENV["STOMP_PASSWORD"]
50
+ @port = 61613
51
+ @host = "localhost"
52
+ @user = ENV["STOMP_USER"];
53
+ @password = ENV["STOMP_PASSWORD"]
54
54
 
55
- @host = ENV["STOMP_HOST"] if ENV["STOMP_HOST"] != nil
56
- @port = ENV["STOMP_PORT"] if ENV["STOMP_PORT"] != nil
55
+ @host = ENV["STOMP_HOST"] if ENV["STOMP_HOST"] != nil
56
+ @port = ENV["STOMP_PORT"] if ENV["STOMP_PORT"] != nil
57
57
 
58
- @destination = "/topic/default"
59
- @destination = $*[0] if $*[0] != nil
58
+ @destination = "/topic/default"
59
+ @destination = $*[0] if $*[0] != nil
60
60
 
61
- $stderr.print "Connecting to stomp://#{@host}:#{@port} as #{@user}\n"
62
- @conn = Stomp::Connection.open(@user, @password, @host, @port, true)
63
- $stderr.print "Sending input to #{@destination}\n"
61
+ $stderr.print "Connecting to stomp://#{@host}:#{@port} as #{@user}\n"
62
+ @conn = Stomp::Connection.open(@user, @password, @host, @port, true)
63
+ $stderr.print "Sending input to #{@destination}\n"
64
64
 
65
- @headers = {'persistent'=>'false'}
66
- @headers['reply-to'] = $*[1] if $*[1] != nil
65
+ @headers = {'persistent'=>'false'}
66
+ @headers['reply-to'] = $*[1] if $*[1] != nil
67
67
 
68
- STDIN.each_line { |line|
69
- @conn.publish @destination, line, @headers
70
- }
68
+ STDIN.each_line { |line|
69
+ @conn.publish @destination, line, @headers
70
+ }
71
71
 
72
72
  rescue
73
73
  end
data/bin/stompcat CHANGED
@@ -28,47 +28,47 @@ require 'stomp'
28
28
  #
29
29
  begin
30
30
 
31
- if ARGV[0] == '-h' || ARGV[0] == '--help'
32
- $stdout.puts
33
- $stdout.puts 'Usage: stompcat DESTINATION'
34
- $stdout.puts
35
- $stdout.puts 'Receives data from a stomp destination and outputs it to STDOUT'
36
- $stdout.puts
37
- $stdout.puts 'Example: stompcat /topic/foo'
38
- $stdout.puts
39
- $stdout.puts 'Defaults:'
40
- $stdout.puts "DESTINATION\t/topic/default"
41
- $stdout.puts "STOMP_HOST\tlocalhost"
42
- $stdout.puts "STOMP_PORT\t61613"
43
- $stdout.puts "STOMP_USER\t"
44
- $stdout.puts "STOMP_PASSWORD\t"
45
- $stdout.puts
46
- $stdout.puts 'You can override the host, port, user, or password through environment variables'
47
- exit 0
48
- end
31
+ if ARGV[0] == '-h' || ARGV[0] == '--help'
32
+ $stdout.puts
33
+ $stdout.puts 'Usage: stompcat DESTINATION'
34
+ $stdout.puts
35
+ $stdout.puts 'Receives data from a stomp destination and outputs it to STDOUT'
36
+ $stdout.puts
37
+ $stdout.puts 'Example: stompcat /topic/foo'
38
+ $stdout.puts
39
+ $stdout.puts 'Defaults:'
40
+ $stdout.puts "DESTINATION\t/topic/default"
41
+ $stdout.puts "STOMP_HOST\tlocalhost"
42
+ $stdout.puts "STOMP_PORT\t61613"
43
+ $stdout.puts "STOMP_USER\t"
44
+ $stdout.puts "STOMP_PASSWORD\t"
45
+ $stdout.puts
46
+ $stdout.puts 'You can override the host, port, user, or password through environment variables'
47
+ exit 0
48
+ end
49
49
 
50
- @port = 61613
51
- @host = "localhost"
52
- @user = ENV["STOMP_USER"];
53
- @password = ENV["STOMP_PASSWORD"]
50
+ @port = 61613
51
+ @host = "localhost"
52
+ @user = ENV["STOMP_USER"];
53
+ @password = ENV["STOMP_PASSWORD"]
54
54
 
55
- @host = ENV["STOMP_HOST"] if ENV["STOMP_HOST"] != nil
56
- @port = ENV["STOMP_PORT"] if ENV["STOMP_PORT"] != nil
55
+ @host = ENV["STOMP_HOST"] if ENV["STOMP_HOST"] != nil
56
+ @port = ENV["STOMP_PORT"] if ENV["STOMP_PORT"] != nil
57
57
 
58
- @destination = "/topic/default"
59
- @destination = $*[0] if $*[0] != nil
58
+ @destination = "/topic/default"
59
+ @destination = $*[0] if $*[0] != nil
60
60
 
61
- $stderr.print "Connecting to stomp://#{@host}:#{@port} as #{@user}\n"
62
- @conn = Stomp::Connection.open(@user, @password, @host, @port, true)
63
- $stderr.print "Getting output from #{@destination}\n"
61
+ $stderr.print "Connecting to stomp://#{@host}:#{@port} as #{@user}\n"
62
+ @conn = Stomp::Connection.open(@user, @password, @host, @port, true)
63
+ $stderr.print "Getting output from #{@destination}\n"
64
64
 
65
- @conn.subscribe(@destination, { :ack =>"client" })
66
- while true
67
- @msg = @conn.receive
68
- $stdout.print @msg.body
69
- $stdout.flush
70
- @conn.ack @msg.headers["message-id"]
71
- end
65
+ @conn.subscribe(@destination, { :ack =>"client" })
66
+ while true
67
+ @msg = @conn.receive
68
+ $stdout.print @msg.body
69
+ $stdout.flush
70
+ @conn.ack @msg.headers["message-id"]
71
+ end
72
72
 
73
73
  rescue
74
74
  end
@@ -11,70 +11,79 @@ else
11
11
  require "stomp11_common"
12
12
  end
13
13
  include Stomp11Common
14
+
14
15
  #
15
- # Stomp 1.1 Client Example 1
16
- # ==============================
16
+ # == Stomp 1.1 Client Example 1
17
17
  #
18
18
  # Purpose: to demonstrate a connect and disconnect sequence using Stomp 1.1
19
19
  # with the Stomp#Client interface.
20
20
  #
21
- # Note: Stomp#Client does not provide a positional set of parameters that
22
- # contain a 'connect_headers' parameter. To use the Stomp#Client interface
23
- # you _must_ use a 'hashed' set of parameters.
24
- #
25
- # Create connection headers
26
- # =========================
27
- #
28
- # The two headers used here are _required_ by the specification.
29
- #
30
- client_hdrs = {"accept-version" => "1.1", # Demand a 1.1 connection (use a CSV list if you will consider multiple versions)
21
+ class Client11Example1
22
+ # Initialize.
23
+ def initialize
24
+ end
25
+ # Run example.
26
+ def run
27
+ # Note: Stomp#Client does not provide a positional set of parameters that
28
+ # contain a 'connect_headers' parameter. To use the Stomp#Client interface
29
+ # you _must_ use a 'hashed' set of parameters.
30
+ #
31
+ # Create connection headers
32
+ # =========================
33
+ #
34
+ # The two headers used here are _required_ by the specification.
35
+ #
36
+ client_hdrs = {"accept-version" => "1.1", # Demand a 1.1 connection (use a CSV list if you will consider multiple versions)
31
37
  "host" => virt_host, # The 1.1 vhost (could be different than connection host)
32
38
  } # No heartbeats here: there will be none for this connection
33
- #
34
- # Create the connect hash.
35
- # ========================
36
- #
37
- client_hash = { :hosts => [
38
- {:login => login, :passcode => passcode, :host => host, :port => port},
39
+ #
40
+ # Create the connect hash.
41
+ # ========================
42
+ #
43
+ client_hash = { :hosts => [
44
+ {:login => login, :passcode => passcode, :host => host, :port => port},
39
45
  ],
40
46
  :connect_headers => client_hdrs,
41
47
  }
48
+ #
49
+ # Get a connection
50
+ # ================
51
+ #
52
+ client = Stomp::Client.new(client_hash)
53
+ puts "Client Connect complete"
54
+ #
55
+ # Let's just do some sanity checks, and look around.
56
+ #
57
+ raise "Connection failed!!" unless client.open?
58
+ #
59
+ # Is this really a 1.1 conection? (For clients, 'protocol' is a public method.
60
+ # The value will be '1.0' for those types of connections.)
61
+ #
62
+ raise "Unexpected protocol level" if client.protocol() != Stomp::SPL_11
63
+ #
64
+ # The broker _could_ have returned an ERROR frame (unlikely).
65
+ # For clients, 'connection_frame' is a public method.
66
+ #
67
+ raise "Connect error: #{client.connection_frame().body}" if client.connection_frame().command == Stomp::CMD_ERROR
68
+ #
69
+ # Examine the CONNECT response (the connection_frame()).
70
+ #
71
+ puts "Connected Headers required to be present:"
72
+ puts "Connect version - \t#{client.connection_frame().headers['version']}"
73
+ puts
74
+ puts "Connected Headers that are optional:"
75
+ puts "Connect server - \t\t#{client.connection_frame().headers['server']}"
76
+ puts "Session ID - \t\t\t#{client.connection_frame().headers['session']}"
77
+ puts "Server requested heartbeats - \t#{client.connection_frame().headers['heart-beat']}"
78
+ #
79
+ # Finally close
80
+ # =============
81
+ #
82
+ client.close # Business as usual, just like 1.0
83
+ puts "Client close complete"
84
+ end
85
+ end
42
86
  #
43
- # Get a connection
44
- # ================
45
- #
46
- client = Stomp::Client.new(client_hash)
47
- puts "Client Connect complete"
48
- #
49
- # Let's just do some sanity checks, and look around.
50
- #
51
- raise "Connection failed!!" unless client.open?
52
- #
53
- # Is this really a 1.1 conection? (For clients, 'protocol' is a public method.
54
- # The value will be '1.0' for those types of connections.)
55
- #
56
- raise "Unexpected protocol level" if client.protocol() != Stomp::SPL_11
57
- #
58
- # The broker _could_ have returned an ERROR frame (unlikely).
59
- # For clients, 'connection_frame' is a public method.
60
- #
61
- raise "Connect error: #{client.connection_frame().body}" if client.connection_frame().command == Stomp::CMD_ERROR
62
- #
63
- # Examine the CONNECT response (the connection_frame()).
64
- #
65
- puts "Connected Headers required to be present:"
66
- puts "Connect version - \t#{client.connection_frame().headers['version']}"
67
- puts
68
- puts "Connected Headers that are optional:"
69
- puts "Connect broker - \t\t#{client.connection_frame().headers['broker']}"
70
- puts "Session ID - \t\t\t#{client.connection_frame().headers['session']}"
71
- puts "Server requested heartbeats - \t#{client.connection_frame().headers['heart-beat']}"
72
- #
73
- # Finally close
74
- # =============
75
- #
76
- client.close # Business as usual, just like 1.0
77
- puts "Client close complete"
78
-
79
-
87
+ e = Client11Example1.new
88
+ e.run
80
89
 
@@ -11,49 +11,61 @@ else
11
11
  require "stomp11_common"
12
12
  end
13
13
  include Stomp11Common
14
+
14
15
  #
15
- # Stomp 1.1 Client Putter/Getter Example 1
16
- # ========================================
16
+ # == Stomp 1.1 Client Putter/Getter Example 1
17
17
  #
18
18
  # This is much like sending and receiving with a Stomp::Connection.
19
19
  #
20
- client_hdrs = {"accept-version" => "1.1", # Demand a 1.1 connection (use a CSV list if you will consider multiple versions)
20
+ class Client11PutGet1
21
+ # Initialize.
22
+ def initialize
23
+ end
24
+ # Run example.
25
+ def run
26
+ #
27
+ client_hdrs = {"accept-version" => "1.1", # Demand a 1.1 connection (use a CSV list if you will consider multiple versions)
21
28
  "host" => virt_host, # The 1.1 vhost (could be different than connection host)
22
29
  } # No heartbeats here: there will be none for this connection
23
- #
24
- client_hash = { :hosts => [
25
- {:login => login, :passcode => passcode, :host => host, :port => port},
30
+ #
31
+ client_hash = { :hosts => [
32
+ {:login => login, :passcode => passcode, :host => host, :port => port},
26
33
  ],
27
34
  :connect_headers => client_hdrs,
28
35
  }
36
+ #
37
+ client = Stomp::Client.new(client_hash)
38
+ puts "Client Connect complete"
39
+ #
40
+ raise "Unexpected protocol level" if client.protocol() != Stomp::SPL_11
41
+ #
42
+ qname = "/queue/client.nodea.nodeb.nodec"
43
+ data = "message payload: #{Time.now.to_f}"
44
+ headers = {}
45
+ # Send it
46
+ client.publish qname, data
47
+ puts "Publish complete"
48
+ # Receive
49
+ uuid = client.uuid() # uuid for Stomp::Client is a public method
50
+ message = nil
51
+ # Clients must pass a receive block. This is business as usual, required for 1.0.
52
+ # For 1.1, a unique subscription id is required.
53
+ client.subscribe(qname, {'id' => uuid}) {|m|
54
+ message = m
55
+ }
56
+ sleep 0.1 until message # Wait for completion
57
+ puts "Subscribe and receive complete"
58
+ # Unsubscribe, with the unique id
59
+ client.unsubscribe qname, {'id' => uuid}
60
+ # Sanity checks for this example ....
61
+ raise "Unexpected data" if data != message.body
62
+ raise "Bad subscription header" if uuid != message.headers['subscription']
63
+ #
64
+ client.close # Business as usual, just like 1.0
65
+ puts "Client close complete"
66
+ end
67
+ end
29
68
  #
30
- client = Stomp::Client.new(client_hash)
31
- puts "Client Connect complete"
32
- #
33
- raise "Unexpected protocol level" if client.protocol() != Stomp::SPL_11
34
- #
35
- qname = "/queue/client.nodea.nodeb.nodec"
36
- data = "message payload: #{Time.now.to_f}"
37
- headers = {}
38
- # Send it
39
- client.publish qname, data
40
- # Receive
41
- uuid = client.uuid() # uuid for Stomp::Client is a public method
42
- message = nil
43
- # Clients must pass a receive block. This is business as usual, required for 1.0.
44
- # For 1.1, a unique subscription id is required.
45
- client.subscribe(qname, {'id' => uuid}) {|m|
46
- message = m
47
- }
48
- sleep 0.1 until message # Wait for completion
49
- # Unsubscribe, with the unique id
50
- client.unsubscribe qname, {'id' => uuid}
51
- # Sanity checks for this example ....
52
- raise "Unexpected data" if data != message.body
53
- raise "Bad subscription header" if uuid != message.headers['subscription']
54
- #
55
- client.close # Business as usual, just like 1.0
56
- puts "Client close complete"
57
-
58
-
69
+ e = Client11PutGet1.new
70
+ e.run
59
71
 
@@ -11,13 +11,13 @@ else
11
11
  require "stomp11_common"
12
12
  end
13
13
  include Stomp11Common
14
+
14
15
  #
15
- # Stomp 1.1 Connection Example 1
16
- # ==============================
16
+ # == Stomp 1.1 Connection Example 1
17
17
  #
18
18
  # Purpose: to demonstrate a connect and disconnect sequence using Stomp 1.1.
19
19
  #
20
- # Note: this example assumes that you have at least the 1.2.0 gem release
20
+ # Note: this example assumes that you have at least the 1.2.0 gem release
21
21
  # installed.
22
22
  #
23
23
  # When you:
@@ -48,57 +48,65 @@ include Stomp11Common
48
48
  # * heartbeat request
49
49
  #
50
50
  # Using the stomp gem, you can specify this data in the "connect_headers" Hash
51
- # parameter or a paramaterized connection request. This example uses a
51
+ # parameter or a paramaterized connection request. This example uses a
52
52
  # parameterized request.
53
53
  #
54
- # So .........
55
- #
56
- # Create connection headers
57
- # =========================
58
- #
59
- # The two headers used here are _required_ by the specification.
60
- #
61
- conn_hdrs = {"accept-version" => "1.1", # Demand a 1.1 connection (use a CSV list if you will consider multiple versions)
54
+ class Connection11Example1
55
+ # Initialize
56
+ def initialize
57
+ end
58
+ # Run example
59
+ def run
60
+ #
61
+ # Create connection headers
62
+ # =========================
63
+ #
64
+ # The two headers used here are _required_ by the specification.
65
+ #
66
+ conn_hdrs = {"accept-version" => "1.1", # Demand a 1.1 connection (use a CSV list if you will consider multiple versions)
62
67
  "host" => virt_host, # The 1.1 vhost (could be different than connection host)
63
68
  } # No heartbeats here: there will be none for this connection
69
+ #
70
+ # Get a connection
71
+ # ================
72
+ #
73
+ conn = Stomp::Connection.new(login, passcode, host, port, # Normal connect parms
74
+ false, # Not reliable, the default for a parameter connection
75
+ 5, # Connect redelay, the default
76
+ conn_hdrs) # The 1.1 connection parameters
77
+ puts "Connection connect complete"
78
+ #
79
+ # Let's just do some sanity checks, and look around.
80
+ #
81
+ raise "Connection failed!!" unless conn.open?
82
+ #
83
+ # Is this really a 1.1 conection? ('protocol' is a read only connection
84
+ # instance variable. The value will be '1.0' for those types of connections.)
85
+ #
86
+ raise "Unexpected protocol level" if conn.protocol != Stomp::SPL_11
87
+ #
88
+ # The broker _could_ have returned an ERROR frame (unlikely).
89
+ #
90
+ raise "Connect error: #{conn.connection_frame.body}" if conn.connection_frame.command == Stomp::CMD_ERROR
91
+ #
92
+ # Examine the CONNECT response (the connection_frame).
93
+ #
94
+ puts "Connected Headers required to be present:"
95
+ puts "Connect version - \t#{conn.connection_frame.headers['version']}"
96
+ puts
97
+ puts "Connected Headers that are optional:"
98
+ puts "Connect server - \t\t#{conn.connection_frame.headers['server']}"
99
+ puts "Session ID - \t\t\t#{conn.connection_frame.headers['session']}"
100
+ puts "Server requested heartbeats - \t#{conn.connection_frame.headers['heart-beat']}"
101
+ #
102
+ # Finally disconnect
103
+ # ==================
104
+ #
105
+ conn.disconnect # Business as usual, just like 1.0
106
+ puts "Connection disconnect complete"
107
+ end
108
+ end
64
109
  #
65
- # Get a connection
66
- # ================
67
- #
68
- conn = Stomp::Connection.new(login, passcode, host, port, # Normal connect parms
69
- false, # Not reliable, the default for a parameter connection
70
- 5, # Connect redelay, the default
71
- conn_hdrs) # The 1.1 connection parameters
72
- puts "Connection connect complete"
73
- #
74
- # Let's just do some sanity checks, and look around.
75
- #
76
- raise "Connection failed!!" unless conn.open?
77
- #
78
- # Is this really a 1.1 conection? ('protocol' is a read only connection
79
- # instance variable. The value will be '1.0' for those types of connections.)
80
- #
81
- raise "Unexpected protocol level" if conn.protocol != Stomp::SPL_11
82
- #
83
- # The broker _could_ have returned an ERROR frame (unlikely).
84
- #
85
- raise "Connect error: #{conn.connection_frame.body}" if conn.connection_frame.command == Stomp::CMD_ERROR
86
- #
87
- # Examine the CONNECT response (the connection_frame).
88
- #
89
- puts "Connected Headers required to be present:"
90
- puts "Connect version - \t#{conn.connection_frame.headers['version']}"
91
- puts
92
- puts "Connected Headers that are optional:"
93
- puts "Connect broker - \t\t#{conn.connection_frame.headers['broker']}"
94
- puts "Session ID - \t\t\t#{conn.connection_frame.headers['session']}"
95
- puts "Server requested heartbeats - \t#{conn.connection_frame.headers['heart-beat']}"
96
- #
97
- # Finally disconnect
98
- # ==================
99
- #
100
- conn.disconnect # Business as usual, just like 1.0
101
- puts "Connection disconnect complete"
102
-
103
-
110
+ e = Connection11Example1.new
111
+ e.run
104
112