class EventMachine::AlignedPeriodic
Constants
- VERSION
Attributes
nextevent[R]
Public Class Methods
new(interval, p, offset = 0, logger = nil)
click to toggle source
# File lib/eventmachine_alignedperiodic.rb, line 13 def initialize(interval, p, offset = 0, logger = nil) @interval = interval @offset = offset @p = p @logger = logger @partial = true @running = false @mutex = Mutex.new end
Public Instance Methods
poke()
click to toggle source
# File lib/eventmachine_alignedperiodic.rb, line 31 def poke @mutex.synchronize { # if we aren't running, we can't be poked unless @running raise "periodic schedulder not running; can't be poked" end EventMachine.cancel_timer(@timer) @p.call(true) @partial = true schedule_next_event } end
start()
click to toggle source
# File lib/eventmachine_alignedperiodic.rb, line 23 def start @mutex.synchronize { EventMachine.add_shutdown_hook { @p.call(true) } @running = true schedule_first_event } end
stop()
click to toggle source
# File lib/eventmachine_alignedperiodic.rb, line 44 def stop #Changed as per https://github.com/eventmachine/eventmachine/issues/418 if EM.reactor_running? EM.add_timer(0) { EventMachine.cancel_timer(@timer) if !@timer.nil? } end @running = false @timer = nil @p.call(true) end
Private Instance Methods
do_periodic()
click to toggle source
# File lib/eventmachine_alignedperiodic.rb, line 58 def do_periodic @mutex.synchronize { # we can't remove shutdown hooks, so if we aren't running, do nothing return unless @running begin @p.call(@partial) rescue => e if ! @logger.nil? @logger.debug("exception in do_periodic: #{e}") end end @partial = false if @partial @lastevent = @nextevent schedule_next_event } end
schedule()
click to toggle source
# File lib/eventmachine_alignedperiodic.rb, line 92 def schedule if ! @logger.nil? @logger.debug("next event is at #{@nextevent}") end nextevent_in = @nextevent - Time.now @timer = EventMachine.add_timer(nextevent_in) { do_periodic() } end
schedule_first_event()
click to toggle source
# File lib/eventmachine_alignedperiodic.rb, line 75 def schedule_first_event now = Time.now if @lastevent.nil? @lastevent = now.to_date.to_time + @offset while @lastevent + @interval < now @lastevent += @interval end end @nextevent = @lastevent + @interval schedule end
schedule_next_event()
click to toggle source
# File lib/eventmachine_alignedperiodic.rb, line 87 def schedule_next_event @nextevent = @lastevent + @interval schedule end