New actor is defined by subclassing RestartingContext, Context and defining its abstract methods. AbstractContext can be subclassed directly to implement more specific behaviour see Root implementation.
Basic Context of an Actor. It supports only linking and it simply terminates on error. Uses Behaviour.basic_behaviour_definition:
Context of an Actor for robust systems. It supports supervision, linking, pauses on error. Uses Behaviour.restarting_behaviour_definition
Example of ac actor definition:
Message = Struct.new :action, :value
class AnActor < Concurrent::Actor::RestartingContext
def initialize(init)
@counter = init
end
def on_message(message)
case message.action
when :add
@counter = @counter + message.value
when :subtract
@counter = @counter - message.value
when :value
@counter
else
pass
end
end
def on_event(event)
if event == :reset
@counter = 0 end
end
end
an_actor = AnActor.spawn name: 'an_actor', args: 10
an_actor << Message.new(:add, 1) << Message.new(:subtract, 2)
an_actor.ask!(Message.new(:value, nil)) an_actor << :boo << Message.new(:add, 1)
an_actor.ask!(Message.new(:value, nil)) an_actor << :terminate!
See methods of AbstractContext what else can be tweaked, e.g #default_reference_class
Instance Attribute Summary collapseBehaves as spawn but :class is auto-inserted based on receiver so it can be omitted.
behaves as spawn! but :class is auto-inserted based on receiver so it can be omitted.
Defines an actor responsible for dead letters.
override to se different default executor, e.g.
override if different class for reference is needed.
Current envelope, accessible inside #on_message processing.
override to add custom code invocation on internal events like :terminated
, :resumed
, anError
.
A result which will be used to set the Future supplied to Reference#ask.
if you want to pass the message to next behaviour, usually Behaviour::ErrorsOnUnknownMessage.
tell self a message.
see Core#behaviour.
see Core#behaviour!.
delegates to core.log.
30 31 32
# File 'lib/concurrent-ruby-edge/concurrent/actor/context.rb', line 30 def core @core endClass Method Details .spawn(name_or_opts, *args, &block) ⇒ undocumented
117 118 119
# File 'lib/concurrent-ruby-edge/concurrent/actor/context.rb', line 117 def self.spawn(name_or_opts, *args, &block) Actor.spawn to_spawn_options(name_or_opts, *args), &block end.spawn!(name_or_opts, *args, &block) ⇒ undocumented
122 123 124
# File 'lib/concurrent-ruby-edge/concurrent/actor/context.rb', line 122 def self.spawn!(name_or_opts, *args, &block) Actor.spawn! to_spawn_options(name_or_opts, *args), &block endInstance Method Details #ask(message) ⇒ undocumented Also known as: ask!
98 99 100
# File 'lib/concurrent-ruby-edge/concurrent/actor/context.rb', line 98 def ask(message) raise 'actor cannot ask itself' end#behaviour_definition ⇒ Array<Array(Behavior::Abstract, Array<Object>)>
72 73 74
# File 'lib/concurrent-ruby-edge/concurrent/actor/context.rb', line 72 def behaviour_definition raise NotImplementedError end#dead_letter_routing ⇒ Reference
Defines an actor responsible for dead letters. Any rejected message send with Reference#tell is sent there, a message with future is considered already monitored for failures. Default behaviour is to use #dead_letter_routing of the parent, so if no #dead_letter_routing method is overridden in parent-chain the message ends up in Actor.root.dead_letter_routing
agent which will log warning.
67 68 69
# File 'lib/concurrent-ruby-edge/concurrent/actor/context.rb', line 67 def dead_letter_routing parent.dead_letter_routing end#default_executor ⇒ Executor
override to se different default executor, e.g. to change it to global_fast_executor
#default_reference_class ⇒ CLassoverride if different class for reference is needed
83 84 85
# File 'lib/concurrent-ruby-edge/concurrent/actor/context.rb', line 83 def default_reference_class Reference end#envelope ⇒ Envelope
Returns current envelope, accessible inside #on_message processing.
77 78 79
# File 'lib/concurrent-ruby-edge/concurrent/actor/context.rb', line 77 def envelope @envelope or raise 'envelope not set' end#on_envelope(envelope) ⇒ undocumented
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
46 47 48 49 50 51
# File 'lib/concurrent-ruby-edge/concurrent/actor/context.rb', line 46 def on_envelope(envelope) @envelope = envelope on_message envelope.message ensure @envelope = nil end#on_event(event) ⇒ undocumented
override to add custom code invocation on internal events like :terminated
, :resumed
, anError
.
42 43
# File 'lib/concurrent-ruby-edge/concurrent/actor/context.rb', line 42 def on_event(event) end#on_message(message) ⇒ Object This method is abstract.
override to define Actor's behaviour
Returns a result which will be used to set the Future supplied to Reference#ask.
37 38 39
# File 'lib/concurrent-ruby-edge/concurrent/actor/context.rb', line 37 def on_message(message) raise NotImplementedError end#pass ⇒ undocumented
55 56 57
# File 'lib/concurrent-ruby-edge/concurrent/actor/context.rb', line 55 def pass core.behaviour!(Behaviour::ExecutesContext).pass envelope end#tell(message) ⇒ undocumented Also known as: <<
94 95 96
# File 'lib/concurrent-ruby-edge/concurrent/actor/context.rb', line 94 def tell(message) reference.tell message end#Child!(value, *types) ⇒ undocumented Originally defined in module TypeCheck #Child?(value, *types) ⇒ Boolean Originally defined in module TypeCheck #context_class ⇒ undocumented Also known as: actor_class Originally defined in module PublicDelegations #log(level, message = nil, &block) ⇒ undocumented Originally defined in module InternalDelegations #Match!(value, *types) ⇒ undocumented Originally defined in module TypeCheck #Match?(value, *types) ⇒ Boolean Originally defined in module TypeCheck #redirect(reference, envelope = self.envelope) ⇒ undocumented Originally defined in module InternalDelegations #reference ⇒ undocumented Also known as: ref Originally defined in module PublicDelegations #Type!(value, *types) ⇒ undocumented Originally defined in module TypeCheck #Type?(value, *types) ⇒ Boolean Originally defined in module TypeCheck
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4