Class: LaunchDarkly::Impl::Broadcaster
- Inherits:
-
Object
- Object
- LaunchDarkly::Impl::Broadcaster
- Defined in:
- lib/ldclient-rb/impl/broadcaster.rb
Overview
A generic mechanism for registering event listeners and broadcasting events to them.
The SDK maintains an instance of this for each available type of listener (flag change, data store status, etc.). They are all intended to share a single executor service; notifications are submitted individually to this service for each listener.
Instance Method Summary collapse
-
#add_listener(listener) ⇒ Object
Register a listener to this broadcaster.
-
#broadcast(event) ⇒ Object
Broadcast the provided event to all registered listeners.
- #has_listeners? ⇒ Boolean
-
#initialize(executor, logger) ⇒ Broadcaster
constructor
A new instance of Broadcaster.
-
#remove_listener(listener) ⇒ Object
Removes a registered listener from this broadcaster.
Constructor Details
#initialize(executor, logger) ⇒ Broadcaster
Returns a new instance of Broadcaster.
16 17 18 19 20 |
# File 'lib/ldclient-rb/impl/broadcaster.rb', line 16 def initialize(executor, logger) @listeners = Concurrent::Set.new @executor = executor @logger = logger end |
Instance Method Details
#add_listener(listener) ⇒ Object
Register a listener to this broadcaster.
27 28 29 30 31 32 33 34 |
# File 'lib/ldclient-rb/impl/broadcaster.rb', line 27 def add_listener(listener) unless listener.respond_to? :update logger.warn("listener (#{listener.class}) does not respond to :update method. ignoring as registered listener") return end listeners.add(listener) end |
#broadcast(event) ⇒ Object
Broadcast the provided event to all registered listeners.
Each listener will be notified using the broadcasters executor. This method is non-blocking.
53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/ldclient-rb/impl/broadcaster.rb', line 53 def broadcast(event) listeners.each do |listener| executor.post do begin listener.update(event) rescue StandardError => e logger.error("listener (#{listener.class}) raised exception (#{e}) processing event (#{event.class})") end end end end |
#has_listeners? ⇒ Boolean
43 44 45 |
# File 'lib/ldclient-rb/impl/broadcaster.rb', line 43 def has_listeners? !listeners.empty? end |
#remove_listener(listener) ⇒ Object
Removes a registered listener from this broadcaster.
39 40 41 |
# File 'lib/ldclient-rb/impl/broadcaster.rb', line 39 def remove_listener(listener) listeners.delete(listener) end |