onstomp 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. data/.gitignore +4 -0
  2. data/.yardopts +2 -1
  3. data/Rakefile +147 -0
  4. data/extra_doc/API.md +491 -0
  5. data/extra_doc/API.md.erb +33 -0
  6. data/extra_doc/DeveloperNarrative.md +123 -0
  7. data/extra_doc/UserNarrative.md +511 -0
  8. data/lib/onstomp.rb +5 -5
  9. data/lib/onstomp/client.rb +6 -1
  10. data/lib/onstomp/components/frame.rb +6 -6
  11. data/lib/onstomp/components/frame_headers.rb +18 -18
  12. data/lib/onstomp/components/scopes/transaction_scope.rb +11 -11
  13. data/lib/onstomp/components/subscription.rb +2 -2
  14. data/lib/onstomp/components/threaded_processor.rb +1 -1
  15. data/lib/onstomp/components/uri.rb +1 -1
  16. data/lib/onstomp/connections/base.rb +5 -5
  17. data/lib/onstomp/connections/heartbeating.rb +2 -2
  18. data/lib/onstomp/connections/serializers/stomp_1.rb +6 -6
  19. data/lib/onstomp/connections/serializers/stomp_1_1.rb +2 -2
  20. data/lib/onstomp/connections/stomp_1_0.rb +1 -1
  21. data/lib/onstomp/connections/stomp_1_1.rb +1 -1
  22. data/lib/onstomp/failover.rb +4 -0
  23. data/lib/onstomp/failover/buffers.rb +1 -0
  24. data/lib/onstomp/failover/buffers/receipts.rb +101 -0
  25. data/lib/onstomp/failover/buffers/written.rb +2 -2
  26. data/lib/onstomp/failover/client.rb +15 -12
  27. data/lib/onstomp/failover/failover_configurable.rb +3 -3
  28. data/lib/onstomp/failover/pools/base.rb +1 -1
  29. data/lib/onstomp/failover/uri.rb +41 -16
  30. data/lib/onstomp/interfaces/client_configurable.rb +1 -1
  31. data/lib/onstomp/interfaces/client_events.rb +30 -11
  32. data/lib/onstomp/interfaces/connection_events.rb +5 -1
  33. data/lib/onstomp/interfaces/event_manager.rb +2 -2
  34. data/lib/onstomp/interfaces/frame_methods.rb +169 -8
  35. data/lib/onstomp/interfaces/uri_configurable.rb +3 -3
  36. data/lib/onstomp/open-uri/client_extensions.rb +4 -4
  37. data/lib/onstomp/version.rb +2 -2
  38. data/onstomp.gemspec +0 -1
  39. data/spec/onstomp/components/threaded_processor_spec.rb +21 -0
  40. data/spec/onstomp/connections/base_spec.rb +15 -0
  41. data/spec/onstomp/failover/buffers/receipts_spec.rb +189 -0
  42. data/spec/onstomp/failover/buffers/written_spec.rb +167 -1
  43. data/spec/onstomp/failover/client_spec.rb +70 -1
  44. data/spec/onstomp/failover/failover_events_spec.rb +1 -2
  45. data/spec/onstomp/failover/uri_spec.rb +37 -4
  46. data/spec/onstomp/full_stacks/failover_spec.rb +76 -25
  47. data/spec/onstomp/full_stacks/onstomp_spec.rb +52 -8
  48. data/spec/onstomp/full_stacks/onstomp_ssh_spec.rb +83 -0
  49. data/spec/onstomp/full_stacks/test_broker.rb +45 -29
  50. metadata +11 -15
  51. data/DeveloperNarrative.md +0 -15
  52. data/UserNarrative.md +0 -8
@@ -15,7 +15,7 @@ class OnStomp::Connections::Stomp_1_0 < OnStomp::Connections::Base
15
15
  @serializer = OnStomp::Connections::Serializers::Stomp_1_0.new
16
16
  end
17
17
 
18
- # Creates a SUBSCRIBE frame. Sets +ack+ header to 'auto' unless it is
18
+ # Creates a SUBSCRIBE frame. Sets `ack` header to 'auto' unless it is
19
19
  # already set to 'client'.
20
20
  # @return [OnStomp::Components::Frame] SUBSCRIBE frame
21
21
  def subscribe_frame d, h
