diff --git a/client_test.py b/client_test.py
index d8718ec..db50921 100755
--- a/client_test.py
+++ b/client_test.py
@@ -7,11 +7,15 @@ from twisted.internet.protocol import ClientFactory
import data
class Centrixc(LineReceiver):
+ def sendMessage(self,msg_type,**kwargs):
+ self.sendLine(data.Message(msg_type,**kwargs).to_xml())
+
def connectionMade(self):
- self.sendLine(data.Message('register_machine').to_xml())
+ self.sendMessage('register_machine')
def lineReceived(self,line):
print data.Message.parse(line)
+ self.sendMessage('quit')
self.transport.loseConnection()
class CClientFactory(ClientFactory):
diff --git a/discovery.py b/discovery.py
index c1bdef0..8f62f66 100644
--- a/discovery.py
+++ b/discovery.py
@@ -6,6 +6,12 @@ import dbus
from dbus.mainloop.glib import DBusGMainLoop
import avahi
+import data
+import machines
+
+hosts = []
+services = {}
+
def err(str):
print "Error:", str
@@ -56,10 +62,52 @@ class Browser(threading.Thread):
def remove_service(self,iface,proto,name,stype,domain,flags):
print "Removing service", name
+ def quit(self):
+ print "Stop discovery."
+ self.ml.quit()
+ self.lock.release()
+ return False
+
def run(self):
DBusGMainLoop(set_as_default=True)
+ gobject.timeout_add(self.timeout,self.quit)
self.browse(self.types)
self.ml = gobject.MainLoop()
gobject.threads_init()
self.ml.run()
+class ZeroconfListener(object):
+ def new_service(self, iface,proto,name,stype,domain, host, aproto,addr, port, txt,flags):
+ global services
+ global hosts
+
+ if stype == '_workstation._tcp':
+ host = machines.Host()
+ host.hostname = name.split()[0]
+ host.ip = addr
+ hosts.append(host)
+ return
+
+ sname = servicenames[stype]
+ svc = data.Service()
+ svc.name = name
+ svc.ip = addr
+ svc.port = port
+ services[sname] = svc
+# print "services[%s] = %s" % (sname, svc)
+
+def discover():
+ global browser
+ lock = threading.Lock()
+ lock.acquire()
+ listener = ZeroconfListener()
+ browser = Browser(args=('_ssh._tcp','_workstation._tcp','_nameserver._udp'))
+ browser.timeout = 3000
+ browser.lock = lock
+ browser.set_listener(listener)
+ browser.start()
+ return lock
+
+def stop():
+ global browser
+ browser.quit()
diff --git a/test.py b/test.py
index a0bf4c9..b75b239 100755
--- a/test.py
+++ b/test.py
@@ -21,34 +21,14 @@ import machines
# Internal section
def on_sigint(signum, frame):
- global browser, reactor
+ global reactor
print "Got SIGINT"
- browser.ml.quit()
+ discovery.stop()
reactor.stop()
- sys.exit()
+# sys.exit()
signal.signal(signal.SIGINT, on_sigint)
-class ZeroconfListener(object):
- def new_service(self, iface,proto,name,stype,domain, host, aproto,addr, port, txt,flags):
- global services
- global hosts
-
- if stype == '_workstation._tcp':
- host = machines.Host()
- host.hostname = name.split()[0]
- host.ip = addr
- hosts.append(host)
- return
-
- sname = discovery.servicenames[stype]
- svc = data.Service()
- svc.name = name
- svc.ip = addr
- svc.port = port
- services[sname] = svc
-# print "services[%s] = %s" % (sname, svc)
-
class Centrixd(LineReceiver):
def lineReceived(self,line):
msg = data.Message.parse(line)
@@ -63,31 +43,27 @@ class Centrixd(LineReceiver):
#####################################
# Setup
-listener = ZeroconfListener()
-browser = discovery.Browser(args=('_ssh._tcp','_workstation._tcp','_nameserver._udp'))
-browser.set_listener(listener)
-browser.start()
-
-hosts = []
+lock = discovery.discover()
-services = {}
-services['proxy'] = data.Service()
-services['proxy'].ip = '192.168.32.3'
-services['proxy'].port = 3128
-services['gateway'] = data.Service()
-services['gateway'].ip = '192.168.32.1'
+discovery.services['proxy'] = data.Service()
+discovery.services['proxy'].ip = '192.168.32.3'
+discovery.services['proxy'].port = 3128
+discovery.services['gateway'] = data.Service()
+discovery.services['gateway'].ip = '192.168.32.1'
machine = machines.Host()
machine.ip = '192.168.1.2'
machine.hostname = 'portnov'
-templates.services = services
+templates.services = discovery.services
templates.machine = machine
-time.sleep(5)
+# time.sleep(5)
+print "Waiting for discovery..."
+lock.acquire()
# print services
print "Found hosts:"
-for host in hosts:
+for host in discovery.hosts:
print host
# Read template