rendered paste bodyimport dbus
import avahi
class AvahiMonitor:
def __init__(self):
self.bus = dbus.SystemBus()
self.server = dbus.Interface(self.bus.get_object(avahi.DBUS_NAME,
avahi.DBUS_PATH_SERVER),
avahi.DBUS_INTERFACE_SERVER)
stype = '_daap._tcp'
domain = 'local'
obj = self.bus.get_object(avahi.DBUS_NAME,
self.server.ServiceBrowserNew(avahi.IF_UNSPEC,
avahi.PROTO_UNSPEC,
stype, domain,
dbus.UInt32(0)))
self.browser = dbus.Interface(obj, avahi.DBUS_INTERFACE_SERVICE_BROWSER)
def start(self):
self.browser.connect_to_signal('ItemNew', self.new_service)
self.browser.connect_to_signal('ItemRemove', self.remove_service)
def stop(self):
self.bus.close()
def refresh(self):
self.bus._connection.dispatch()
self.bus._connection.flush()
def new_service(self, interface, protocol, name, type, domain, flags):
print protocol, interface
service = self.server.ResolveService(interface, protocol,
name, type, domain,
avahi.PROTO_UNSPEC, dbus.UInt32(0))
address, port = service[-4:-2]
def remove_service(self, interface, protocol, name, type, domain):
service = self.server.ResolveService(interface, protocol,
name, type, domain,
avahi.PROTO_UNSPEC, dbus.UInt32(0))
address, port = service[-4:-2]
if __name__ == '__main__':
from twisted.internet import glib2reactor
glib2reactor.install()
from twisted.internet import reactor, task
monitor = AvahiMonitor()
monitor.start()
call = task.LoopingCall(monitor.refresh)
call.start(1.0 / 30)
reactor.run()