@@ -31,7 +31,7 @@ class OnStomp::Connections::Stomp_1_1 < OnStomp::Connections::Base
31
31
  super && pulse?
32
32
  end
33
33
 
34
- # Creates a SUBSCRIBE frame. Sets +ack+ header to 'auto' unless it is
34
+ # Creates a SUBSCRIBE frame. Sets `ack` header to 'auto' unless it is
35
35
  # already set to 'client' or 'client-individual'.
36
36
  # @return [OnStomp::Components::Frame] SUBSCRIBE frame
37
37
  def subscribe_frame d, h
@@ -5,6 +5,10 @@ module OnStomp::Failover
5
5
  # Raised if the supplied failover: URI is not properly formatted as
6
6
  # +failover:(uri,uri,...)?optionalParams=values+
7
7
  class InvalidFailoverURIError < OnStomp::OnStompError; end
8
+
9
+ # Raised if the maximum number of retries is exceed when calling
10
+ # {OnStomp::Failover::Client#connect}
11
+ class MaximumRetriesExceededError < OnStomp::OnStompError; end
8
12
  end
9
13
 
10
14
  require 'onstomp/failover/uri'
@@ -6,3 +6,4 @@ module OnStomp::Failover::Buffers
6
6
  end
7
7
 
8
8
  require 'onstomp/failover/buffers/written'
9
+ require 'onstomp/failover/buffers/receipts'
@@ -0,0 +1,101 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ # A buffer that ensures frames are RECEIPTed against a
4
+ # {OnStomp::Client client}'s {OnStomp::Connections::Base connection} and
5
+ # replays the ones that were not when the
6
+ # {OnStomp::Failover::Client failover} client reconnects.
7
+ # @todo Quite a lot of this code is shared between Written and Receipts,
8
+ # we'll want to factor the common stuff out.
9
+ class OnStomp::Failover::Buffers::Receipts
10
+ def initialize failover
11
+ @failover = failover
12
+ @buffer_mutex = Mutex.new
13
+ @buffer = []
14
+ @txs = {}
15
+
16
+ failover.before_send &method(:buffer_frame)
17
+ failover.before_commit &method(:buffer_frame)
18
+ failover.before_abort &method(:buffer_frame)
19
+ failover.before_subscribe &method(:buffer_frame)
20
+ failover.before_begin &method(:buffer_transaction)
21
+ # We can scrub the subscription before UNSUBSCRIBE is fully written
22
+ # because if we replay before UNSUBSCRIBE was sent, we still don't
23
+ # want to be subscribed when we reconnect.
24
+ failover.before_unsubscribe &method(:debuffer_subscription)
25
+ failover.on_receipt &method(:debuffer_frame)
26
+
27
+ failover.on_failover_connected &method(:replay)
28
+ end
29
+
30
+ # Adds a frame to a buffer so that it may be replayed if the
31
+ # {OnStomp::Failover::Client failover} client re-connects
32
+ def buffer_frame f, *_
33
+ @buffer_mutex.synchronize do
34
+ # Don't re-buffer frames that are being replayed.
35
+ unless f.header? :'x-onstomp-failover-replay'
36
+ # Create a receipt header, unless the frame already has one.
37
+ f[:receipt] = OnStomp.next_serial unless f.header?(:receipt)
38
+ @buffer << f
39
+ end
40
+ end
41
+ end
42
+
43
+ # Records the start of a transaction so that it may be replayed if the
44
+ # {OnStomp::Failover::Client failover} client re-connects
45
+ def buffer_transaction f, *_
46
+ @txs[f[:transaction]] = true
47
+ buffer_frame f
48
+ end
49
+
50
+ # Removes the recorded transaction from the buffer after it has been
51
+ # written the broker socket so that it will not be replayed when the
52
+ # {OnStomp::Failover::Client failover} client re-connects
53
+ def debuffer_transaction f
54
+ tx = f[:transaction]
55
+ if @txs.delete tx
56
+ @buffer_mutex.synchronize do
57
+ @buffer.reject! { |bf| bf[:transaction] == tx }
58
+ end
59
+ end
60
+ end
61
+
62
+ # Removes the matching SUBSCRIBE frame from the buffer after the
63
+ # UNSUBSCRIBE has been added to the connection's write buffer
64
+ # so that it will not be replayed when the
65
+ # {OnStomp::Failover::Client failover} client re-connects
66
+ def debuffer_subscription f, *_
67
+ @buffer_mutex.synchronize do
68
+ @buffer.reject! { |bf| bf.command == 'SUBSCRIBE' && bf[:id] == f[:id] }
69
+ end
70
+ end
71
+
72
+ # Removes frames that neither transactional nor SUBSCRIBEs from the buffer
73
+ # by looking the buffered frames up by their `receipt` header.
74
+ def debuffer_frame r, *_
75
+ orig = @buffer_mutex.synchronize do
76
+ @buffer.detect { |f| f[:receipt] == r[:'receipt-id'] }
77
+ end
78
+ if orig
79
+ # COMMIT and ABORT debuffer the whole transaction sequence
80
+ if ['COMMIT', 'ABORT'].include? orig.command
81
+ debuffer_transaction orig
82
+ # Otherwise, if this isn't part of a transaction, debuffer the
83
+ # particular frame (if it's not a SUBSCRIBE)
84
+ elsif orig.command != 'SUBSCRIBE' && !orig.header?(:transaction)
85
+ @buffer_mutex.synchronize { @buffer.delete orig }
86
+ end
87
+ end
88
+ end
89
+
90
+ # Called when the {OnStomp::Failover::Client failover} client triggers
91
+ # `on_failover_connected` to start replaying any frames in the buffer.
92
+ def replay fail, client, *_
93
+ replay_frames = @buffer_mutex.synchronize do
94
+ @buffer.select { |f| f[:'x-onstomp-failover-replay'] = '1'; true }
95
+ end
96
+
97
+ replay_frames.each do |f|
98
+ client.transmit f
99
+ end
100
+ end
101
+ end
@@ -10,7 +10,7 @@ class OnStomp::Failover::Buffers::Written
10
10
  @buffer_mutex = Mutex.new
