class LightIO::Core::Backend::Timers

Public Class Methods

new() click to toggle source
# File lib/lightio/core/backend/nio.rb, line 20
def initialize
  @timers = SortedSet.new
  @timers_registry = {}
end

Public Instance Methods

add_timer(timer) click to toggle source
# File lib/lightio/core/backend/nio.rb, line 25
def add_timer(timer)
  uuid = generate_uuid
  @timers.add([Time.now + timer.interval, uuid])
  @timers_registry[uuid] = timer.callback
end
cancel_timer(timer) click to toggle source
# File lib/lightio/core/backend/nio.rb, line 31
def cancel_timer(timer)
  raise Error, "unregistered timer" unless timer.uuid && @timers_registry.has_key?(timer.uuid)
  @timers_registry[uuid] = false
end
fire(current_loop_time) click to toggle source
# File lib/lightio/core/backend/nio.rb, line 36
def fire(current_loop_time)
  @timers.each do |t|
    if t.first <= current_loop_time
      @timers.delete(t)
      callback = @timers_registry.delete(t.last)
      next if callback == false # timer cancelled
      raise UnknownTimer, "timer id: #{t.last}" if callback.nil?
      callback.call
    else
      break
    end
  end
end
generate_uuid() click to toggle source
# File lib/lightio/core/backend/nio.rb, line 15
def generate_uuid
  @ix ||= 0
  @ix += 1
end