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 typing import TYPE_CHECKING, Set
from os import urandom
@ -10,6 +11,7 @@ if TYPE_CHECKING:
from onionrthreads import add_onionr_thread
import onionrplugins
import logger
from .connectpeer import connect_peer
from .client import gossip_client
@ -44,8 +46,18 @@ def start_gossip_threads(
add_onionr_thread(
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)
for _ in range(2):
onionrplugins.events.event(
'bootstrap', data={'peer_set': peer_set, 'callback': connect_peer})
'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
def connect_peer(peer_set, peer):
if peer in peer_set:
return
try:
peer.get_socket()
s = peer.get_socket()
except Exception:
logger.warn(f"Could not connect to {peer.transport_address}")
else:
s.sendall(command_to_byte(GossipCommands.CLOSE))
s.close()
peer_set.add(peer)
logger.info(f"connected to {peer.transport_address}")

View File

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