11
11
  @buffer = []
12
12
  @txs = {}
13
-
13
+
14
14
  failover.before_send &method(:buffer_frame)
15
15
  failover.before_commit &method(:buffer_frame)
16
16
  failover.before_abort &method(:buffer_frame)
@@ -78,7 +78,7 @@ class OnStomp::Failover::Buffers::Written
78
78
  end
79
79
 
80
80
  # Called when the {OnStomp::Failover::Client failover} client triggers
81
- # +on_failover_connected+ to start replaying any frames in the buffer.
81
+ # `on_failover_connected` to start replaying any frames in the buffer.
82
82
  def replay fail, client, *_
83
83
  replay_frames = @buffer_mutex.synchronize do
84
84
  @buffer.select { |f| f[:'x-onstomp-failover-replay'] = '1'; true }
@@ -28,25 +28,21 @@ class OnStomp::Failover::Client
28
28
  # @return [Fixnum]
29
29
  attr_configurable_int :retry_attempts, :default => 0
30
30
  # Whether or not to randomize the {#client_pool} before connecting through
31
- # any of its {OnStomp::Client clients}. Defaults to +false+
31
+ # any of its {OnStomp::Client clients}. Defaults to `false`
32
32
  # @return [true,false]
33
33
  attr_configurable_bool :randomize, :default => false
34
34
 
35
35
  attr_reader :uri, :client_pool, :active_client, :frame_buffer, :connection
36
36
 
37
37
  def initialize(uris, options={})
38
- if uris.is_a?(Array)
39
- uris = "failover:(#{uris.map { |u| u.to_s }.join(',')})"
40
- end
38
+ @uri = OnStomp::Failover::URI::FAILOVER.parse uris
41
39
  @client_mutex = Mutex.new
42
- @uri = URI.parse(uris)
43
40
  configure_configurable options
44
41
  create_client_pool
45
42
  @active_client = nil
46
43
  @connection = nil
47
44
  @frame_buffer = buffer.new self
48
45
  @disconnecting = false
49
- @client_ready = false
50
46
  end
51
47
 
52
48
  # Returns true if there is an {#active_client} and it is
@@ -76,22 +72,26 @@ class OnStomp::Failover::Client
76
72
  # {OnStomp::Client#disconnect disconnect} on the {#active_client}
77
73
  def disconnect *args, &block
78
74
  return unless active_client
