propogate netlink status to process exits condition
[god.git] / lib / god / trigger.rb
blob0f022840a7900b794478ae271c092925cae083f0
1 module God
2   
3   class Trigger
4     
5     class << self
6       attr_accessor :triggers # {task.name => condition}
7     end
8     
9     # init
10     self.triggers = {}
11     @mutex = Mutex.new
12     
13     def self.register(condition)
14       @mutex.synchronize do
15         self.triggers[condition.watch.name] ||= []
16         self.triggers[condition.watch.name] << condition
17       end
18     end
19     
20     def self.deregister(condition)
21       @mutex.synchronize do
22         self.triggers[condition.watch.name].delete(condition)
23         self.triggers.delete(condition.watch.name) if self.triggers[condition.watch.name].empty?
24       end
25     end
26     
27     def self.broadcast(task, message, payload)
28       return unless self.triggers[task.name]
29       
30       @mutex.synchronize do
31         self.triggers[task.name].each do |t|
32           t.process(message, payload)
33         end
34       end
35     end
36     
37     def self.reset
38       self.triggers.clear
39     end
40     
41   end
42   
43 end