Class: LightIO::Core::Backend::Timers

Inherits:
Object
  • Object
show all
Defined in:
lib/lightio/core/backend/nio.rb

Instance Method Summary collapse

Constructor Details

#initializeTimers

Returns a new instance of Timers.



20
21
22
23
# File 'lib/lightio/core/backend/nio.rb', line 20

def initialize
  @timers = SortedSet.new
  @timers_registry = {}
end

Instance Method Details

#add_timer(timer) ⇒ Object



25
26
27
28
29
# 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) ⇒ Object

Raises:



31
32
33
34
# 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) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
48
# 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_uuidObject



15
16
17
18
# File 'lib/lightio/core/backend/nio.rb', line 15

def generate_uuid
  @ix ||= 0
  @ix += 1
end