79
- @disconnecting = true
80
- Thread.pass until @client_ready
81
- active_client.disconnect *args, &block
75
+ # If we're not connected, let `reconnect` handle it.
76
+ #@disconnecting = [args, block]
77
+ #if connected?
78
+ @client_mutex.synchronize do
79
+ @disconnecting = true
80
+ active_client.disconnect *args, &block
81
+ end
82
+ #end
82
83
  end
83
84
 
84
85
  private
85
86
  def reconnect
86
87
  @client_mutex.synchronize do
87
- @client_ready = false
88
88
  attempt = 1
89
89
  until connected? || retry_exceeded?(attempt)
90
90
  sleep_for_retry attempt
91
91
  begin
92
92
  trigger_failover_retry :before, attempt
93
93
  @active_client = client_pool.next_client
94
- # +reconnect+ could be called again within the marked range.
94
+ # `reconnect` could be called again within the marked range.
95
95
  active_client.connect # <--- From here
96
96
  @connection = active_client.connection
97
97
  rescue Exception
@@ -102,7 +102,10 @@ class OnStomp::Failover::Client
102
102
  end
103
103
  connected?.tap do |b|
104
104
  b && trigger_failover_event(:connected, :on, active_client)
105
- @client_ready = b
105
+ #if @disconnecting.is_a?(Array)
106
+ # args, block = @disconnect
107
+ # active_client.disconnect *args, &block
108
+ #end
106
109
  end # <--- Until here
107
110
  end
108
111
  end
@@ -3,7 +3,7 @@
3
3
  # Module for configurable attributes specific to
4
4
  # {OnStomp::Failover::Client failover} clients.
5
5
  module OnStomp::Failover::FailoverConfigurable
6
- # Includes {OnStomp::Interfaces::ClientConfigurable} into +base+ and
6
+ # Includes {OnStomp::Interfaces::ClientConfigurable} into `base` and
7
7
  # extends {OnStomp::Failover::FailoverConfigurable::ClassMethods}
8
8
  # @param [Module] base
9
9
  def self.included(base)
@@ -23,8 +23,8 @@ module OnStomp::Failover::FailoverConfigurable
23
23
 
24
24
  # Creates readable and writeable attributes that are automatically
25
25
  # converted into boolean values. Assigning the attributes any of
26
- # +true+, +'true'+, +'1'+ or +1+ will set the attribute to +true+, all
27
- # other values with be treated as +false+. This method will also alias
26
+ # `true`, +'true'+, +'1'+ or +1+ will set the attribute to `true`, all
27
+ # other values with be treated as `false`. This method will also alias
28
28
  # the reader methods with +attr_name?+
29
29
  def attr_configurable_bool *args, &block
30
30
  trans = attr_configurable_wrap lambda { |v|
@@ -2,7 +2,7 @@
2
2
 
3
3
  # An abstract pool of clients. This class manages the shared behaviors
4
4
  # of client pools, but has no means of picking successive clients.
5
- # Subclasses must define +next_client+ or pool will not function.
5
+ # Subclasses must define `next_client` or pool will not function.
6
6
  class OnStomp::Failover::Pools::Base
7
7
  attr_reader :clients
8
8
 
@@ -3,27 +3,52 @@
3
3
  # Namespace for failover related URI classes.
4
4
  module OnStomp::Failover::URI
5
5
  # A URI class for representing URIs with a 'failover' scheme.
6
+ # We don't need to worry about hooking into Ruby's URI parsing jazz since
7
+ # we have full control over when failover URIs will be created.
6
8
  class FAILOVER < OnStomp::Components::URI::STOMP
7
- # Matches the internal URIs and query contained in
8
- # the +opaque+ part of a failover: URI
9
- FAILOVER_OPAQUE_REG = /^\(([^\)]+)\)(?:\?(.*))?/
9
+ # Matches a failover URI string, grouping the list of real URIs and
10
+ # any query parameters for the failover URI.
11
+ FAILOVER_REG = /^failover:(?:\/\/)?\(?([^\)]+)\)?(?:\?(.*))?/
10
12
 
11
13
  attr_reader :failover_uris
