2024-07-11 14:02:10 +03:00

69 lines
1.7 KiB
Python

import sys
import trio
import multiaddr
from network import DANetwork
from subnet import calculate_subnets
from libp2p.peer.peerinfo import (
info_from_p2p_addr,
)
default_nodes = 32
async def run_network():
if len(sys.argv) == 1:
num_nodes = default_nodes
else:
num_nodes = int(sys.argv[1])
net = DANetwork(num_nodes)
async with trio.open_nursery() as nursery:
nursery.start_soon(net.build, nursery)
nursery.start_soon(run_subnets,net, num_nodes)
await trio.sleep_forever()
async def run_subnets(net, num_nodes):
while len(net.get_nodes()) != num_nodes:
print("nodes not ready yet")
await trio.sleep(1)
print("nodes ready")
nodes = net.get_nodes()
subnets = calculate_subnets(nodes)
print()
print("By subnets: ")
for subnet in subnets:
print("subnet: {} - ".format(subnet), end="")
for n in subnets[subnet]:
print(n.get_id().pretty()[:16], end=", ")
print()
print()
print()
print()
print("Establishing connections...")
for subnet in subnets:
for n in subnets[subnet]:
for nn in subnets[subnet]:
if nn.get_id() == n.get_id():
continue
remote_id = nn.get_id().pretty()
remote_port = nn.get_port()
addr = "/ip4/127.0.0.1/tcp/{}/p2p/{}/".format(remote_port,remote_id)
remote_addr = multiaddr.Multiaddr(addr)
print("{} connecting to {}...".format(n.get_id(), addr))
remote = info_from_p2p_addr(remote_addr)
await n.net_iface().connect(remote)
print()
if __name__ == "__main__":
trio.run(run_network)