Class/Module Index [+]

Quicksearch

Celluloid::EventedMailbox

An alternative implementation of Celluloid::Mailbox using Reactor

Attributes

reactor[R]

Public Class Methods

new(reactor_class) click to toggle source
# File lib/celluloid/evented_mailbox.rb, line 6
def initialize(reactor_class)
  super()
  # @condition won't be used in the class.
  @reactor = reactor_class.new
end

Public Instance Methods

<<(message) click to toggle source

Add a message to the Mailbox

# File lib/celluloid/evented_mailbox.rb, line 13
def <<(message)
  @mutex.lock
  begin
    if mailbox_full || @dead
      dead_letter(message)
      return
    end
    if message.is_a?(SystemEvent)
      # SystemEvents are high priority messages so they get added to the
      # head of our message queue instead of the end
      @messages.unshift message
    else
      @messages << message
    end

    current_actor = Thread.current[:celluloid_actor]
    @reactor.wakeup unless current_actor && current_actor.mailbox == self
  rescue IOError
    Logger.crash "reactor crashed", $!
    dead_letter(message)
  ensure
    @mutex.unlock rescue nil
  end
  nil
end
check(timeout = nil, &block) click to toggle source

Receive a message from the Mailbox

# File lib/celluloid/evented_mailbox.rb, line 40
def check(timeout = nil, &block)
  # Get a message if it is available and process it immediately if possible:
  if message = next_message(block)
    return message
  end

  # ... otherwise, run the reactor once, either blocking or will return
  # after the given timeout:
  @reactor.run_once(timeout)

  # No message was received:
  return nil
rescue IOError
  raise MailboxShutdown, "mailbox shutdown called during receive"
end
next_message(block) click to toggle source

Obtain the next message from the mailbox that matches the given block

# File lib/celluloid/evented_mailbox.rb, line 57
def next_message(block)
  @mutex.lock
  begin
    super(&block)
  ensure
    @mutex.unlock rescue nil
  end
end
shutdown() click to toggle source

Cleanup any IO objects this Mailbox may be using

# File lib/celluloid/evented_mailbox.rb, line 67
def shutdown
  super do
    @reactor.shutdown
  end
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.