12
- def initialize(*args)
13
- super
14
- _split_opaque_
14
+ def initialize uris, query
15
+ @failover_uris = uris.map do |u|
16
+ u.is_a?(::URI) ? u : ::URI.parse(u.strip)
17
+ end
18
+ super 'failover', nil, nil, nil, nil, '', "(#{uris.join(',')})", query, nil
19
+ end
20
+
21
+ # Converts a failover URI into a string. Ruby's Generic URIs don't seem
22
+ # to allow mixing opaques and queries.
23
+ # @return [String]
24
+ def to_s
25
+ base = "#{scheme}:#{opaque}"
26
+ query.nil? || query.empty? ? base : "#{base}?#{query}"
15
27
  end
16
28
 
17
- private
18
- def _split_opaque_
19
- if opaque =~ FAILOVER_OPAQUE_REG
20
- furis, fquery = $1, $2
21
- @failover_uris = furis.split(',').map { |u| ::URI.parse(u.strip) }
22
- self.set_opaque nil
23
- self.set_path ''
24
- self.set_query fquery
25
- else
26
- raise OnStomp::Failover::InvalidFailoverURIError, self.to_s
29
+ class << self
30
+ # Parses a failover URI string or an array of URIs into a
31
+ # {OnStomp::Failover::URI::FAILOVER} object. Ruby's URI parser works
32
+ # fine with +failover:(uri1,uri2,..)?params=..+ style URIs, but chokes
33
+ # on +failover://uri1,uri2,..+ forms. This method gives us a bit more
34
+ # flexibility.
35
+ # @note If you are using the +open-uri+ extension with `failover`, you
36
+ # MUST use the +failover:(uri1,uri2,..)+ form because +open-uri+
37
+ # relies on +URI.parse+ to convert strings into `URI` objects.
38
+ # @overload parse(str)
39
+ # @param [String] str
40
+ # @return [FAILOVER]
41
+ # @overload parse(uri_arr)
42
+ # @param [Array<String or URI>] uri_arr
43
+ # @return [FAILOVER]
44
+ def parse uri_str
45
+ if uri_str.is_a? Array
46
+ self.new uri_str, nil
47
+ elsif uri_str =~ FAILOVER_REG
48
+ self.new $1.split(','), $2
49
+ else
50
+ raise OnStomp::Failover::InvalidFailoverURIError, uri_str
51
+ end
27
52
  end
28
53
  end
29
54
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Module for configurable attributes specific to {OnStomp::Client client} objects.
4
4
  module OnStomp::Interfaces::ClientConfigurable
5
- # Includes {OnStomp::Interfaces::UriConfigurable} into +base+ and
5
+ # Includes {OnStomp::Interfaces::UriConfigurable} into `base` and
6
6
  # extends {OnStomp::Interfaces::ClientConfigurable::ClassMethods}
7
7
  # @param [Module] base
8
8
  def self.included(base)
@@ -3,64 +3,77 @@
3
3
  # Mixin for {OnStomp::Client client} events
4
4
  # There are a few special event methods that will be passed on
5
5
  # to the client's connection, they are:
6
- # * +on_connection_established+ => {OnStomp::Interfaces::ConnectionEvents#on_established}
7
- # * +on_connection_died+ => {OnStomp::Interfaces::ConnectionEvents#on_died}
8
- # * +on_connection_terminated+ => {OnStomp::Interfaces::ConnectionEvents#on_terminated}
9
- # * +on_connection_closed+ => {OnStomp::Interfaces::ConnectionEvents#on_closed}
6
+ # * `on_connection_established` => {OnStomp::Interfaces::ConnectionEvents#on_established}
7
+ # * `on_connection_died` => {OnStomp::Interfaces::ConnectionEvents#on_died}
8
+ # * `on_connection_terminated` => {OnStomp::Interfaces::ConnectionEvents#on_terminated}
9
+ # * `on_connection_closed` => {OnStomp::Interfaces::ConnectionEvents#on_closed}
10
10
  module OnStomp::Interfaces::ClientEvents
11
11
  include OnStomp::Interfaces::EventManager
12
12
 
13
13
  # @group Client Frame Event Bindings
14
14
 
15
- # Can't get +before+ because the CONNECT frame isn't transmitted by
15
+ # @api gem:1 STOMP:1.0,1.1
16
+ # Can't get `before` because the CONNECT frame isn't transmitted by
16
17
  # the client.
