Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/sugar_network/toolkit/zeroconf.py
diff options
context:
space:
mode:
Diffstat (limited to 'sugar_network/toolkit/zeroconf.py')
-rw-r--r--sugar_network/toolkit/zeroconf.py22
1 files changed, 6 insertions, 16 deletions
diff --git a/sugar_network/toolkit/zeroconf.py b/sugar_network/toolkit/zeroconf.py
index 71ab2e8..9bda514 100644
--- a/sugar_network/toolkit/zeroconf.py
+++ b/sugar_network/toolkit/zeroconf.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2012 Aleksey Lim
+# Copyright (C) 2012-2013 Aleksey Lim
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -15,7 +15,7 @@
import logging
-from sugar_network.toolkit import pipe
+from sugar_network.toolkit import gbus
_LOOKUP_RESULT_LOCAL = 8
@@ -32,20 +32,12 @@ _logger = logging.getLogger('zeroconf')
def browse_workstations():
_logger.info('Start browsing hosts using Avahi')
- # Run zeroconf loop in a subprocess to avoid dbus loop collisions
- for event in pipe.fork(_browser):
- if event['state'] == 'resolve':
- yield event['address']
+ for address in gbus.pipe(_browser):
+ yield address
-def _browser():
+def _browser(pipe):
import dbus
- import gobject
- from dbus.mainloop.glib import threads_init, DBusGMainLoop
-
- gobject.threads_init()
- threads_init()
- DBusGMainLoop(set_as_default=True)
bus = dbus.SystemBus()
server = dbus.Interface(bus.get_object(_DBUS_NAME, '/'),
@@ -62,7 +54,7 @@ def _browser():
def ResolveService_cb(interface, protocol, name, type_, domain,
host, aprotocol, address, port, txt, flags):
_logger.debug('Got new address: %s', address)
- pipe.feedback('resolve', address=str(address))
+ pipe(str(address))
def ItemRemove_cb(interface, protocol, name, type_, domain, *args):
_logger.debug('Got removed workstation: %s', name)
@@ -78,8 +70,6 @@ def _browser():
browser.connect_to_signal('ItemNew', ItemNew_cb)
browser.connect_to_signal('ItemRemove', ItemRemove_cb)
- gobject.MainLoop().run()
-
if __name__ == '__main__':
from pprint import pprint