xch-blockchain/src/server/reconnect_task.py

36 lines
1.1 KiB
Python
Raw Normal View History

2020-05-20 21:44:05 +02:00
import asyncio
2020-06-20 06:30:37 +02:00
import socket
2020-07-09 14:03:59 +02:00
import logging
2020-06-20 06:30:37 +02:00
from src.types.peer_info import PeerInfo
2020-05-20 21:44:05 +02:00
2020-07-09 14:03:59 +02:00
log = logging.getLogger(__name__)
2020-06-20 06:30:37 +02:00
def start_reconnect_task(server, peer_info_arg, log, auth):
2020-05-20 21:44:05 +02:00
"""
Start a background task that checks connection and reconnects periodically to a peer.
2020-05-20 21:44:05 +02:00
"""
2020-06-20 06:30:37 +02:00
peer_info = PeerInfo(socket.gethostbyname(peer_info_arg.host), peer_info_arg.port)
2020-05-20 21:44:05 +02:00
async def connection_check():
while True:
peer_retry = True
for connection in server.global_connections.get_connections():
2020-06-20 06:30:37 +02:00
if (
connection.get_peer_info() == peer_info
or connection.get_peer_info() == peer_info_arg
):
2020-05-20 21:44:05 +02:00
peer_retry = False
if peer_retry:
log.info(f"Reconnecting to peer {peer_info}")
2020-07-09 14:03:59 +02:00
try:
await server.start_client(peer_info, None, auth=auth)
except Exception as e:
log.warning(f"Failed to connect to {peer_info} {e}")
await asyncio.sleep(3)
2020-05-20 21:44:05 +02:00
return asyncio.create_task(connection_check())