class Qpid::Proton::Handler::IncomingMessageHandler

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

Public Class Methods

new(auto_accept = true, delegate = nil) click to toggle source
# File lib/handler/incoming_message_handler.rb, line 29
def initialize(auto_accept = true, delegate = nil)
  @delegate = delegate
  @auto_accept = auto_accept
end

Public Instance Methods

on_delivery(event) click to toggle source
# File lib/handler/incoming_message_handler.rb, line 34
def on_delivery(event)
  delivery = event.delivery
  return unless delivery.link.receiver?
  if delivery.readable? && !delivery.partial?
    event.message = Qpid::Proton::Util::Engine.receive_message(delivery)
    if event.link.local_closed?
      if @auto_accept
        delivery.update(Qpid::Proton::Disposition::RELEASED)
        delivery.settle
      end
    else
      begin
        self.on_message(event)
        if @auto_accept
          delivery.update(Qpid::Proton::Disposition::ACCEPTED)
          delivery.settle
        end
      rescue Qpid::Proton::Reject
        delivery.update(Qpid::Proton::Disposition::REJECTED)
        delivery.settle
      rescue Qpid::Proton::Release
        delivery.update(Qpid::Proton::Disposition::MODIFIED)
        delivery.settle
      end
    end
  elsif delivery.updated? && delivery.settled?
    self.on_settled(event)
  end
end
on_message(event) click to toggle source
# File lib/handler/incoming_message_handler.rb, line 64
def on_message(event)
  Qpid::Proton::Event.dispatch(@delegate, :on_message, event) if !@delegate.nil?
end
on_settled(event) click to toggle source
# File lib/handler/incoming_message_handler.rb, line 68
def on_settled(event)
  Qpid::Proton::Event.dispatch(@delegate, :on_settled, event) if !@delegate.nil?
end