Compare commits

...

3 Commits

3 changed files with 27 additions and 8 deletions

View File

@ -1,3 +1,4 @@
import threading
from time import sleep from time import sleep
from typing import TYPE_CHECKING, Set from typing import TYPE_CHECKING, Set
from os import urandom from os import urandom
@ -10,6 +11,7 @@ if TYPE_CHECKING:
from onionrthreads import add_onionr_thread from onionrthreads import add_onionr_thread
import onionrplugins import onionrplugins
import logger
from .connectpeer import connect_peer from .connectpeer import connect_peer
from .client import gossip_client from .client import gossip_client
@ -44,8 +46,18 @@ def start_gossip_threads(
add_onionr_thread( add_onionr_thread(
gossip_server, 1, peer_set, block_queue, seed, initial_sleep=0.2) gossip_server, 1, peer_set, block_queue, seed, initial_sleep=0.2)
add_onionr_thread(
gossip_client, 1, peer_set, block_queue, seed, initial_sleep=0) threading.Thread(
target=gossip_client,
args=[peer_set, block_queue, seed], daemon=True).start()
onionrplugins.events.event('gossip_start', data=peer_set, threaded=True) onionrplugins.events.event('gossip_start', data=peer_set, threaded=True)
onionrplugins.events.event( for _ in range(2):
'bootstrap', data={'peer_set': peer_set, 'callback': connect_peer}) onionrplugins.events.event(
'bootstrap', data={'peer_set': peer_set, 'callback': connect_peer},
threaded=False)
sleep(60)
if len(peer_set):
return
logger.error("Could not connect to any peers :(", terminal=True)

View File

@ -1,11 +1,16 @@
from gossip.commands import GossipCommands, command_to_byte
import logger import logger
def connect_peer(peer_set, peer): def connect_peer(peer_set, peer):
if peer in peer_set:
return
try: try:
peer.get_socket() s = peer.get_socket()
except Exception: except Exception:
logger.warn(f"Could not connect to {peer.transport_address}") logger.warn(f"Could not connect to {peer.transport_address}")
else: else:
s.sendall(command_to_byte(GossipCommands.CLOSE))
s.close()
peer_set.add(peer) peer_set.add(peer)
logger.info(f"connected to {peer.transport_address}") logger.info(f"connected to {peer.transport_address}")

View File

@ -39,7 +39,7 @@ def gossip_server(
try: try:
cmd = await asyncio.wait_for(reader.read(1), 60) cmd = await asyncio.wait_for(reader.read(1), 60)
except asyncio.exceptions.CancelledError: except asyncio.exceptions.CancelledError:
writer.close() break
cmd = int.from_bytes(cmd, 'big') cmd = int.from_bytes(cmd, 'big')
if cmd == b'' or cmd == 0: if cmd == b'' or cmd == 0:
@ -48,7 +48,7 @@ def gossip_server(
case GossipCommands.PING: case GossipCommands.PING:
writer.write(b'PONG') writer.write(b'PONG')
case GossipCommands.CLOSE: case GossipCommands.CLOSE:
writer.close() pass
case GossipCommands.ANNOUNCE: case GossipCommands.ANNOUNCE:
async def _read_announce(): async def _read_announce():
address = await reader.read(56) address = await reader.read(56)
@ -60,8 +60,10 @@ def gossip_server(
threaded=True) threaded=True)
writer.write(int(1).to_bytes(1, 'big')) writer.write(int(1).to_bytes(1, 'big'))
await asyncio.wait_for(_read_announce(), 10) await asyncio.wait_for(_read_announce(), 10)
break
await writer.drain() await writer.drain()
writer.close()
async def main(): async def main():