ThomasV
6 years ago
6 changed files with 38 additions and 64 deletions
@ -1,47 +0,0 @@ |
|||||
import asyncio |
|
||||
from typing import List, Sequence |
|
||||
|
|
||||
from aiorpcx import TaskGroup |
|
||||
|
|
||||
from electrum.network import parse_servers, Network |
|
||||
from electrum.interface import Interface |
|
||||
|
|
||||
|
|
||||
#electrum.util.set_verbosity(True) |
|
||||
|
|
||||
async def get_peers(network: Network): |
|
||||
while not network.is_connected(): |
|
||||
await asyncio.sleep(1) |
|
||||
print("waiting for network to get connected...") |
|
||||
interface = network.interface |
|
||||
session = interface.session |
|
||||
print(f"asking server {interface.server} for its peers") |
|
||||
peers = parse_servers(await session.send_request('server.peers.subscribe')) |
|
||||
print(f"got {len(peers)} servers") |
|
||||
return peers |
|
||||
|
|
||||
|
|
||||
async def send_request(network: Network, servers: List[str], method: str, params: Sequence): |
|
||||
print(f"contacting {len(servers)} servers") |
|
||||
num_connecting = len(network.connecting) |
|
||||
for server in servers: |
|
||||
network._start_interface(server) |
|
||||
# sleep a bit |
|
||||
for _ in range(10): |
|
||||
if len(network.connecting) < num_connecting: |
|
||||
break |
|
||||
await asyncio.sleep(1) |
|
||||
print(f"connected to {len(network.interfaces)} servers. sending request to all.") |
|
||||
responses = dict() |
|
||||
async def get_response(iface: Interface): |
|
||||
try: |
|
||||
res = await iface.session.send_request(method, params, timeout=10) |
|
||||
except Exception as e: |
|
||||
print(f"server {iface.server} errored or timed out: ({repr(e)})") |
|
||||
res = e |
|
||||
responses[iface.server] = res |
|
||||
async with TaskGroup() as group: |
|
||||
for interface in network.interfaces.values(): |
|
||||
await group.spawn(get_response(interface)) |
|
||||
print("%d answers" % len(responses)) |
|
||||
return responses |
|
Loading…
Reference in new issue