class Rage::Cable::Channel

def set_up_periodic_timers

def set_up_periodic_timers
  return if @__periodic_timers_set_up
  @__channels = Set.new
  @__periodic_timers.each do |callback, every|
    ::Iodine.run_every((every * 1000).to_i) do
      slice_length = (@__channels.length / 20.0).ceil
      if slice_length != 0
        @__channels.each_slice(slice_length) do |slice|
          Fiber.schedule do
            slice.each { |channel| callback.call(channel) }
          rescue => e
            Rage.logger.error("Unhandled exception has occured - #{e.class} (#{e.message}):\n#{e.backtrace.join("\n")}")
          end
        end
      end
    end
  end
  @__periodic_timers_set_up = true
end