Class: ChannelTasks
Constant Summary collapse
- @@listeners =
{}
- @@channel_listeners =
{}
Class Method Summary collapse
Instance Method Summary collapse
- #add_listener(channel_name, scope = {}) ⇒ Object
-
#close! ⇒ Object
Called when a channel is closed, removes its listeners from all channels.
-
#initialize(channel, dispatcher = nil) ⇒ ChannelTasks
constructor
The dispatcher passes its self in.
- #remove_listener(channel_name, scope = {}) ⇒ Object
Constructor Details
#initialize(channel, dispatcher = nil) ⇒ ChannelTasks
The dispatcher passes its self in
6 7 8 |
# File 'app/volt/tasks/channel_tasks.rb', line 6 def initialize(channel, dispatcher=nil) @channel = channel end |
Class Method Details
.send_message_to_channel(channel_name, message, skip_channel = nil) ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'app/volt/tasks/channel_tasks.rb', line 42 def self.(channel_name, , skip_channel=nil) listeners = @@listeners[channel_name] if listeners listeners.each do |listener| # We might need to skip a channel if the update came in on this # channel. next if listener == skip_channel listener.(*) end end end |
Instance Method Details
#add_listener(channel_name, scope = {}) ⇒ Object
10 11 12 13 14 15 16 17 18 19 |
# File 'app/volt/tasks/channel_tasks.rb', line 10 def add_listener(channel_name, scope={}) # Track every channel that is listening @@listeners[channel_name] ||= [] @@listeners[channel_name] << @channel # Also keep track of which channel names a channel is listening # on so it can be removed if a channel is closed. @@channel_listeners[@channel] ||= {} @@channel_listeners[@channel][channel_name] = true end |
#close! ⇒ Object
Called when a channel is closed, removes its listeners from all channels.
32 33 34 35 36 37 38 39 40 |
# File 'app/volt/tasks/channel_tasks.rb', line 32 def close! channel_names = @@channel_listeners.delete(@channel) if channel_names channel_names.each_pair do |channel_name,val| remove_listener(channel_name) end end end |
#remove_listener(channel_name, scope = {}) ⇒ Object
21 22 23 24 25 26 27 28 |
# File 'app/volt/tasks/channel_tasks.rb', line 21 def remove_listener(channel_name, scope={}) if @@listeners[channel_name] @@listeners[channel_name].delete(@channel) if @@channel_listeners[@channel] @@channel_listeners[@channel].delete(channel_name) end end end |