84 lines
2.5 KiB
Python
84 lines
2.5 KiB
Python
![]() |
# -*- test-case-name: twisted.test.test_strports -*-
|
||
|
# Copyright (c) Twisted Matrix Laboratories.
|
||
|
# See LICENSE for details.
|
||
|
|
||
|
"""
|
||
|
Construct listening port services from a simple string description.
|
||
|
|
||
|
@see: L{twisted.internet.endpoints.serverFromString}
|
||
|
@see: L{twisted.internet.endpoints.clientFromString}
|
||
|
"""
|
||
|
from typing import Optional, cast
|
||
|
|
||
|
from twisted.application.internet import StreamServerEndpointService
|
||
|
from twisted.internet import endpoints, interfaces
|
||
|
|
||
|
|
||
|
def _getReactor() -> interfaces.IReactorCore:
|
||
|
from twisted.internet import reactor
|
||
|
|
||
|
return cast(interfaces.IReactorCore, reactor)
|
||
|
|
||
|
|
||
|
def service(
|
||
|
description: str,
|
||
|
factory: interfaces.IProtocolFactory,
|
||
|
reactor: Optional[interfaces.IReactorCore] = None,
|
||
|
) -> StreamServerEndpointService:
|
||
|
"""
|
||
|
Return the service corresponding to a description.
|
||
|
|
||
|
@param description: The description of the listening port, in the syntax
|
||
|
described by L{twisted.internet.endpoints.serverFromString}.
|
||
|
@type description: C{str}
|
||
|
|
||
|
@param factory: The protocol factory which will build protocols for
|
||
|
connections to this service.
|
||
|
@type factory: L{twisted.internet.interfaces.IProtocolFactory}
|
||
|
|
||
|
@rtype: C{twisted.application.service.IService}
|
||
|
@return: the service corresponding to a description of a reliable stream
|
||
|
server.
|
||
|
|
||
|
@see: L{twisted.internet.endpoints.serverFromString}
|
||
|
"""
|
||
|
if reactor is None:
|
||
|
reactor = _getReactor()
|
||
|
|
||
|
svc = StreamServerEndpointService(
|
||
|
endpoints.serverFromString(reactor, description), factory
|
||
|
)
|
||
|
svc._raiseSynchronously = True
|
||
|
return svc
|
||
|
|
||
|
|
||
|
def listen(
|
||
|
description: str, factory: interfaces.IProtocolFactory
|
||
|
) -> interfaces.IListeningPort:
|
||
|
"""
|
||
|
Listen on a port corresponding to a description.
|
||
|
|
||
|
@param description: The description of the connecting port, in the syntax
|
||
|
described by L{twisted.internet.endpoints.serverFromString}.
|
||
|
@type description: L{str}
|
||
|
|
||
|
@param factory: The protocol factory which will build protocols on
|
||
|
connection.
|
||
|
@type factory: L{twisted.internet.interfaces.IProtocolFactory}
|
||
|
|
||
|
@rtype: L{twisted.internet.interfaces.IListeningPort}
|
||
|
@return: the port corresponding to a description of a reliable virtual
|
||
|
circuit server.
|
||
|
|
||
|
@see: L{twisted.internet.endpoints.serverFromString}
|
||
|
"""
|
||
|
from twisted.internet import reactor
|
||
|
|
||
|
name, args, kw = endpoints._parseServer(description, factory)
|
||
|
return cast(
|
||
|
interfaces.IListeningPort, getattr(reactor, "listen" + name)(*args, **kw)
|
||
|
)
|
||
|
|
||
|
|
||
|
__all__ = ["service", "listen"]
|