Class: Kaede::DBus::Main
- Inherits:
-
Object
- Object
- Kaede::DBus::Main
- Defined in:
- lib/kaede/dbus/main.rb
Instance Method Summary collapse
- #<<(bus) ⇒ Object
- #flush_buffers ⇒ Object
- #handle_socket(socket) ⇒ Object
-
#initialize ⇒ Main
constructor
A new instance of Main.
- #loop ⇒ Object
- #prepare_epoll ⇒ Object
- #quit ⇒ Object
Constructor Details
#initialize ⇒ Main
Returns a new instance of Main.
8 9 10 11 |
# File 'lib/kaede/dbus/main.rb', line 8 def initialize @buses = Hash.new @quit_event = SleepyPenguin::EventFD.new(0, :SEMAPHORE) end |
Instance Method Details
#<<(bus) ⇒ Object
13 14 15 |
# File 'lib/kaede/dbus/main.rb', line 13 def <<(bus) @buses[bus..socket] = bus end |
#flush_buffers ⇒ Object
53 54 55 56 57 58 59 60 61 |
# File 'lib/kaede/dbus/main.rb', line 53 def flush_buffers # before blocking, empty the buffers # https://bugzilla.novell.com/show_bug.cgi?id=537401 @buses.each_value do |b| while m = b.. b.process(m) end end end |
#handle_socket(socket) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/kaede/dbus/main.rb', line 40 def handle_socket(socket) bus = @buses[socket] begin bus..buffer_from_socket_nonblock rescue EOFError, SystemCallError @buses.delete(socket) # this bus died return end while = bus.. bus.process() end end |
#loop ⇒ Object
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/kaede/dbus/main.rb', line 21 def loop flush_buffers epoll = prepare_epoll begin while !@buses.empty? epoll.wait do |events, io| if io == @quit_event io.value return end handle_socket(io) end end ensure epoll.close end end |
#prepare_epoll ⇒ Object
63 64 65 66 67 68 69 70 |
# File 'lib/kaede/dbus/main.rb', line 63 def prepare_epoll SleepyPenguin::Epoll.new.tap do |epoll| epoll.add(@quit_event, [:IN]) @buses.each_key do |socket| epoll.add(socket, [:IN]) end end end |
#quit ⇒ Object
17 18 19 |
# File 'lib/kaede/dbus/main.rb', line 17 def quit @quit_event.incr(1) end |