class Mmtrix::Agent::EventLoop::Timer

Attributes

event[R]
interval[R]
last_fired_at[R]
next_fire_time[R]

Public Class Methods

new(interval, event, repeat=false) click to toggle source
# File lib/mmtrix/agent/event_loop.rb, line 13
def initialize(interval, event, repeat=false)
  @interval      = interval
  @event         = event
  @repeat        = repeat
  @started_at    = Time.now
  @last_fired_at = nil
  reschedule
end

Public Instance Methods

advance(amount) click to toggle source
# File lib/mmtrix/agent/event_loop.rb, line 26
def advance(amount)
  @next_fire_time -= amount
end
calculate_next_fire_time() click to toggle source
# File lib/mmtrix/agent/event_loop.rb, line 34
def calculate_next_fire_time
  now = Time.now
  return now if @interval == 0
  fire_time = @last_fired_at || now
  while fire_time <= now
    fire_time += @interval
  end
  fire_time
end
due?(now=Time.now) click to toggle source
# File lib/mmtrix/agent/event_loop.rb, line 48
def due?(now=Time.now)
  now >= @next_fire_time
end
finished?() click to toggle source
# File lib/mmtrix/agent/event_loop.rb, line 52
def finished?
  !@repeat && @last_fired_at
end
last_interval_start() click to toggle source
# File lib/mmtrix/agent/event_loop.rb, line 30
def last_interval_start
  @last_fired_at || @started_at
end
reschedule() click to toggle source
# File lib/mmtrix/agent/event_loop.rb, line 22
def reschedule
  @next_fire_time = calculate_next_fire_time
end
set_fired_time() click to toggle source
# File lib/mmtrix/agent/event_loop.rb, line 44
def set_fired_time
  @last_fired_at = Time.now
end