Cleanup the service stuff for the multicast case
This commit is contained in:
parent
2fdedc751e
commit
f6d9916b4a
@ -25,8 +25,7 @@ class Owner(Buddy):
|
|||||||
if not nick or not len(nick):
|
if not nick or not len(nick):
|
||||||
nick = "n00b"
|
nick = "n00b"
|
||||||
|
|
||||||
service = Service(nick, PRESENCE_SERVICE_TYPE,
|
service = Service(nick, PRESENCE_SERVICE_TYPE, PRESENCE_SERVICE_PORT)
|
||||||
PRESENCE_SERVICE_PORT)
|
|
||||||
|
|
||||||
Buddy.__init__(self, service, nick)
|
Buddy.__init__(self, service, nick)
|
||||||
|
|
||||||
|
@ -105,13 +105,14 @@ class LocalGroup(Group):
|
|||||||
|
|
||||||
def _on_service_resolved(self, interface, protocol, name, stype, domain,
|
def _on_service_resolved(self, interface, protocol, name, stype, domain,
|
||||||
host, aprotocol, address, port, txt, flags):
|
host, aprotocol, address, port, txt, flags):
|
||||||
multicast = None
|
service = Service(name, stype, port)
|
||||||
|
service.set_address(address)
|
||||||
|
|
||||||
for prop in avahi.txt_array_to_string_array(txt):
|
for prop in avahi.txt_array_to_string_array(txt):
|
||||||
(key, value) = prop.split('=')
|
(key, value) = prop.split('=')
|
||||||
if key == 'multicast':
|
if key == 'multicast':
|
||||||
multicast = value
|
service.set_group_address(value)
|
||||||
|
|
||||||
service = Service(name, stype, port, multicast)
|
|
||||||
if stype == PRESENCE_SERVICE_TYPE:
|
if stype == PRESENCE_SERVICE_TYPE:
|
||||||
self._add_buddy(Buddy(service, name))
|
self._add_buddy(Buddy(service, name))
|
||||||
elif stype.startswith("_olpc"):
|
elif stype.startswith("_olpc"):
|
||||||
|
@ -10,7 +10,7 @@ class Notifier:
|
|||||||
service = Service(name, Notifier.TYPE, Notifier.PORT, Notifier.ADDRESS)
|
service = Service(name, Notifier.TYPE, Notifier.PORT, Notifier.ADDRESS)
|
||||||
service.register(group)
|
service.register(group)
|
||||||
|
|
||||||
address = service.get_multicast_group()
|
address = service.get_group_address()
|
||||||
port = service.get_port()
|
port = service.get_port()
|
||||||
self._client = network.GroupClient(address, port)
|
self._client = network.GroupClient(address, port)
|
||||||
|
|
||||||
|
@ -1,11 +1,12 @@
|
|||||||
import presence
|
import presence
|
||||||
|
|
||||||
class Service(object):
|
class Service(object):
|
||||||
def __init__(self, name, stype, port, mgroup=None):
|
def __init__(self, name, stype, port, group_address = None):
|
||||||
self._name = name
|
self._name = name
|
||||||
self._stype = stype
|
self._stype = stype
|
||||||
self._port = int(port)
|
self._port = int(port)
|
||||||
self._mgroup = mgroup
|
self._address = ''
|
||||||
|
self._group_address = group_address
|
||||||
|
|
||||||
def get_name(self):
|
def get_name(self):
|
||||||
return self._name
|
return self._name
|
||||||
@ -13,25 +14,31 @@ class Service(object):
|
|||||||
def get_type(self):
|
def get_type(self):
|
||||||
return self._stype
|
return self._stype
|
||||||
|
|
||||||
def get_address(self):
|
|
||||||
return self._address
|
|
||||||
|
|
||||||
def get_port(self):
|
def get_port(self):
|
||||||
return self._port
|
return self._port
|
||||||
|
|
||||||
def set_port(self, port):
|
def set_port(self, port):
|
||||||
self._port = port
|
self._port = port
|
||||||
|
|
||||||
def get_multicast_group(self):
|
def get_address(self):
|
||||||
return self._mgroup
|
return self._address
|
||||||
|
|
||||||
|
def get_group_address(self):
|
||||||
|
return self._group_address
|
||||||
|
|
||||||
|
def set_address(self, address):
|
||||||
|
self._address = address
|
||||||
|
|
||||||
|
def set_group_address(self):
|
||||||
|
self._group_address = group_address
|
||||||
|
|
||||||
def is_multicast(self):
|
def is_multicast(self):
|
||||||
return self._mgroup != None
|
return self._group_address != None
|
||||||
|
|
||||||
def register(self, group):
|
def register(self, group):
|
||||||
pannounce = presence.PresenceAnnounce()
|
pannounce = presence.PresenceAnnounce()
|
||||||
if self._mgroup:
|
if self._group_address:
|
||||||
pannounce.register_service(self._name, self._port, self._stype,
|
pannounce.register_service(self._name, self._port, self._stype,
|
||||||
multicast = self._mgroup)
|
group_address = self._group_address)
|
||||||
else:
|
else:
|
||||||
pannounce.register_service(self._name, self._port, self._stype)
|
pannounce.register_service(self._name, self._port, self._stype)
|
||||||
|
@ -24,7 +24,7 @@ class StreamReader:
|
|||||||
self._callback = callback
|
self._callback = callback
|
||||||
|
|
||||||
def _setup_multicast(self):
|
def _setup_multicast(self):
|
||||||
address = self._service.get_address()
|
address = self._service.get_group_address()
|
||||||
port = self._service.get_port()
|
port = self._service.get_port()
|
||||||
server = network.GroupServer(address, port, self._recv_multicast)
|
server = network.GroupServer(address, port, self._recv_multicast)
|
||||||
server.start()
|
server.start()
|
||||||
|
@ -10,6 +10,7 @@ class StreamWriter:
|
|||||||
self._service = service
|
self._service = service
|
||||||
self._address = self._service.get_address()
|
self._address = self._service.get_address()
|
||||||
self._port = self._service.get_port()
|
self._port = self._service.get_port()
|
||||||
|
self._group_address = self._service.get_group_address()
|
||||||
|
|
||||||
if self._service.is_multicast():
|
if self._service.is_multicast():
|
||||||
self._setup_multicast()
|
self._setup_multicast()
|
||||||
@ -36,7 +37,7 @@ class StreamWriter:
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
def _setup_multicast(self):
|
def _setup_multicast(self):
|
||||||
self._mclient = network.GroupClient(self._address, self._port)
|
self._mclient = network.GroupClient(self._group_address, self._port)
|
||||||
|
|
||||||
def _multicast_write(self, data):
|
def _multicast_write(self, data):
|
||||||
nick_name = self._group.get_owner().get_nick_name()
|
nick_name = self._group.get_owner().get_nick_name()
|
||||||
|
Loading…
Reference in New Issue
Block a user