Class: God::EventHandler
- Inherits:
-
Object
- Object
- God::EventHandler
- Defined in:
- lib/god/event_handler.rb
Constant Summary collapse
- @@actions =
{}
- @@handler =
nil
- @@loaded =
false
Class Method Summary collapse
- .call(pid, event) ⇒ Object
- .deregister(pid, event = nil) ⇒ Object
- .event_system ⇒ Object
- .load ⇒ Object
- .loaded? ⇒ Boolean
- .register(pid, event, &block) ⇒ Object
- .start ⇒ Object
- .watching_pid?(pid) ⇒ Boolean
Class Method Details
.call(pid, event) ⇒ Object
53 54 55 |
# File 'lib/god/event_handler.rb', line 53 def self.call(pid, event) @@actions[pid][event].call if watching_pid?(pid) && @@actions[pid][event] end |
.deregister(pid, event = nil) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/god/event_handler.rb', line 41 def self.deregister(pid, event=nil) if watching_pid? pid if event.nil? @@actions.delete(pid) @@handler.register_process(pid, []) if system("kill -0 #{pid} &> /dev/null") else @@actions[pid].delete(event) @@handler.register_process(pid, @@actions[pid].keys) if system("kill -0 #{pid} &> /dev/null") end end end |
.event_system ⇒ Object
11 12 13 |
# File 'lib/god/event_handler.rb', line 11 def self.event_system @@handler::EVENT_SYSTEM end |
.load ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/god/event_handler.rb', line 15 def self.load begin case RUBY_PLATFORM when /darwin/i, /bsd/i require 'god/event_handlers/kqueue_handler' @@handler = KQueueHandler when /linux/i require 'god/event_handlers/netlink_handler' @@handler = NetlinkHandler else raise NotImplementedError, "Platform not supported for EventHandler" end @@loaded = true rescue Exception require 'god/event_handlers/dummy_handler' @@handler = DummyHandler @@loaded = false end end |
.loaded? ⇒ Boolean
7 8 9 |
# File 'lib/god/event_handler.rb', line 7 def self.loaded? @@loaded end |
.register(pid, event, &block) ⇒ Object
35 36 37 38 39 |
# File 'lib/god/event_handler.rb', line 35 def self.register(pid, event, &block) @@actions[pid] ||= {} @@actions[pid][event] = block @@handler.register_process(pid, @@actions[pid].keys) end |
.start ⇒ Object
61 62 63 64 65 66 67 |
# File 'lib/god/event_handler.rb', line 61 def self.start Thread.new do loop do @@handler.handle_events end end end |
.watching_pid?(pid) ⇒ Boolean
57 58 59 |
# File 'lib/god/event_handler.rb', line 57 def self.watching_pid?(pid) @@actions[pid] end |