Class: Farce::Publisher

Inherits:
Abstract::Publisher show all
Includes:
Shareable::Unfreezable
Defined in:
lib/farce/publisher.rb

Overview

A message multiplexer. Implements the publisher-subscriber protocol.

Examples:

publisher = Farce::Publisher.new

# Count how many messages have been received
counter = Farce::Counter.new
publisher.subscribe(counter)

# Trigger a callback whenever a message is published
publisher.subscribe do |message|
  puts "Received message: #{message}"
end

# Send messages to a queue
queue = Farce::Queue.new
publisher.subscribe(queue)

# Keep track of the last published value
atom = Farce::Atom.new
publisher.subscribe(atom)

# Send messages to a Ractor
ractor = Ractor.new do
  while message = Ractor.receive
    puts "Received message in Ractor: #{message}"
  end
end
publisher.subscribe(ractor)

# Publish some messages
publisher.publish("Hello, world!")
publisher.publish("Another message")

queue.pop     # => "Hello, world!"
atom.value    # => "Another message"
counter.value # => 2

Instance Method Summary collapse

Methods included from Shareable

#ractor_shareable?

Methods inherited from Abstract::Publisher

#closed?, #publish, #subscribe, #subscribed?, #subscription_for, #unsubscribe

Methods included from Internal::Noncopyable

#duplicable?

Constructor Details

#initialize(*subscribers) ⇒ Publisher

Returns a new instance of Publisher.



49
50
51
52
53
# File 'lib/farce/publisher.rb', line 49

def initialize(*subscribers)
  @map = Strict::Map.new
  super()
  subscribers.each { subscribe(it) }
end