class Actor::Supervisor

Constants

NoActorsStarted

Attributes

actor_count[RW]
assembly_block[W]
error[RW]
thread_group[W]

Public Class Methods

build(&assembly_block) click to toggle source
# File lib/actor/supervisor.rb, line 20
def self.build &assembly_block
  instance = new
  instance.assembly_block = assembly_block
  instance
end
new() click to toggle source
# File lib/actor/supervisor.rb, line 16
def initialize
  @actor_count = 0
end
start(&assembly_block) click to toggle source
# File lib/actor/supervisor.rb, line 26
def self.start &assembly_block
  Thread.report_on_exception = false

  thread = Thread.new do
    instance = Build.(self, &assembly_block)
    instance.run_loop
  end

  loop do
    ten_seconds = 10

    result = thread.join ten_seconds

    break unless result.nil?
  end
end

Public Instance Methods

assembly_block() click to toggle source
# File lib/actor/supervisor.rb, line 116
def assembly_block
  @assembly_block ||= proc { }
end
configure() click to toggle source
# File lib/actor/supervisor.rb, line 43
def configure
  self.thread_group = Thread.current.group

  Address::Put.(address)

  assembly_block.(self)

  self.publish = Messaging::Publish.build
end
handle(message) click to toggle source
Calls superclass method Actor::Module::Handler#handle
# File lib/actor/supervisor.rb, line 53
def handle message
  result = super

  changed
  notify_observers message

  result
end
registered_actor?(actor) click to toggle source
# File lib/actor/supervisor.rb, line 108
def registered_actor? actor
  publish.registered? actor.address
end
thread_group() click to toggle source
# File lib/actor/supervisor.rb, line 120
def thread_group
  @thread_group ||= ThreadGroup::Default
end
unregistered_actor?(actor) click to toggle source
# File lib/actor/supervisor.rb, line 112
def unregistered_actor? actor
  publish.unregistered? actor.address
end