onstomp 1.0.0 → 1.0.1
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.
- data/.gitignore +4 -0
- data/.yardopts +2 -1
- data/Rakefile +147 -0
- data/extra_doc/API.md +491 -0
- data/extra_doc/API.md.erb +33 -0
- data/extra_doc/DeveloperNarrative.md +123 -0
- data/extra_doc/UserNarrative.md +511 -0
- data/lib/onstomp.rb +5 -5
- data/lib/onstomp/client.rb +6 -1
- data/lib/onstomp/components/frame.rb +6 -6
- data/lib/onstomp/components/frame_headers.rb +18 -18
- data/lib/onstomp/components/scopes/transaction_scope.rb +11 -11
- data/lib/onstomp/components/subscription.rb +2 -2
- data/lib/onstomp/components/threaded_processor.rb +1 -1
- data/lib/onstomp/components/uri.rb +1 -1
- data/lib/onstomp/connections/base.rb +5 -5
- data/lib/onstomp/connections/heartbeating.rb +2 -2
- data/lib/onstomp/connections/serializers/stomp_1.rb +6 -6
- data/lib/onstomp/connections/serializers/stomp_1_1.rb +2 -2
- data/lib/onstomp/connections/stomp_1_0.rb +1 -1
- data/lib/onstomp/connections/stomp_1_1.rb +1 -1
- data/lib/onstomp/failover.rb +4 -0
- data/lib/onstomp/failover/buffers.rb +1 -0
- data/lib/onstomp/failover/buffers/receipts.rb +101 -0
- data/lib/onstomp/failover/buffers/written.rb +2 -2
- data/lib/onstomp/failover/client.rb +15 -12
- data/lib/onstomp/failover/failover_configurable.rb +3 -3
- data/lib/onstomp/failover/pools/base.rb +1 -1
- data/lib/onstomp/failover/uri.rb +41 -16
- data/lib/onstomp/interfaces/client_configurable.rb +1 -1
- data/lib/onstomp/interfaces/client_events.rb +30 -11
- data/lib/onstomp/interfaces/connection_events.rb +5 -1
- data/lib/onstomp/interfaces/event_manager.rb +2 -2
- data/lib/onstomp/interfaces/frame_methods.rb +169 -8
- data/lib/onstomp/interfaces/uri_configurable.rb +3 -3
- data/lib/onstomp/open-uri/client_extensions.rb +4 -4
- data/lib/onstomp/version.rb +2 -2
- data/onstomp.gemspec +0 -1
- data/spec/onstomp/components/threaded_processor_spec.rb +21 -0
- data/spec/onstomp/connections/base_spec.rb +15 -0
- data/spec/onstomp/failover/buffers/receipts_spec.rb +189 -0
- data/spec/onstomp/failover/buffers/written_spec.rb +167 -1
- data/spec/onstomp/failover/client_spec.rb +70 -1
- data/spec/onstomp/failover/failover_events_spec.rb +1 -2
- data/spec/onstomp/failover/uri_spec.rb +37 -4
- data/spec/onstomp/full_stacks/failover_spec.rb +76 -25
- data/spec/onstomp/full_stacks/onstomp_spec.rb +52 -8
- data/spec/onstomp/full_stacks/onstomp_ssh_spec.rb +83 -0
- data/spec/onstomp/full_stacks/test_broker.rb +45 -29
- metadata +11 -15
- data/DeveloperNarrative.md +0 -15
- data/UserNarrative.md +0 -8
data/lib/onstomp.rb
CHANGED
@@ -31,7 +31,7 @@ require 'thread'
|
|
31
31
|
# Monitor support (prevent recursive dead locking)
|
32
32
|
require 'monitor'
|
33
33
|
|
34
|
-
# Primary namespace for the
|
34
|
+
# Primary namespace for the `onstomp` gem
|
35
35
|
module OnStomp
|
36
36
|
# Class to use for creating enumerator objects, which depends upon the
|
37
37
|
# version of Ruby being used.
|
@@ -98,11 +98,11 @@ module OnStomp
|
|
98
98
|
alias :open :connect
|
99
99
|
|
100
100
|
# Duplicates an existing hash while transforming its keys to symbols.
|
101
|
-
# The keys must implement the
|
101
|
+
# The keys must implement the `to_sym` method, otherwise an exception will
|
102
102
|
# be raised. This method is used internally to convert hashes keyed with
|
103
103
|
# Strings.
|
104
104
|
#
|
105
|
-
# @param [{Object => Object}] hsh The hash to convert. It's keys must respond to
|
105
|
+
# @param [{Object => Object}] hsh The hash to convert. It's keys must respond to `to_sym`.
|
106
106
|
# @return [{Symbol => Object}]
|
107
107
|
# @example
|
108
108
|
# hash = { '10' => nil, 'key2' => [3, 5, 8, 13, 21], :other => :value }
|
@@ -126,8 +126,8 @@ module OnStomp
|
|
126
126
|
end
|
127
127
|
end
|
128
128
|
|
129
|
-
# Converts a string to the Ruby constant it names. If the
|
130
|
-
# is a kind of
|
129
|
+
# Converts a string to the Ruby constant it names. If the `klass` parameter
|
130
|
+
# is a kind of `Module`, this method will return `klass` directly.
|
131
131
|
# @param [String,Module] klass
|
132
132
|
# @return [Module]
|
133
133
|
# @example
|
data/lib/onstomp/client.rb
CHANGED
@@ -10,7 +10,7 @@ class OnStomp::Client
|
|
10
10
|
include OnStomp::Interfaces::SubscriptionManager
|
11
11
|
include OnStomp::Components::Scopes
|
12
12
|
|
13
|
-
# The
|
13
|
+
# The `URI` reference to the STOMP broker
|
14
14
|
# @return [String]
|
15
15
|
attr_reader :uri
|
16
16
|
# SSL options for the connection
|
@@ -47,6 +47,7 @@ class OnStomp::Client
|
|
47
47
|
# @return [Class]
|
48
48
|
attr_configurable_processor :processor
|
49
49
|
|
50
|
+
# @api gem:1 STOMP:1.0,1.1
|
50
51
|
# Creates a new client for the specified uri and optional hash of options.
|
51
52
|
# @param [String,URI] uri
|
52
53
|
# @param [{Symbol => Object}] options
|
@@ -61,6 +62,7 @@ class OnStomp::Client
|
|
61
62
|
end
|
62
63
|
end
|
63
64
|
|
65
|
+
# @api gem:1 STOMP:1.0,1.1
|
64
66
|
# Connects to the STOMP broker referenced by {#uri}. Includes optional
|
65
67
|
# headers in the CONNECT frame, if specified.
|
66
68
|
# @param [{#to_sym => #to_s}] headers
|
@@ -75,6 +77,7 @@ class OnStomp::Client
|
|
75
77
|
end
|
76
78
|
alias :open :connect
|
77
79
|
|
80
|
+
# @api gem:1 STOMP:1.0,1.1
|
78
81
|
# Sends a DISCONNECT frame to the broker and blocks until the connection
|
79
82
|
# has been closed. This method ensures that all frames not yet sent to
|
80
83
|
# the broker will get processed barring any IO exceptions.
|
@@ -89,12 +92,14 @@ class OnStomp::Client
|
|
89
92
|
alias :disconnect_without_flush :disconnect
|
90
93
|
alias :disconnect :disconnect_with_flush
|
91
94
|
|
95
|
+
# @api gem:1 STOMP:1.0,1.1
|
92
96
|
# Returns true if a connection to the broker exists and itself is connected.
|
93
97
|
# @return [true,false]
|
94
98
|
def connected?
|
95
99
|
connection && connection.connected?
|
96
100
|
end
|
97
101
|
|
102
|
+
# @api gem:1 STOMP:1.0,1.1
|
98
103
|
# Forces the connection between broker and client closed.
|
99
104
|
# @note Use of this method may result in frames never being sent to the
|
100
105
|
# broker. This method should only be used if {#disconnect} is not an
|
@@ -13,8 +13,8 @@ class OnStomp::Components::Frame
|
|
13
13
|
attr_reader :headers
|
14
14
|
|
15
15
|
# Creates a new frame. The frame will be initialized with the optional
|
16
|
-
#
|
17
|
-
# with the optional
|
16
|
+
# `command` name, a {OnStomp::Components::FrameHeaders headers} collection initialized
|
17
|
+
# with the optional `headers` hash, and an optional body.
|
18
18
|
def initialize(command=nil, headers={}, body=nil)
|
19
19
|
@command = command
|
20
20
|
@headers = OnStomp::Components::FrameHeaders.new(headers)
|
@@ -26,7 +26,7 @@ class OnStomp::Components::Frame
|
|
26
26
|
#
|
27
27
|
# @param [Object] name the header name associated with the desired value
|
28
28
|
# @return [String] the value associated with the requested header name
|
29
|
-
# @see OnStomp::
|
29
|
+
# @see OnStomp::Components::FrameHeaders#[]
|
30
30
|
# @example
|
31
31
|
# frame['content-type'] #=> 'text/plain'
|
32
32
|
def [](name); @headers[name]; end
|
@@ -37,7 +37,7 @@ class OnStomp::Components::Frame
|
|
37
37
|
# @param [Object] name the header name to associate with the supplied value
|
38
38
|
# @param [Object] val the value to associate with the supplied header name
|
39
39
|
# @return [String] the supplied value as a string, or `nil` if `nil` was supplied as the value.
|
40
|
-
# @see OnStomp::
|
40
|
+
# @see OnStomp::Components::FrameHeaders#[]=
|
41
41
|
# @example
|
42
42
|
# frame['content-type'] = 'text/plain' #=> 'text/plain'
|
43
43
|
# frame['other header'] = 42 #=> '42'
|
@@ -52,9 +52,9 @@ class OnStomp::Components::Frame
|
|
52
52
|
|
53
53
|
# If a +content-type+ header is set, splits it into three parts: type,
|
54
54
|
# subtype and charset. If any component of the +content-type+ is missing,
|
55
|
-
# its value will be
|
55
|
+
# its value will be `nil` in the returned triple. If the +content-type+
|
56
56
|
# header is not set or does not match {OnStomp::Components::Frame::CONTENT_TYPE_REG}
|
57
|
-
# all values in the triple will be
|
57
|
+
# all values in the triple will be `nil`.
|
58
58
|
# @return [Array<String,nil>]
|
59
59
|
def content_type
|
60
60
|
@headers[:'content-type'] =~ CONTENT_TYPE_REG ? [$1, $2, $3] : [nil, nil, nil]
|
@@ -1,9 +1,9 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
|
3
3
|
# A specialized container for storing header name / value pairs for a
|
4
|
-
# {OnStomp::Components::Frame frame}. This container behaves much like a
|
4
|
+
# {OnStomp::Components::Frame frame}. This container behaves much like a `Hash`, but
|
5
5
|
# is specialized for the Stomp protocol. Header names are always converted
|
6
|
-
# into
|
6
|
+
# into `String`s through the use of `to_s` and may have more than one value
|
7
7
|
# associated with them.
|
8
8
|
class OnStomp::Components::FrameHeaders
|
9
9
|
include Enumerable
|
@@ -19,7 +19,7 @@ class OnStomp::Components::FrameHeaders
|
|
19
19
|
end
|
20
20
|
|
21
21
|
# Merges a hash into this collection of headers. All of the keys used
|
22
|
-
# in the hash must be convertable to Symbols through
|
22
|
+
# in the hash must be convertable to Symbols through `to_sym`.
|
23
23
|
# @note With Ruby 1.8.7, the order of hash keys may not be preserved
|
24
24
|
# @param [Hash] hash
|
25
25
|
def merge!(hash)
|
@@ -29,7 +29,7 @@ class OnStomp::Components::FrameHeaders
|
|
29
29
|
# Reverse merges a hash into this collection of headers. The hash keys and
|
30
30
|
# values are included only if the headers collection does not already have
|
31
31
|
# a matching key. All of the keys used
|
32
|
-
# in the hash must be convertable to Symbols through
|
32
|
+
# in the hash must be convertable to Symbols through `to_sym`.
|
33
33
|
# @note With Ruby 1.8.7, the order of hash keys may not be preserved
|
34
34
|
# @param [Hash] hash
|
35
35
|
def reverse_merge!(hash)
|
@@ -48,7 +48,7 @@ class OnStomp::Components::FrameHeaders
|
|
48
48
|
end
|
49
49
|
|
50
50
|
# Returns true if a header value has been set for the supplied header, and
|
51
|
-
# the value is neither
|
51
|
+
# the value is neither `nil` nor an empty string.
|
52
52
|
# @param [#to_sym] name the header name to test
|
53
53
|
# @return [Boolean]
|
54
54
|
# @example
|
@@ -68,7 +68,7 @@ class OnStomp::Components::FrameHeaders
|
|
68
68
|
# element of the array will be the principle value of the supplied
|
69
69
|
# header name.
|
70
70
|
#
|
71
|
-
# @param [#to_sym] name the header name associated with the desired values (will be converted using
|
71
|
+
# @param [#to_sym] name the header name associated with the desired values (will be converted using `to_sym`)
|
72
72
|
# @return [Array] the array of values associated with the header name.
|
73
73
|
# @example
|
74
74
|
# headers.all_values('content-type') #=> [ 'text/plain' ]
|
@@ -83,8 +83,8 @@ class OnStomp::Components::FrameHeaders
|
|
83
83
|
# principle value. This method is used internally when constructing
|
84
84
|
# frames sent by the broker to capture repeated header names.
|
85
85
|
#
|
86
|
-
# @param [#to_sym] name the header name to associate with the supplied value (will be converted using
|
87
|
-
# @param [#to_s] val the header value to associate with the supplied name (will be converted using
|
86
|
+
# @param [#to_sym] name the header name to associate with the supplied value (will be converted using `to_s`)
|
87
|
+
# @param [#to_s] val the header value to associate with the supplied name (will be converted using `to_s`)
|
88
88
|
# @return [String] the supplied value as a string.
|
89
89
|
# @example
|
90
90
|
# headers.append(:'new header', 'first value') #=> 'first value'
|
@@ -104,11 +104,11 @@ class OnStomp::Components::FrameHeaders
|
|
104
104
|
end
|
105
105
|
|
106
106
|
# Deletes all of the header values associated with the header name and
|
107
|
-
# removes the header name itself. This is analogous to the
|
107
|
+
# removes the header name itself. This is analogous to the `delete`
|
108
108
|
# method found in Hash objects.
|
109
109
|
#
|
110
|
-
# @param [#to_sym] name the header name to remove from this collection (will be converted using
|
111
|
-
# @return [Array] the array of values associated with the deleted header, or
|
110
|
+
# @param [#to_sym] name the header name to remove from this collection (will be converted using `to_sym`)
|
111
|
+
# @return [Array] the array of values associated with the deleted header, or `nil` if the header name did not exist
|
112
112
|
# @example
|
113
113
|
# headers.delete(:'content-type') #=> [ 'text/html' ]
|
114
114
|
# headers.delete('no such header') #=> nil
|
@@ -121,11 +121,11 @@ class OnStomp::Components::FrameHeaders
|
|
121
121
|
end
|
122
122
|
|
123
123
|
# Gets the principle header value paired with the supplied header name. The name will
|
124
|
-
# be converted to a Symbol, so must respond to the
|
124
|
+
# be converted to a Symbol, so must respond to the `to_sym` method. The
|
125
125
|
# Stomp 1.1 protocol specifies that in the event of a repeated header name,
|
126
126
|
# the first value encountered serves as the principle value.
|
127
127
|
#
|
128
|
-
# @param [#to_sym] name the header name paired with the desired value (will be converted using
|
128
|
+
# @param [#to_sym] name the header name paired with the desired value (will be converted using `to_sym`)
|
129
129
|
# @return [String] the value associated with the requested header name
|
130
130
|
# @return [nil] if no value has been set for the associated header name
|
131
131
|
# @example
|
@@ -136,12 +136,12 @@ class OnStomp::Components::FrameHeaders
|
|
136
136
|
end
|
137
137
|
|
138
138
|
# Sets the header value paired with the supplied header name. The name
|
139
|
-
# will be converted to a Symbol and must respond to
|
140
|
-
# the value will be converted to a String so must respond to
|
139
|
+
# will be converted to a Symbol and must respond to `to_sym`; meanwhile,
|
140
|
+
# the value will be converted to a String so must respond to `to_s`.
|
141
141
|
# Setting a header value in this fashion will overwrite any repeated header values.
|
142
142
|
#
|
143
|
-
# @param [#to_sym] name the header name to associate with the supplied value (will be converted using
|
144
|
-
# @param [#to_s] val the value to pair with the supplied name (will be converted using
|
143
|
+
# @param [#to_sym] name the header name to associate with the supplied value (will be converted using `to_sym`)
|
144
|
+
# @param [#to_s] val the value to pair with the supplied name (will be converted using `to_s`)
|
145
145
|
# @return [String] the supplied value as a string.
|
146
146
|
# @example
|
147
147
|
# headers['content-type'] = 'image/png' #=> 'image/png'
|
@@ -155,7 +155,7 @@ class OnStomp::Components::FrameHeaders
|
|
155
155
|
val
|
156
156
|
end
|
157
157
|
|
158
|
-
# Returns a new
|
158
|
+
# Returns a new `Hash` object associating symbolized header names and their
|
159
159
|
# principle values.
|
160
160
|
# @return [Hash]
|
161
161
|
def to_hash
|
@@ -8,7 +8,7 @@
|
|
8
8
|
class OnStomp::Components::Scopes::TransactionScope
|
9
9
|
include OnStomp::Interfaces::FrameMethods
|
10
10
|
|
11
|
-
# The id of the current transaction. This may be
|
11
|
+
# The id of the current transaction. This may be `nil` if the transaction
|
12
12
|
# has not been started with {#begin} or if the transaction has been completed
|
13
13
|
# by a call to either {#abort} or {#commit}.
|
14
14
|
# @return [String,nil]
|
@@ -18,7 +18,7 @@ class OnStomp::Components::Scopes::TransactionScope
|
|
18
18
|
# @return [OnStomp::Client]
|
19
19
|
attr_reader :client
|
20
20
|
|
21
|
-
# A reference to
|
21
|
+
# A reference to `self` to trick {OnStomp::Interfaces::FrameMethods} into
|
22
22
|
# creating frames on this object instead of the client's actual
|
23
23
|
# {OnStomp::Client#connection connection}.
|
24
24
|
# @return [self]
|
@@ -89,9 +89,9 @@ class OnStomp::Components::Scopes::TransactionScope
|
|
89
89
|
|
90
90
|
# Overrides the {OnStomp::Connections::Stomp_1#send_frame send_frame} method
|
91
91
|
# of the {OnStomp::Client#connection client's connection}, setting a
|
92
|
-
#
|
92
|
+
# `transaction` header to match the current transaction if it has been
|
93
93
|
# started.
|
94
|
-
# @param [arg1, arg2, ...] args arguments to connection's
|
94
|
+
# @param [arg1, arg2, ...] args arguments to connection's `send_frame` method
|
95
95
|
# @return [OnStomp::Components::Frame] SEND frame
|
96
96
|
def send_frame *args, &blk
|
97
97
|
client.connection.send_frame(*args,&blk).tap do |f|
|
@@ -101,9 +101,9 @@ class OnStomp::Components::Scopes::TransactionScope
|
|
101
101
|
|
102
102
|
# Overrides the {OnStomp::Connections::Stomp_1_0#ack_frame ack_frame} method
|
103
103
|
# of the client's {OnStomp::Client#connection connection}, setting a
|
104
|
-
#
|
104
|
+
# `transaction` header to match the current transaction if it has been
|
105
105
|
# started.
|
106
|
-
# @param [arg1, arg2, ...] args arguments to connection's
|
106
|
+
# @param [arg1, arg2, ...] args arguments to connection's `ack_frame` method
|
107
107
|
# @return [OnStomp::Components::Frame] ACK frame
|
108
108
|
def ack_frame *args
|
109
109
|
client.connection.ack_frame(*args).tap do |f|
|
@@ -113,9 +113,9 @@ class OnStomp::Components::Scopes::TransactionScope
|
|
113
113
|
|
114
114
|
# Overrides the {OnStomp::Connections::Stomp_1_1#nack_frame nack_frame} method
|
115
115
|
# of the {OnStomp::Client#connection client's connection}, setting a
|
116
|
-
#
|
116
|
+
# `transaction` header to match the current transaction if it has been
|
117
117
|
# started.
|
118
|
-
# @param [arg1, arg2, ...] args arguments to connection's
|
118
|
+
# @param [arg1, arg2, ...] args arguments to connection's `nack_frame` method
|
119
119
|
# @return [OnStomp::Components::Frame] NACK frame
|
120
120
|
def nack_frame *args
|
121
121
|
client.connection.ack_frame(*args).tap do |f|
|
@@ -123,13 +123,13 @@ class OnStomp::Components::Scopes::TransactionScope
|
|
123
123
|
end
|
124
124
|
end
|
125
125
|
|
126
|
-
# If the name of the missing method ends with
|
126
|
+
# If the name of the missing method ends with `_frame`, the method is passed
|
127
127
|
# along to the client's {OnStomp::Client#connection connection} so that it
|
128
128
|
# might build the appropriate (non-transactional) frame.
|
129
129
|
# @return [OnStomp::Components::Frame]
|
130
130
|
# @raise [OnStomp::UnsupportedCommandError] if the connection does not
|
131
131
|
# support the requested frame command.
|
132
|
-
# @raise [NoMethodError] if the method name does not end in
|
132
|
+
# @raise [NoMethodError] if the method name does not end in `_frame`
|
133
133
|
def method_missing meth, *args, &block
|
134
134
|
if meth.to_s =~ /^(.*)_frame$/
|
135
135
|
client.connection.__send__(meth, *args, &block)
|
@@ -154,7 +154,7 @@ class OnStomp::Components::Scopes::TransactionScope
|
|
154
154
|
# @return [self]
|
155
155
|
# @raise [Exception] if supplied block raises an exception
|
156
156
|
# @yield [t] block of frames to transmit transactionally
|
157
|
-
# @yieldparam [OnStomp::Components::Scopes::TransactionScope] t
|
157
|
+
# @yieldparam [OnStomp::Components::Scopes::TransactionScope] t `self`
|
158
158
|
def perform
|
159
159
|
begin
|
160
160
|
self.begin unless @started
|
@@ -12,10 +12,10 @@ class OnStomp::Components::Subscription
|
|
12
12
|
@frame = fr
|
13
13
|
@callback = cb
|
14
14
|
end
|
15
|
-
# Returns the
|
15
|
+
# Returns the `id` header of the associated SUBSCRIBE frame
|
16
16
|
# @return [String]
|
17
17
|
def id; frame[:id]; end
|
18
|
-
# Returns the
|
18
|
+
# Returns the `destination` header of the associated SUBSCRIBE frame
|
19
19
|
# @return [String]
|
20
20
|
def destination; frame[:destination]; end
|
21
21
|
# Invokes the {#callback}, passing along the supplied MESSAGE frame
|
@@ -47,7 +47,7 @@ class OnStomp::Components::ThreadedProcessor
|
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
-
# Causes the thread this method was invoked in to
|
50
|
+
# Causes the thread this method was invoked in to `pass` until the
|
51
51
|
# processor is no longer {#running? running}.
|
52
52
|
# @return [self]
|
53
53
|
def join
|
@@ -23,7 +23,7 @@ module OnStomp::Components::URI
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
-
# Add the new URI classes to
|
26
|
+
# Add the new URI classes to `URI`'s set of known schemes.
|
27
27
|
module ::URI
|
28
28
|
@@schemes['STOMP'] = OnStomp::Components::URI::STOMP
|
29
29
|
@@schemes['STOMP+SSL'] = OnStomp::Components::URI::STOMP_SSL
|
@@ -13,9 +13,9 @@ class OnStomp::Connections::Base
|
|
13
13
|
MAX_BYTES_PER_READ = 1024 * 4
|
14
14
|
|
15
15
|
# Creates a new connection using the given {#socket} object and
|
16
|
-
# {OnStomp::Client client}. The {#socket} object will generally be a
|
17
|
-
# or an +OpenSSL::SSL::SSLSocket+ and must support the methods
|
18
|
-
#
|
16
|
+
# {OnStomp::Client client}. The {#socket} object will generally be a `TCPSocket`
|
17
|
+
# or an +OpenSSL::SSL::SSLSocket+ and must support the methods `read_nonblock`
|
18
|
+
# `write_nonblock`, and `close`.
|
19
19
|
# @param [TCPSocket,OpenSSL::SSL::SSLSocket] socket
|
20
20
|
# @param [OnStomp::Client] client
|
21
21
|
def initialize socket, client
|
@@ -29,7 +29,7 @@ class OnStomp::Connections::Base
|
|
29
29
|
end
|
30
30
|
|
31
31
|
# Performs any necessary configuration of the connection from the CONNECTED
|
32
|
-
# frame sent by the broker and a
|
32
|
+
# frame sent by the broker and a `Hash` of pending callbacks. This method
|
33
33
|
# is called after the protocol negotiation has taken place between client
|
34
34
|
# and broker, and the connection that receives it will be the connection
|
35
35
|
# used by the client for the duration of the session.
|
@@ -46,7 +46,7 @@ class OnStomp::Connections::Base
|
|
46
46
|
!socket.closed?
|
47
47
|
end
|
48
48
|
|
49
|
-
# Closes the {#socket}. If
|
49
|
+
# Closes the {#socket}. If `blocking` is true, the socket will be closed
|
50
50
|
# immediately, otherwies the socket will remain open until {#io_process_write}
|
51
51
|
# has finished writing all of its buffered data. Once this method has been
|
52
52
|
# invoked, {#write_frame_nonblock} will not enqueue any additional frames
|
@@ -53,14 +53,14 @@ module OnStomp::Connections::Heartbeating
|
|
53
53
|
end
|
54
54
|
|
55
55
|
# Number of milliseconds since data was last transmitted to the broker or
|
56
|
-
#
|
56
|
+
# `nil` if no data has been transmitted when the method is called.
|
57
57
|
# @return [Fixnum, nil]
|
58
58
|
def duration_since_transmitted
|
59
59
|
last_transmitted_at && ((Time.now - last_transmitted_at)*1000).to_i
|
60
60
|
end
|
61
61
|
|
62
62
|
# Number of milliseconds since data was last received from the broker or
|
63
|
-
#
|
63
|
+
# `nil` if no data has been received when the method is called.
|
64
64
|
# @return [Fixnum, nil]
|
65
65
|
def duration_since_received
|
66
66
|
last_received_at && ((Time.now - last_received_at)*1000).to_i
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
|
3
|
-
# Classes that mix this in must define
|
4
|
-
# The method
|
3
|
+
# Classes that mix this in must define `split_header` and `prepare_parsed_frame`
|
4
|
+
# The method `frame_to_string_base` is provided as a factoring out of the
|
5
5
|
# common tasks of serializing a frame for STOMP 1.0 and STOMP 1.1.
|
6
6
|
module OnStomp::Connections::Serializers::Stomp_1
|
7
7
|
# Resets the parser that converts byte strings to {OnStomp::Components::Frame frames}
|
@@ -72,7 +72,7 @@ module OnStomp::Connections::Serializers::Stomp_1
|
|
72
72
|
end
|
73
73
|
|
74
74
|
# Adds the substring +data[0...idx]+ to the parser's accumulator,
|
75
|
-
# unshifts the remaining data back onto the buffer, and calls
|
75
|
+
# unshifts the remaining data back onto the buffer, and calls `meth`
|
76
76
|
# with the parser's accumulated string.
|
77
77
|
# @param [Array<String>] buffer
|
78
78
|
# @param [String] data
|
@@ -117,7 +117,7 @@ module OnStomp::Connections::Serializers::Stomp_1
|
|
117
117
|
|
118
118
|
# Called when a frame's body has been fully read from the buffer. This
|
119
119
|
# method will set the frame's {OnStomp::Components::Frame#body body}
|
120
|
-
# attribute, call
|
120
|
+
# attribute, call `prepare_parsed_frame` with the "current frame",
|
121
121
|
# and tell the parser to move on to the next state.
|
122
122
|
# @param [String] body
|
123
123
|
def finish_body body
|
@@ -150,14 +150,14 @@ module OnStomp::Connections::Serializers::Stomp_1
|
|
150
150
|
end
|
151
151
|
|
152
152
|
if RUBY_VERSION >= "1.9"
|
153
|
-
# Takes the result of
|
153
|
+
# Takes the result of `frame_to_string` and forces it to use a binary
|
154
154
|
# encoding
|
155
155
|
# @return [String] string serialization of frame with 'ASCII-8BIT' encoding
|
156
156
|
def frame_to_bytes frame
|
157
157
|
frame_to_string(frame).tap { |s| s.force_encoding('ASCII-8BIT') }
|
158
158
|
end
|
159
159
|
else
|
160
|
-
# Takes the result of
|
160
|
+
# Takes the result of `frame_to_string` and passes it along. Ruby 1.8.7
|
161
161
|
# treats strings as a collection of bytes, so we don't need to do any
|
162
162
|
# further work.
|
163
163
|
# @return [String]
|
@@ -94,7 +94,7 @@ class OnStomp::Connections::Serializers::Stomp_1_1
|
|
94
94
|
f.body.force_encoding(charset)
|
95
95
|
f
|
96
96
|
end
|
97
|
-
# Set an appropriate +content-type+ header with
|
97
|
+
# Set an appropriate +content-type+ header with `charset` parameter for
|
98
98
|
# frames with a text body
|
99
99
|
# @note No-op for Ruby 1.8.x
|
100
100
|
# @param [OnStomp::Components::Frame] f
|
@@ -124,7 +124,7 @@ class OnStomp::Connections::Serializers::Stomp_1_1
|
|
124
124
|
# @param [OnStomp::Components::Frame] f
|
125
125
|
# @return [OnStomp::Components::Frame]
|
126
126
|
def force_body_encoding(f); f; end
|
127
|
-
# Set an appropriate +content-type+ header with
|
127
|
+
# Set an appropriate +content-type+ header with `charset` parameter for
|
128
128
|
# frames with a text body
|
129
129
|
# @note No-op for Ruby 1.8.x
|
130
130
|
# @param [OnStomp::Components::Frame] f
|