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
|
|
|
"""
|
2020-06-03 06:13:01 +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}")
|
2020-06-17 01:46:51 +02:00
|
|
|
await asyncio.sleep(3)
|
2020-05-20 21:44:05 +02:00
|
|
|
|
|
|
|
return asyncio.create_task(connection_check())
|