from network import * class StreamReaderRequestHandler(object): def __init__(self, reader): self._reader = reader def message(self, message): address = network.get_authinfo() self._reader.recv(address[0], message) return True class StreamReader: def __init__(self, group, service): self._group = group self._service = service if self._service.is_multicast(): self._setup_multicast() else: self._setup_unicast() def set_listener(self, callback): self._callback = callback def _setup_multicast(self): address = self._service.get_address() port = self._service.get_port() server = GroupServer(address, port, self._recv_multicast) server.start() def _setup_unicast(self): p2p_server = GlibXMLRPCServer(("", self._service.get_port())) p2p_server.register_instance(StreamReaderRequestHandler(self)) def _recv_multicast(self, msg): self._recv(msg['addr'], msg['data']) def _recv(self, address, data): owner = self._group.get_owner() if address != owner.get_service().get_address(): buddy = self._group.get_buddy_from_address(address) self._callback(buddy, data)