Class: Qpid::Proton::Handler::IncomingMessageHandler

Inherits:
BaseHandler
  • Object
show all
Includes:
Acking
Defined in:
lib/handler/incoming_message_handler.rb

Overview

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

Instance Method Summary collapse

Methods included from Acking

#accept, #reject, #release, #settle

Methods inherited from BaseHandler

#on_unhandled

Constructor Details

#initialize(auto_accept = true, delegate = nil) ⇒ IncomingMessageHandler

Returns a new instance of IncomingMessageHandler.



29
30
31
32
# File 'lib/handler/incoming_message_handler.rb', line 29

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

Instance Method Details

#on_delivery(event) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# 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) ⇒ Object



64
65
66
# 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) ⇒ Object



68
69
70
# 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