Enchace synchronization, remove discovery timeout by default
Enchace synchronization, remove discovery timeout by default
diff --git a/discovery.py b/discovery.py
index f411066..30376ee 100644
--- a/discovery.py
+++ b/discovery.py
@@ -31,7 +31,15 @@ class Browser(threading.Thread):
def __init__(self,group=None,target=None,name=None,args=(), kwargs=None,verbose=None):
threading.Thread.__init__(self)
self.types = args
-# signal.signal(signal.SIGINT, on_sigint)
+ self.done = {}
+ for type in args:
+ self.done[type] = False
+
+ def _all_done(self):
+ for v in self.done.values():
+ if not v:
+ return False
+ return True
def _interface_for_type(self,type):
return dbus.Interface(self.bus.get_object(avahi.DBUS_NAME,
@@ -55,6 +63,9 @@ class Browser(threading.Thread):
name,stype,domain, avahi.PROTO_UNSPEC, dbus.UInt32(0),
reply_handler = self.listener.new_service,
error_handler = err)
+ self.done[stype] = True
+ if self._all_done():
+ self.lock.release()
def set_listener(self, ob):
self.listener = ob
@@ -65,12 +76,16 @@ class Browser(threading.Thread):
def quit(self):
print "Stop discovery."
self.ml.quit()
- self.lock.release()
+ try:
+ self.lock.release()
+ except:
+ pass
return False
def run(self):
DBusGMainLoop(set_as_default=True)
- gobject.timeout_add(self.timeout,self.quit)
+ if self.timeout:
+ gobject.timeout_add(self.timeout,self.quit)
self.browse(self.types)
self.ml = gobject.MainLoop()
gobject.threads_init()
@@ -96,7 +111,7 @@ class ZeroconfListener(object):
services[sname] = svc
# print "services[%s] = %s" % (sname, svc)
-def discover(timeout=3000):
+def discover(timeout=None):
global browser
lock = threading.Lock()
lock.acquire()
diff --git a/test.py b/test.py
index b75b239..d409b92 100755
--- a/test.py
+++ b/test.py
@@ -57,7 +57,6 @@ machine.hostname = 'portnov'
templates.services = discovery.services
templates.machine = machine
-# time.sleep(5)
print "Waiting for discovery..."
lock.acquire()