Sha256: 613c7510abcad28acf98ed9c0c03736e047edd8f10a2f482672b3c38dd161455
Contents?: true
Size: 1.45 KB
Versions: 3
Compression:
Stored size: 1.45 KB
Contents
require 'concurrent/actor/behaviour/abstract' module Concurrent module Actor module Behaviour # Handles supervised actors. Handle configures what to do with failed child: :terminate!, :resume!, :reset!, # or :restart!. Strategy sets :one_for_one (restarts just failed actor) or :one_for_all (restarts all child actors). # @note TODO missing example # @note this will change in next version to support supervision trees better class Supervising < Abstract def initialize(core, subsequent, core_options, handle, strategy) super core, subsequent, core_options @handle = Match! handle, :terminate!, :resume!, :reset!, :restart! @strategy = case @handle when :terminate! Match! strategy, nil when :resume! Match! strategy, :one_for_one when :reset!, :restart! Match! strategy, :one_for_one, :one_for_all end end def on_envelope(envelope) case envelope.message when Exception, :paused receivers = if @strategy == :one_for_all children else [envelope.sender] end receivers.each { |ch| ch << @handle } else pass envelope end end end end end end
Version data entries
3 entries across 3 versions & 1 rubygems