class Concurrent::Actor::Utils::Broadcast
Allows to build pub/sub easily. @example news
news_channel = Concurrent::Actor::Utils::Broadcast.spawn :news 2.times do |i| Concurrent::Actor::Utils::AdHoc.spawn "listener-#{i}" do news_channel << :subscribe -> message { puts message } end end news_channel << 'Ruby rocks!' # prints: 'Ruby rocks!' twice
Public Class Methods
new()
click to toggle source
# File lib/concurrent/actor/utils/broadcast.rb, line 22 def initialize @receivers = Set.new end
Public Instance Methods
filtered_receivers()
click to toggle source
override to define different behaviour, filtering etc
# File lib/concurrent/actor/utils/broadcast.rb, line 45 def filtered_receivers @receivers end
on_message(message)
click to toggle source
# File lib/concurrent/actor/utils/broadcast.rb, line 26 def on_message(message) case message when :subscribe if envelope.sender.is_a? Reference @receivers.add envelope.sender true else false end when :unsubscribe !!@receivers.delete(envelope.sender) when :subscribed? @receivers.include? envelope.sender else filtered_receivers.each { |r| r << message } end end