Add "default protocols" that all hosts have by default

This commit is contained in:
Alex Stokes 2019-09-24 17:19:22 -07:00
parent 73251a0c36
commit c92bade815
No known key found for this signature in database
GPG Key ID: 51CE1721B245C086
3 changed files with 20 additions and 5 deletions

View File

@ -1,8 +1,9 @@
import logging
from typing import List, Sequence
from typing import TYPE_CHECKING, List, Sequence
import multiaddr
from libp2p.host.defaults import DEFAULT_HOST_PROTOCOLS
from libp2p.host.exceptions import StreamFailure
from libp2p.network.network_interface import INetwork
from libp2p.network.stream.net_stream_interface import INetStream
@ -17,6 +18,9 @@ from libp2p.typing import StreamHandlerFn, TProtocol
from .host_interface import IHost
if TYPE_CHECKING:
from collections import OrderedDict
# Upon host creation, host takes in options,
# including the list of addresses on which to listen.
# Host then parses these options and delegates to its Network instance,
@ -38,12 +42,16 @@ class BasicHost(IHost):
multiselect: Multiselect
multiselect_client: MultiselectClient
def __init__(self, network: INetwork) -> None:
def __init__(
self,
network: INetwork,
default_protocols: "OrderedDict[TProtocol, StreamHandlerFn]" = DEFAULT_HOST_PROTOCOLS,
) -> None:
self._network = network
self._network.set_stream_handler(self._swarm_stream_handler)
self.peerstore = self._network.peerstore
# Protocol muxing
self.multiselect = Multiselect()
self.multiselect = Multiselect(default_protocols)
self.multiselect_client = MultiselectClient()
def get_id(self) -> ID:

7
libp2p/host/defaults.py Normal file
View File

@ -0,0 +1,7 @@
from collections import OrderedDict
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from libp2p.typing import TProtocol, StreamHandlerFn
DEFAULT_HOST_PROTOCOLS: "OrderedDict[TProtocol, StreamHandlerFn]" = OrderedDict()

View File

@ -19,8 +19,8 @@ class Multiselect(IMultiselectMuxer):
handlers: Dict[TProtocol, StreamHandlerFn]
def __init__(self) -> None:
self.handlers = {}
def __init__(self, default_handlers: Dict[TProtocol, StreamHandlerFn] = {}) -> None:
self.handlers = default_handlers
def add_handler(self, protocol: TProtocol, handler: StreamHandlerFn) -> None:
"""