Make StreamReader search for a free port

This commit is contained in:
Marco Pesenti Gritti 2006-05-11 22:31:02 -04:00
parent ed53316f4f
commit 6f3c1ac740
3 changed files with 16 additions and 3 deletions

View File

@ -20,6 +20,9 @@ class Service(object):
def get_port(self): def get_port(self):
return self._port return self._port
def set_port(self, port):
self._port = port
def is_multicast(self): def is_multicast(self):
return self._multicast return self._multicast

View File

@ -29,8 +29,18 @@ class StreamReader:
server.start() server.start()
def _setup_unicast(self): def _setup_unicast(self):
p2p_server = GlibXMLRPCServer(("", self._service.get_port())) started = False
tries = 10
port = self._service.get_port()
while not started and tries > 0:
try:
p2p_server = GlibXMLRPCServer(("", port))
p2p_server.register_instance(StreamReaderRequestHandler(self)) p2p_server.register_instance(StreamReaderRequestHandler(self))
started = True
except:
port = port + 1
tries = tries - 1
self._service.set_port(port)
def _recv_multicast(self, msg): def _recv_multicast(self, msg):
[ nick_name, data ] = msg['data'].split(" |**| ", 2) [ nick_name, data ] = msg['data'].split(" |**| ", 2)

View File

@ -31,7 +31,7 @@ class PresenceDiscovery(object):
self.server.ResolveService(int(interface), int(protocol), name, stype, domain, avahi.PROTO_UNSPEC, dbus.UInt32(0), reply_handler=reply_handler, error_handler=error_handler) self.server.ResolveService(int(interface), int(protocol), name, stype, domain, avahi.PROTO_UNSPEC, dbus.UInt32(0), reply_handler=reply_handler, error_handler=error_handler)
def new_service(self, interface, protocol, name, stype, domain, flags): def new_service(self, interface, protocol, name, stype, domain, flags):
print "Found service '%s' (%d) of type '%s' in domain '%s' on %i.%i." % (name, flags, stype, domain, interface, protocol) # print "Found service '%s' (%d) of type '%s' in domain '%s' on %i.%i." % (name, flags, stype, domain, interface, protocol)
for listener in self._service_listeners: for listener in self._service_listeners:
listener(ACTION_SERVICE_NEW, interface, protocol, name, stype, domain, flags) listener(ACTION_SERVICE_NEW, interface, protocol, name, stype, domain, flags)