Enchace synchronization, remove discovery timeout by default

portnov [2009-02-25 14:03:27]
Enchace synchronization, remove discovery timeout by default
Filename
discovery.py
test.py
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()
ViewGit