Class: God::EventHandler

Inherits:
Object
  • Object
show all
Defined in:
lib/god/event_handler.rb

Constant Summary collapse

@@actions =
{}
@@handler =
nil
@@loaded =
false

Class Method Summary collapse

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_systemObject



11
12
13
# File 'lib/god/event_handler.rb', line 11

def self.event_system
  @@handler::EVENT_SYSTEM
end

.loadObject



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

Returns:

  • (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

.startObject



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

Returns:

  • (Boolean)


57
58
59
# File 'lib/god/event_handler.rb', line 57

def self.watching_pid?(pid)
  @@actions[pid]
end