123456789_123456789_123456789_123456789_123456789_

Class: Concurrent::Actor::Root

Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
Instance Chain:
Inherits: Concurrent::Actor::AbstractContext
Defined in: lib/concurrent-ruby-edge/concurrent/actor/root.rb

Overview

implements the root actor

Constant Summary

Concern::Logging - Included

SEV_LABEL

Class Method Summary

AbstractContext - Inherited

.spawn

Behaves as spawn but :class is auto-inserted based on receiver so it can be omitted.

.spawn!

behaves as spawn! but :class is auto-inserted based on receiver so it can be omitted.

.to_spawn_options

Instance Attribute Summary

Instance Method Summary

AbstractContext - Inherited

#<<
#ask,
#ask!
#behaviour_definition,
#dead_letter_routing

Defines an actor responsible for dead letters.

#default_executor

override to se different default executor, e.g.

#default_reference_class

override if different class for reference is needed.

#envelope,
#on_event

override to add custom code invocation on internal events like :terminated, :resumed, anError.

#on_message,
#pass

if you want to pass the message to next behaviour, usually Behaviour::ErrorsOnUnknownMessage

#tell

tell self a message.

#initialize_core, #on_envelope

InternalDelegations - Included

Concern::Logging - Included

#log

Logs through Concurrent.global_logger, it can be overridden by setting @logger.

PublicDelegations - Included

TypeCheck - Included

Constructor Details

.newRoot

[ GitHub ]

  
# File 'lib/concurrent-ruby-edge/concurrent/actor/root.rb', line 9

def initialize
  # noinspection RubyArgCount
  @dead_letter_router = Core.new(parent:    reference,
                                 class:     DefaultDeadLetterHandler,
                                 supervise: true,
                                 name:      :default_dead_letter_handler).reference
end

Instance Method Details

#behaviour_definition

[ GitHub ]

  
# File 'lib/concurrent-ruby-edge/concurrent/actor/root.rb', line 33

def behaviour_definition
  [*Behaviour.base(:just_log),
   *Behaviour.supervising,
   *Behaviour.user_messages]
end

#dead_letter_routing

[ GitHub ]

  
# File 'lib/concurrent-ruby-edge/concurrent/actor/root.rb', line 29

def dead_letter_routing
  @dead_letter_router
end

#on_message(message)

to allow spawning of new actors, spawn needs to be called inside the parent Actor

[ GitHub ]

  
# File 'lib/concurrent-ruby-edge/concurrent/actor/root.rb', line 18

def on_message(message)
  case
  when message.is_a?(::Array) && message.first == :spawn
    Actor.spawn message[1], &message[2]
  when message == :dead_letter_routing
    @dead_letter_router
  else
    # ignore
  end
end