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.



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

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

Instance Method Details

#add_timer(timer) ⇒ Object



24
25
26
27
28
# File 'lib/lightio/core/backend/nio.rb', line 24

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:



30
31
32
33
# File 'lib/lightio/core/backend/nio.rb', line 30

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



35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/lightio/core/backend/nio.rb', line 35

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



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

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