implemented timer
[god.git] / lib / god / timer.rb
blobcd2492e6ddde6adf48fc55a25b001b99e3d5d55d
1 module God
2   
3   # class TimerEvent
4   #   attr_accessor :name, :at
5   #   
6   #   def initialize(name, at)
7   #     self.name = name
8   #     self.at = at
9   #   end
10   # end
11   
12   class Timer < Base
13     INTERVAL = 0.25
14     
15     attr_reader :events
16     
17     def initialize
18       @events = {}
19       
20       @timer = Thread.new do
21         t = Time.now.to_i
22         
23         loop do
24           @events.each do |name, at|
25             if t >= at
26               @events.delete(name)
27             end
28           end
29           
30           # sleep until next check
31           sleep INTERVAL
32         end
33       end
34     end
35     
36     # Register the given +name+ to trigger a 'poll' event in +delay+ seconds
37     def register(name, delay)
38       @events[name] = Time.now.to_i + delay
39     end
40     
41     # 
42     def join
43       @timer.join
44     end
45   end
46   
47 end