Class: Stomper::Scopes::ReceiptScope
- Inherits:
-
HeaderScope
- Object
- HeaderScope
- Stomper::Scopes::ReceiptScope
- Defined in:
- lib/stomper/scopes/receipt_scope.rb
Overview
Automatically generates “receipt” headers, if none are present and applies a supplied callback to every receipt received for frames generated through it. As instances of this class rely on event callbacks attached to the underlying connection, it is entirely possible for those events to be triggered on Thread
other than main. It is for this reason that synchronization is used to ensure the integrity of the internal list of receipt IDs that have not yet been processed through the callback.
Constant Summary collapse
- FRAME_COMMANDS =
A list of frames that support being receipted.
%w(SEND SUBSCRIBE UNSUBSCRIBE BEGIN COMMIT ABORT ACK NACK DISCONNECT)
Constants included from Extensions::Common
Extensions::Common::EXTEND_BY_VERSION
Instance Attribute Summary
Attributes inherited from HeaderScope
Instance Method Summary collapse
-
#apply_to(callback) ⇒ Object
Takes a block as a callback to invoke when a receipt is received.
-
#initialize(connection, headers) ⇒ ReceiptScope
constructor
Create a new receipt scope.
-
#transmit(frame) ⇒ Object
Transmits a frame.
Methods inherited from HeaderScope
#receipt_manager, #subscription_manager
Methods included from Extensions::Common
#abort, #ack, #begin, #commit, #disconnect, extend_by_protocol_version, #nack, #send, #subscribe, #unsubscribe
Constructor Details
#initialize(connection, headers) ⇒ ReceiptScope
Create a new receipt scope. All receiptable frames transmitted through this instance will use the same callback for handling the RECEIPT frame sent by the broker.
20 21 22 23 |
# File 'lib/stomper/scopes/receipt_scope.rb', line 20 def initialize(connection, headers) super @receipt_handler = nil end |
Instance Method Details
#apply_to(callback) ⇒ Object
Takes a block as a callback to invoke when a receipt is received.
26 27 28 |
# File 'lib/stomper/scopes/receipt_scope.rb', line 26 def apply_to(callback) @receipt_handler = callback end |
#transmit(frame) ⇒ Object
Transmits a frame. This method will add an auto-generated receipt
header to the frame if one has not been set, and then set up a handler for the receipt
value, invoking the callback set through #apply_to when the corresponding RECEIPT frame is received from the broker.
35 36 37 38 39 40 41 42 43 |
# File 'lib/stomper/scopes/receipt_scope.rb', line 35 def transmit(frame) if @receipt_handler && FRAME_COMMANDS.include?(frame.command) r_id = frame[:receipt] r_id = ::Stomper::Support.next_serial if r_id.nil? || r_id.empty? receipt_manager.add(r_id, @receipt_handler) frame[:receipt] = r_id end super(frame) end |