mirror of
https://github.com/varun-r-mallya/py-libp2p.git
synced 2026-02-12 16:10:57 +00:00
feat: attached mdns instance with host
This commit is contained in:
@ -269,12 +269,8 @@ def new_host(
|
|||||||
listen_addrs=listen_addrs,
|
listen_addrs=listen_addrs,
|
||||||
)
|
)
|
||||||
|
|
||||||
if enable_mDNS:
|
|
||||||
mdns = MDNSDiscovery(swarm)
|
|
||||||
mdns.start()
|
|
||||||
|
|
||||||
if disc_opt is not None:
|
if disc_opt is not None:
|
||||||
return RoutedHost(swarm, disc_opt)
|
return RoutedHost(swarm, disc_opt, enable_mDNS)
|
||||||
return BasicHost(swarm)
|
return BasicHost(swarm, enable_mDNS)
|
||||||
|
|
||||||
__version__ = __version("libp2p")
|
__version__ = __version("libp2p")
|
||||||
|
|||||||
@ -36,6 +36,7 @@ class PeerListener(ServiceListener):
|
|||||||
def add_service(self, zc: Zeroconf, type_: str, name: str) -> None:
|
def add_service(self, zc: Zeroconf, type_: str, name: str) -> None:
|
||||||
if name == self.service_name:
|
if name == self.service_name:
|
||||||
return
|
return
|
||||||
|
logger.debug(f"Adding service: {name}")
|
||||||
info = zc.get_service_info(type_, name, timeout=5000)
|
info = zc.get_service_info(type_, name, timeout=5000)
|
||||||
if not info:
|
if not info:
|
||||||
return
|
return
|
||||||
@ -47,6 +48,9 @@ class PeerListener(ServiceListener):
|
|||||||
logger.debug("Discovered Peer:", peer_info.peer_id)
|
logger.debug("Discovered Peer:", peer_info.peer_id)
|
||||||
|
|
||||||
def remove_service(self, zc: Zeroconf, type_: str, name: str) -> None:
|
def remove_service(self, zc: Zeroconf, type_: str, name: str) -> None:
|
||||||
|
if name == self.service_name:
|
||||||
|
return
|
||||||
|
logger.debug(f"Removing service: {name}")
|
||||||
peer_id = self.discovered_services.pop(name)
|
peer_id = self.discovered_services.pop(name)
|
||||||
self.peerstore.clear_addrs(peer_id)
|
self.peerstore.clear_addrs(peer_id)
|
||||||
logger.debug(f"Removed Peer: {peer_id}")
|
logger.debug(f"Removed Peer: {peer_id}")
|
||||||
|
|||||||
@ -68,5 +68,6 @@ class MDNSDiscovery:
|
|||||||
|
|
||||||
def stop(self) -> None:
|
def stop(self) -> None:
|
||||||
"""Unregister this peer and clean up zeroconf resources."""
|
"""Unregister this peer and clean up zeroconf resources."""
|
||||||
|
logger.debug("Stopping mDNS discovery")
|
||||||
self.broadcaster.unregister()
|
self.broadcaster.unregister()
|
||||||
self.zeroconf.close()
|
self.zeroconf.close()
|
||||||
|
|||||||
@ -29,6 +29,7 @@ from libp2p.custom_types import (
|
|||||||
StreamHandlerFn,
|
StreamHandlerFn,
|
||||||
TProtocol,
|
TProtocol,
|
||||||
)
|
)
|
||||||
|
from libp2p.discovery.mdns.mdns import MDNSDiscovery
|
||||||
from libp2p.host.defaults import (
|
from libp2p.host.defaults import (
|
||||||
get_default_protocols,
|
get_default_protocols,
|
||||||
)
|
)
|
||||||
@ -89,6 +90,7 @@ class BasicHost(IHost):
|
|||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
network: INetworkService,
|
network: INetworkService,
|
||||||
|
enable_mDNS: bool = False,
|
||||||
default_protocols: Optional["OrderedDict[TProtocol, StreamHandlerFn]"] = None,
|
default_protocols: Optional["OrderedDict[TProtocol, StreamHandlerFn]"] = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
self._network = network
|
self._network = network
|
||||||
@ -98,6 +100,8 @@ class BasicHost(IHost):
|
|||||||
default_protocols = default_protocols or get_default_protocols(self)
|
default_protocols = default_protocols or get_default_protocols(self)
|
||||||
self.multiselect = Multiselect(dict(default_protocols.items()))
|
self.multiselect = Multiselect(dict(default_protocols.items()))
|
||||||
self.multiselect_client = MultiselectClient()
|
self.multiselect_client = MultiselectClient()
|
||||||
|
if enable_mDNS:
|
||||||
|
self.mDNS = MDNSDiscovery(network)
|
||||||
|
|
||||||
def get_id(self) -> ID:
|
def get_id(self) -> ID:
|
||||||
"""
|
"""
|
||||||
@ -162,7 +166,14 @@ class BasicHost(IHost):
|
|||||||
network = self.get_network()
|
network = self.get_network()
|
||||||
async with background_trio_service(network):
|
async with background_trio_service(network):
|
||||||
await network.listen(*listen_addrs)
|
await network.listen(*listen_addrs)
|
||||||
yield
|
if self.mDNS is not None:
|
||||||
|
logger.debug("Starting mDNS Discovery")
|
||||||
|
self.mDNS.start()
|
||||||
|
try:
|
||||||
|
yield
|
||||||
|
finally:
|
||||||
|
if self.mDNS is not None:
|
||||||
|
self.mDNS.stop()
|
||||||
|
|
||||||
return _run()
|
return _run()
|
||||||
|
|
||||||
|
|||||||
@ -18,8 +18,10 @@ from libp2p.peer.peerinfo import (
|
|||||||
class RoutedHost(BasicHost):
|
class RoutedHost(BasicHost):
|
||||||
_router: IPeerRouting
|
_router: IPeerRouting
|
||||||
|
|
||||||
def __init__(self, network: INetworkService, router: IPeerRouting):
|
def __init__(
|
||||||
super().__init__(network)
|
self, network: INetworkService, router: IPeerRouting, enable_mDNS: bool = False
|
||||||
|
):
|
||||||
|
super().__init__(network, enable_mDNS)
|
||||||
self._router = router
|
self._router = router
|
||||||
|
|
||||||
async def connect(self, peer_info: PeerInfo) -> None:
|
async def connect(self, peer_info: PeerInfo) -> None:
|
||||||
|
|||||||
Reference in New Issue
Block a user