onstomp 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|