Sha256: 62a31c1fec7ce788d6fe3d974c2ba8e38688528294c126c789290fe02bfb3aa0
Contents?: true
Size: 1.33 KB
Versions: 1
Compression:
Stored size: 1.33 KB
Contents
module ActionCable module Channel module PeriodicTimers extend ActiveSupport::Concern included do class_attribute :periodic_timers, instance_reader: false self.periodic_timers = [] after_subscribe :start_periodic_timers after_unsubscribe :stop_periodic_timers end module ClassMethods # Allow you to call a private method <tt>every</tt> so often seconds. This periodic timer can be useful # for sending a steady flow of updates to a client based off an object that was configured on subscription. # It's an alternative to using streams if the channel is able to do the work internally. def periodically(callback, every:) self.periodic_timers += [ [ callback, every: every ] ] end end private def active_periodic_timers @active_periodic_timers ||= [] end def start_periodic_timers self.class.periodic_timers.each do |callback, options| active_periodic_timers << Concurrent::TimerTask.new(execution_interval: options[:every]) do connection.worker_pool.async_run_periodic_timer(self, callback) end end end def stop_periodic_timers active_periodic_timers.each { |timer| timer.shutdown } end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
actioncable-5.0.0.beta2 | lib/action_cable/channel/periodic_timers.rb |