silence kill -0, update version to 0.2.0
[god.git] / lib / god / event_handler.rb
blob642964a4c2514d65d833a81057d4fec982db4a2a
1 module God
2   class EventHandler
3     @@actions = {}
4     @@handler = nil
5     
6     def self.handler=(value)
7       @@handler = value
8     end
9     
10     def self.register(pid, event, &block)
11       @@actions[pid] ||= {}
12       @@actions[pid][event] = block
13       @@handler.register_process(pid, @@actions[pid].keys)
14     end
15     
16     def self.deregister(pid, event=nil)
17       if watching_pid? pid
18         if event.nil?
19           @@actions.delete(pid)
20           @@handler.register_process(pid, []) if system("kill -0 #{pid} &> /dev/null")
21         else
22           @@actions[pid].delete(event)
23           @@handler.register_process(pid, @@actions[pid].keys) if system("kill -0 #{pid} &> /dev/null")
24         end
25       end
26     end
27     
28     def self.call(pid, event)
29       @@actions[pid][event].call
30     end
31     
32     def self.watching_pid?(pid)
33       @@actions[pid]
34     end
35     
36     def self.start
37       Thread.new do
38         loop do
39           @@handler.handle_events
40         end
41       end
42     end
43     
44   end
45 end