Author: dmeyer
Date: Wed Mar 5 17:03:26 2008
New Revision: 3164
Log:
some thread cleanup
Modified:
trunk/base/src/net/mdns.py
trunk/base/test/mdns.py
Modified: trunk/base/src/net/mdns.py
==============================================================================
--- trunk/base/src/net/mdns.py (original)
+++ trunk/base/src/net/mdns.py Wed Mar 5 17:03:26 2008
@@ -102,26 +102,17 @@
def __init__(self):
self._bus = None
self._services = {}
- self._announce = None
self._provided = {}
self._nextid = 0
self._sync_running = False
self._sync_required = False
- @kaa.threaded(kaa.GOBJECT)
def provide(self, name, type, port, txt):
"""
Provide a service with the given name and type listening on the given
port with additional information in the txt record. This function
returns
- an InProgress object with the id of the service to remove the service
- later.
+ the id of the service to remove the service later.
"""
- if self._bus is None:
- self._dbus_connect()
- if self._announce is None:
- self._announce = dbus.Interface(
- self._bus.get_object( avahi.DBUS_NAME,
self._avahi.EntryGroupNew()),
- avahi.DBUS_INTERFACE_ENTRY_GROUP)
self._nextid += 1
self._provided[self._nextid] = [
avahi.IF_UNSPEC, # interface
@@ -137,7 +128,6 @@
self._sync()
return self._nextid
- @kaa.threaded(kaa.GOBJECT)
def remove(self, id):
"""
Remove a service.
@@ -147,11 +137,37 @@
self._sync_required = True
self._sync()
+ def get_type(self, service):
+ """
+ Get a ServiceList object for the given type.
+ e.g. get_type('_ssh._tcp')
+ """
+ if not service in self._services:
+ self._services[service] = ServiceList()
+ self._service_add_browser(service)
+ return self._services[service]
+
+ def _dbus_connect(self):
+ """
+ Connect to dbus and avahi. This is an internal function that has to be
+ called from a function running in the GOBJECT thread.
+ """
+ self._bus = dbus.SystemBus()
+ self._avahi = dbus.Interface(
+ self._bus.get_object( avahi.DBUS_NAME, avahi.DBUS_PATH_SERVER ),
+ avahi.DBUS_INTERFACE_SERVER )
+ self._entrygroup = dbus.Interface(
+ self._bus.get_object( avahi.DBUS_NAME,
self._avahi.EntryGroupNew()),
+ avahi.DBUS_INTERFACE_ENTRY_GROUP)
+
+ @kaa.threaded(kaa.GOBJECT)
def _sync(self):
"""
Sync providing service list to avahi. This is an internal function that
has to be called from a function running in the GOBJECT thread.
"""
+ if self._bus is None:
+ self._dbus_connect()
# return if nothing to do
if self._sync_running or not self._sync_required:
return
@@ -163,12 +179,12 @@
self._sync_running = True
self._sync_required = False
if not self._provided:
- self._announce.Reset(**callbacks)
+ self._entrygroup.Reset(**callbacks)
return
- self._announce.Reset()
+ self._entrygroup.Reset()
for service in self._provided.values():
- self._announce.AddService(*service)
- self._announce.Commit(**callbacks)
+ self._entrygroup.AddService(*service)
+ self._entrygroup.Commit(**callbacks)
def _sync_finished(self, error=None):
"""
@@ -181,26 +197,6 @@
self._sync_running = False
self._sync()
- def get_type(self, service):
- """
- Get a ServiceList object for the given type.
- e.g. get_type('_ssh._tcp')
- """
- if not service in self._services:
- self._services[service] = ServiceList()
- self._service_add_browser(service)
- return self._services[service]
-
- def _dbus_connect(self):
- """
- Connect to dbus and avahi. This is an internal function that has to be
- called from a function running in the GOBJECT thread.
- """
- self._bus = dbus.SystemBus()
- self._avahi = dbus.Interface(
- self._bus.get_object( avahi.DBUS_NAME, avahi.DBUS_PATH_SERVER ),
- avahi.DBUS_INTERFACE_SERVER )
-
@kaa.threaded(kaa.GOBJECT)
def _service_add_browser(self, service):
"""
Modified: trunk/base/test/mdns.py
==============================================================================
--- trunk/base/test/mdns.py (original)
+++ trunk/base/test/mdns.py Wed Mar 5 17:03:26 2008
@@ -24,8 +24,12 @@
if len(sys.argv) > 1:
# go into provide mode
# mdns.py ServiceName Port
- mdns.provide(sys.argv[1], '_test._tcp', int(sys.argv[2]), {'foo':
'bar'}).connect(provide_callback, 2)
- mdns.provide(sys.argv[1] + 'x', '_test._tcp', int(sys.argv[2]), {'foo':
'bar'}).connect(provide_callback, 5)
+ s1 = mdns.provide(sys.argv[1], '_test._tcp', int(sys.argv[2]), {'foo':
'bar'})
+ s2 = mdns.provide(sys.argv[1] + 'x', '_test._tcp', int(sys.argv[2]),
{'foo': 'bar'})
+
+ if 1:
+ kaa.OneShotTimer(mdns.remove, s1).start(5)
+ kaa.OneShotTimer(mdns.remove, s2).start(10)
else:
# go into listen mode
# monitor printer
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Freevo-cvslog mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freevo-cvslog