def __init__(self): super().__init__() self._datagram_transport = asyncio.DatagramTransport() self._write_allowed = asyncio.Event() self._queue_nonempty = asyncio.Event() self._message_queue = collections.deque( ) # type: typing.Deque[MessageQueueEntry] self._messenger_task = asyncio.Task(self._send_messages())
async def create_datagram_endpoint(proto_lam: typing.Callable[[], 'KademliaProtocol'], from_addr: typing.Tuple[str, int]): def sendto(data, to_addr): rx = dht_network.get(to_addr) if rx and rx.external_ip: # print(f"{from_addr[0]}:{from_addr[1]} -{len(data)} bytes-> {rx.external_ip}:{rx.udp_port}") return rx.datagram_received(data, from_addr) protocol = proto_lam() transport = asyncio.DatagramTransport(extra={'socket': mock_sock}) transport.is_closing = lambda: False transport.close = lambda: mock_sock.close() mock_sock.sendto = sendto transport.sendto = mock_sock.sendto protocol.connection_made(transport) dht_network[from_addr] = protocol return transport, protocol
async def create_datagram_endpoint(proto_lam, sock=None): def sendto(p: asyncio.DatagramProtocol): def _sendto(data, addr): sent_udp_packets.append(data) if (data, addr) in udp_replies: loop.call_later(udp_delay_reply, p.datagram_received, udp_replies[(data, addr)], (udp_expected_addr, 1900)) return _sendto protocol = proto_lam() transport = asyncio.DatagramTransport(extra={'socket': mock_sock}) transport.close = lambda: mock_sock.close() mock_sock.sendto = sendto(protocol) transport.sendto = mock_sock.sendto protocol.connection_made(transport) return transport, protocol
def test_dgram_not_implemented(self): transport = asyncio.DatagramTransport() self.assertRaises(NotImplementedError, transport.sendto, 'data') self.assertRaises(NotImplementedError, transport.abort)
def __init__(self, message: bytes, on_exit: asyncio.Future): self.message = message self.on_exit = on_exit self.result: Optional[bytes] = None self.transport: asyncio.DatagramTransport = asyncio.DatagramTransport()