18
+ # @yield [frame, client] callback invoked when event is triggered
19
+ # @yieldparam [OnStomp::Components::Frame] frame
20
+ # @yieldparam [OnStomp::Client] client
17
21
  create_event_methods :connect, :on
18
-
22
+ # @api gem:1 STOMP:1.0,1.1
19
23
  # Binds a callback to be invoked when an ACK frame is transmitted
20
24
  # @yield [frame, client] callback invoked when event is triggered
21
25
  # @yieldparam [OnStomp::Components::Frame] frame
22
26
  # @yieldparam [OnStomp::Client] client
23
27
  create_event_methods :ack, :before, :on
28
+ # @api gem:1 STOMP:1.1
24
29
  # Binds a callback to be invoked when a NACK frame is transmitted
25
30
  # @yield [frame, client] callback invoked when event is triggered
26
31
  # @yieldparam [OnStomp::Components::Frame] frame
27
32
  # @yieldparam [OnStomp::Client] client
28
33
  create_event_methods :nack, :before, :on
34
+ # @api gem:1 STOMP:1.0,1.1
29
35
  # Binds a callback to be invoked when a BEGIN frame is transmitted
30
36
  # @yield [frame, client] callback invoked when event is triggered
31
37
  # @yieldparam [OnStomp::Components::Frame] frame
32
38
  # @yieldparam [OnStomp::Client] client
33
39
  create_event_methods :begin, :before, :on
40
+ # @api gem:1 STOMP:1.0,1.1
34
41
  # Binds a callback to be invoked when an ABORT frame is transmitted
35
42
  # @yield [frame, client] callback invoked when event is triggered
36
43
  # @yieldparam [OnStomp::Components::Frame] frame
37
44
  # @yieldparam [OnStomp::Client] client
38
45
  create_event_methods :abort, :before, :on
46
+ # @api gem:1 STOMP:1.0,1.1
39
47
  # Binds a callback to be invoked when a COMMIT frame is transmitted
40
48
  # @yield [frame, client] callback invoked when event is triggered
41
49
  # @yieldparam [OnStomp::Components::Frame] frame
42
50
  # @yieldparam [OnStomp::Client] client
43
51
  create_event_methods :commit, :before, :on
52
+ # @api gem:1 STOMP:1.0,1.1
44
53
  # Binds a callback to be invoked when a SEND frame is transmitted
45
54
  # @yield [frame, client] callback invoked when event is triggered
46
55
  # @yieldparam [OnStomp::Components::Frame] frame
47
56
  # @yieldparam [OnStomp::Client] client
48
57
  create_event_methods :send, :before, :on
58
+ # @api gem:1 STOMP:1.0,1.1
49
59
  # Binds a callback to be invoked when a SUBSCRIBE frame is transmitted
50
60
  # @yield [frame, client] callback invoked when event is triggered
51
61
  # @yieldparam [OnStomp::Components::Frame] frame
52
62
  # @yieldparam [OnStomp::Client] client
53
63
  create_event_methods :subscribe, :before, :on
64
+ # @api gem:1 STOMP:1.0,1.1
54
65
  # Binds a callback to be invoked when an UNSUBSCRIBE frame is transmitted
55
66
  # @yield [frame, client] callback invoked when event is triggered
56
67
  # @yieldparam [OnStomp::Components::Frame] frame
57
68
  # @yieldparam [OnStomp::Client] client
58
69
  create_event_methods :unsubscribe, :before, :on
70
+ # @api gem:1 STOMP:1.0,1.1
59
71
  # Binds a callback to be invoked when a DISCONNECT frame is transmitted
60
72
  # @yield [frame, client] callback invoked when event is triggered
61
73
  # @yieldparam [OnStomp::Components::Frame] frame
62
74
  # @yieldparam [OnStomp::Client] client
63
75
  create_event_methods :disconnect, :before, :on
76
+ # @api gem:1 STOMP:1.1
64
77
  # Binds a callback to be invoked when a client heartbeat is transmitted
65
78
  # @yield [frame, client] callback invoked when event is triggered
66
79
  # @yieldparam [OnStomp::Components::Frame] frame
@@ -68,22 +81,26 @@ module OnStomp::Interfaces::ClientEvents
68
81
  create_event_methods :client_beat, :before, :on
69
82
 
