Class: Qpid::Proton::Handler::OutgoingMessageHandler

Inherits:
BaseHandler
  • Object
show all
Defined in:
lib/handler/outgoing_message_handler.rb

Overview

A utility for simpler and more intuitive handling of delivery events related to outgoing messages.

Direct Known Subclasses

Reactor::InternalTransactionHandler

Instance Method Summary collapse

Methods inherited from BaseHandler

#on_unhandled

Constructor Details

#initialize(auto_settle = true, delegate = nil) ⇒ OutgoingMessageHandler

Returns a new instance of OutgoingMessageHandler.



27
28
29
30
# File 'lib/handler/outgoing_message_handler.rb', line 27

def initialize(auto_settle = true, delegate = nil)
  @auto_settle = auto_settle
  @delegate = delegate
end

Instance Method Details

#on_accepted(event) ⇒ Object

Called when the remote peer accepts a sent message.

Parameters:



65
66
67
# File 'lib/handler/outgoing_message_handler.rb', line 65

def on_accepted(event)
  Qpid::Proton::Event.dispatch(@delegate, :on_accepted, event) if !@delegate.nil?
end

#on_delivery(event) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/handler/outgoing_message_handler.rb', line 38

def on_delivery(event)
  delivery = event.delivery
  if delivery.link.sender? && delivery.updated?
    if delivery.remote_accepted?
      self.on_accepted(event)
    elsif delivery.remote_rejected?
      self.on_rejected(event)
    elsif delivery.remote_released? || delivery.remote_modified?
      self.on_released(event)
    end
    self.on_settled(event) if delivery.settled?
    delivery.settle if @auto_settle
  end
end


32
33
34
35
36
# File 'lib/handler/outgoing_message_handler.rb', line 32

def on_link_flow(event)
  self.on_sendable(event) if event.link.sender? && event.link.credit > 0 &&
                             (event.link.state & Qpid::Proton::Endpoint::LOCAL_ACTIVE) &&
                             (event.link.state & Qpid::Proton::Endpoint::REMOTE_ACTIVE)
end

#on_rejected(event) ⇒ Object

Called when the remote peer rejects a sent message.

Parameters:



73
74
75
# File 'lib/handler/outgoing_message_handler.rb', line 73

def on_rejected(event)
  Qpid::Proton::Event.dispatch(@delegate, :on_rejected, event) if !@delegate.nil?
end

#on_released(event) ⇒ Object

Called when the remote peer releases an outgoing message.

Note that this may be in resposnse to either the REELAASE or MODIFIED state as defined by the AMQP specification.

Parameters:



84
85
86
# File 'lib/handler/outgoing_message_handler.rb', line 84

def on_released(event)
  Qpid::Proton::Event.dispatch(@delegate, :on_released, event) if !@delegate.nil?
end

#on_sendable(event) ⇒ Object

Called when the sender link has credit and messages and be transferred.

Parameters:



57
58
59
# File 'lib/handler/outgoing_message_handler.rb', line 57

def on_sendable(event)
  Qpid::Proton::Event.dispatch(@delegate, :on_sendable, event) if !@delegate.nil?
end

#on_settled(event) ⇒ Object

Called when the remote peer has settled the outgoing message.

This is the point at which it should never be retransmitted.

Parameters:



94
95
96
# File 'lib/handler/outgoing_message_handler.rb', line 94

def on_settled(event)
  Qpid::Proton::Event.dispatch(@delegate, :on_settled, event) if !@delegate.nil?
end