Compare commits
3 Commits
5337b0aba4
...
4f3da58a60
Author | SHA1 | Date | |
---|---|---|---|
![]() |
4f3da58a60 | ||
![]() |
1a7ce7d386 | ||
![]() |
44f6b90777 |
@ -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)
|
||||
onionrplugins.events.event(
|
||||
'bootstrap', data={'peer_set': peer_set, 'callback': connect_peer})
|
||||
for _ in range(2):
|
||||
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)
|
||||
|
||||
|
||||
|
@ -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}")
|
||||
|
@ -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()
|
||||
await writer.drain()
|
||||
writer.close()
|
||||
|
||||
async def main():
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user