app/volt/tasks/channel_tasks.rb in volt-0.4.7 vs app/volt/tasks/channel_tasks.rb in volt-0.4.8
- old
+ new
@@ -1,24 +1,46 @@
class ChannelTasks
@@listeners = {}
+ @@channel_listeners = {}
- def initialize(channel, dispatcher)
+ # The dispatcher passes its self in
+ def initialize(channel, dispatcher=nil)
@channel = channel
- @dispatcher = dispatcher
end
def add_listener(channel_name)
+ # 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
def remove_listener(channel_name)
if @@listeners[channel_name]
@@listeners[channel_name].delete(@channel)
+ if @@channel_listeners[@channel]
+ @@channel_listeners[@channel].delete(channel_name)
+ end
end
end
- def self.send_message_to_channel(channel_name, message, skip_channel)
+ # Called when a channel is closed, removes its listeners from
+ # all channels.
+ 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
+
+ def self.send_message_to_channel(channel_name, message, 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
\ No newline at end of file