コード例 #1
0
async def request_blob(loop: asyncio.BaseEventLoop, blob: 'AbstractBlob', address: str, tcp_port: int,
                       peer_connect_timeout: float, blob_download_timeout: float,
                       connected_transport: asyncio.Transport = None, connection_id: int = 0,
                       connection_manager: typing.Optional['ConnectionManager'] = None)\
        -> typing.Tuple[int, typing.Optional[asyncio.Transport]]:
    """
    Returns [<downloaded blob>, <keep connection>]
    """

    protocol = BlobExchangeClientProtocol(
        loop, blob_download_timeout, connection_manager
    )
    if connected_transport and not connected_transport.is_closing():
        connected_transport.set_protocol(protocol)
        protocol.transport = connected_transport
        log.debug("reusing connection for %s:%d", address, tcp_port)
    else:
        connected_transport = None
    try:
        if not connected_transport:
            await asyncio.wait_for(loop.create_connection(lambda: protocol, address, tcp_port),
                                   peer_connect_timeout, loop=loop)
        if blob.get_is_verified() or not blob.is_writeable():
            # file exists but not verified means someone is writing right now, give it time, come back later
            return 0, connected_transport
        return await protocol.download_blob(blob)
    except (asyncio.TimeoutError, ConnectionRefusedError, ConnectionAbortedError, OSError):
        return 0, None
コード例 #2
0
ファイル: client.py プロジェクト: ericludwig/lbry
async def request_blob(
        loop: asyncio.BaseEventLoop, blob: 'BlobFile',
        protocol: 'BlobExchangeClientProtocol', address: str, tcp_port: int,
        peer_connect_timeout: float) -> typing.Tuple[bool, bool]:
    """
    Returns [<downloaded blob>, <keep connection>]
    """
    if blob.get_is_verified():
        return False, True
    try:
        await asyncio.wait_for(loop.create_connection(lambda: protocol,
                                                      address, tcp_port),
                               peer_connect_timeout,
                               loop=loop)
        return await protocol.download_blob(blob)
    except (asyncio.TimeoutError, asyncio.CancelledError,
            ConnectionRefusedError, ConnectionAbortedError, OSError):
        return False, False
コード例 #3
0
ファイル: __init__.py プロジェクト: CyboLabs/Stratus
 def create_connection(cls, loop: asyncio.BaseEventLoop, **kwargs) -> types.coroutine:
     host = kwargs['host']
     port = kwargs['port']
     return loop.create_connection(lambda: cls(loop), host=host, port=port)