Implemented Host that includes a routing system. Explicitly separating different Host types as in Go implementation

This commit is contained in:
Aratz M. Lasa
2019-10-14 00:29:28 +02:00
parent 00f83a3694
commit 3f24b015ab
4 changed files with 47 additions and 20 deletions

View File

@ -8,7 +8,6 @@ from libp2p.network.connection.net_connection_interface import INetConn
from libp2p.peer.id import ID
from libp2p.peer.peerstore import PeerStoreError
from libp2p.peer.peerstore_interface import IPeerStore
from libp2p.routing.interfaces import IPeerRouting
from libp2p.stream_muxer.abc import IMuxedConn
from libp2p.transport.exceptions import (
MuxerUpgradeFailure,
@ -36,7 +35,6 @@ class Swarm(INetwork):
peerstore: IPeerStore
upgrader: TransportUpgrader
transport: ITransport
router: IPeerRouting
# TODO: Connection and `peer_id` are 1-1 mapping in our implementation,
# whereas in Go one `peer_id` may point to multiple connections.
connections: Dict[ID, INetConn]
@ -51,13 +49,11 @@ class Swarm(INetwork):
peerstore: IPeerStore,
upgrader: TransportUpgrader,
transport: ITransport,
router: IPeerRouting,
):
self.self_id = peer_id
self.peerstore = peerstore
self.upgrader = upgrader
self.transport = transport
self.router = router
self.connections = dict()
self.listeners = dict()
@ -96,10 +92,7 @@ class Swarm(INetwork):
if not addrs:
raise SwarmException(f"No known addresses to peer {peer_id}")
if not self.router:
multiaddr = addrs[0]
else:
multiaddr = self.router.find_peer(peer_id)
multiaddr = addrs[0]
# Dial peer (connection to peer does not yet exist)
# Transport dials peer (gets back a raw conn)
try:
@ -232,9 +225,6 @@ class Swarm(INetwork):
# No maddr succeeded
return False
def add_router(self, router: IPeerRouting) -> None:
self.router = router
async def close(self) -> None:
# TODO: Prevent from new listeners and conns being added.
# Reference: https://github.com/libp2p/go-libp2p-swarm/blob/8be680aef8dea0a4497283f2f98470c2aeae6b65/swarm.go#L124-L134 # noqa: E501