1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- # -*- 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"]
|