70
83
  # @group Broker Frame Event Bindings
71
-
84
+
85
+ # @api gem:1 STOMP:1.0,1.1
72
86
  # Binds a callback to be invoked when an ERROR frame is received
73
87
  # @yield [frame, client] callback invoked when event is triggered
74
88
  # @yieldparam [OnStomp::Components::Frame] frame
75
89
  # @yieldparam [OnStomp::Client] client
76
90
  create_event_methods :error, :before, :on
91
+ # @api gem:1 STOMP:1.0,1.1
77
92
  # Binds a callback to be invoked when a MESSAGE frame is received
78
93
  # @yield [frame, client] callback invoked when event is triggered
79
94
  # @yieldparam [OnStomp::Components::Frame] frame
80
95
  # @yieldparam [OnStomp::Client] client
81
96
  create_event_methods :message, :before, :on
97
+ # @api gem:1 STOMP:1.0,1.1
82
98
  # Binds a callback to be invoked when a RECEIPT frame is received
83
99
  # @yield [frame, client] callback invoked when event is triggered
84
100
  # @yieldparam [OnStomp::Components::Frame] frame
85
101
  # @yieldparam [OnStomp::Client] client
86
102
  create_event_methods :receipt, :before, :on
103
+ # @api gem:1 STOMP:1.1
87
104
  # Binds a callback to be invoked when a broker heartbeat is received
88
105
  # @yield [frame, client] callback invoked when event is triggered
89
106
  # @yieldparam [OnStomp::Components::Frame] frame
@@ -92,11 +109,13 @@ module OnStomp::Interfaces::ClientEvents
92
109
 
93
110
  # @group Frame Exchange Event Bindings
94
111
 
112
+ # @api gem:1 STOMP:1.0,1.1
95
113
  # Binds a callback to be invoked when any frame is transmitted
96
114
  # @yield [frame, client] callback invoked when event is triggered
97
115
  # @yieldparam [OnStomp::Components::Frame] frame
98
116
  # @yieldparam [OnStomp::Client] client
99
117
  create_event_methods :transmitting, :before, :after
118
+ # @api gem:1 STOMP:1.0,1.1
100
119
  # Binds a callback to be invoked when any frame is received
101
120
  # @yield [frame, client] callback invoked when event is triggered
102
121
  # @yieldparam [OnStomp::Components::Frame] frame
@@ -139,7 +158,7 @@ module OnStomp::Interfaces::ClientEvents
139
158
  end
140
159
 
141
160
  # Triggers the :before_receiving event and the
142
- # +before+ prefixed frame specific event (eg: +:before_error+).
161
+ # `before` prefixed frame specific event (eg: +:before_error+).
143
162
  # @param [OnStomp::Components::Frame] f
144
163
  def trigger_before_receiving f
145
164
  trigger_event :before_receiving, f, self
@@ -147,7 +166,7 @@ module OnStomp::Interfaces::ClientEvents
147
166
  end
148
167
 
149
168
  # Triggers the :after_receiving event and the
150
- # +on+ prefixed frame specific event (eg: +:on_message+)
169
+ # `on` prefixed frame specific event (eg: +:on_message+)
151
170
  # @param [OnStomp::Components::Frame] f
152
171
  def trigger_after_receiving f
153
172
  trigger_event :after_receiving, f, self
@@ -155,7 +174,7 @@ module OnStomp::Interfaces::ClientEvents
155
174
  end
156
175
 
157
176
  # Triggers the :before_transmitting event and the
158
- # +before+ prefixed frame specific event (eg: +:before_disconnect+).
177
+ # `before` prefixed frame specific event (eg: +:before_disconnect+).
159
178
  # @param [OnStomp::Components::Frame] f
160
179
  def trigger_before_transmitting f
161
180
  trigger_event :before_transmitting, f, self
@@ -163,7 +182,7 @@ module OnStomp::Interfaces::ClientEvents
163
182
  end
164
183
 
165
184
  # Triggers the :after_transmitting event and the
166
- # +on+ prefixed frame specific event (eg: +:on_send+).
185
+ # `on` prefixed frame specific event (eg: +:on_send+).
167
186
  # @param [OnStomp::Components::Frame] f
168
187
  def trigger_after_transmitting f
169
188
  trigger_event :after_transmitting, f, self