Proyecto

General

Perfil

89 manumora
import dbus, gobject, avahi
from dbus import DBusException
from dbus.mainloop.glib import DBusGMainLoop
90 manumora
import threading
89 manumora
90 manumora
class avahiClient(threading.Thread):
89 manumora
names = []

90 manumora
def __init__(self):
threading.Thread.__init__(self)
89 manumora
90 manumora
def run(self):

89 manumora
loop = DBusGMainLoop()
bus = dbus.SystemBus(mainloop=loop)

self.server = dbus.Interface(bus.get_object(avahi.DBUS_NAME, '/'), 'org.freedesktop.Avahi.Server')

sbrowser = dbus.Interface(bus.get_object(avahi.DBUS_NAME, self.server.ServiceBrowserNew(avahi.IF_UNSPEC, avahi.PROTO_UNSPEC, "_workstation._tcp", 'local', dbus.UInt32(0))), avahi.DBUS_INTERFACE_SERVICE_BROWSER)
sbrowser.connect_to_signal("ItemNew", self.myhandler)

self.loop = gobject.MainLoop()
self.loop.run()

90 manumora
89 manumora
def service_resolved(self,*args):
#print args
print 'service resolved'
print 'name:', args[2]
print 'address:', args[7]
print 'port:', args[8]
90 manumora
#print args
89 manumora
self.names.append(args[2])

#self.loop.quit()


def print_error(self,*args):
print 'error_handler'
print args[0]

def myhandler(self,interface, protocol, name, stype, domain, flags):
#print "Found service '%s' type '%s' domain '%s' " % (name, stype, domain)

if flags & avahi.LOOKUP_RESULT_LOCAL:
#print "que es esto"
pass

self.server.ResolveService(interface, protocol, name, stype, domain, avahi.PROTO_UNSPEC, dbus.UInt32(0), reply_handler=self.service_resolved, error_handler=self.print_error)

def getList(self):
return self.names

def kill(self):
self.loop.quit()