qmsk/net/transport/service.py
author Tero Marttila <terom@fixme.fi>
Sat, 26 Sep 2009 16:39:20 +0300
changeset 50 da394bb715af
parent 28 020c89baaa33
permissions -rw-r--r--
try and keep lib.event2.event objects alive (via self-ref) while pending
28
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
"""
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
    Abstract Service interface
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
"""
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
class ServiceError (Exception) :
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
    """
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
        Service-related error.
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
    """
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
class Service (object) :
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    11
    """
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    12
        A Service listens for incoming connections, handing those connections off as separate objects.
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    13
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    14
        This is an abstract base class that is further impemented by e.g. TCP or SSL.
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
    """
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
    def __init__ (self, endpoint) :
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
        """
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
            Listen on the given local endpoint.
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
                endpoint    - the local Endpoint to provide this service on.
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
        """
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    23
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
        raise NotImplementedError()
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    26
    def accept (self, cls=None) :
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
        """
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
            Accept and return a new Transport object representing a connected remote Client.
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
                cls         - optional transport-specific type to use for the new connection.
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
        """
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
        raise NotImplementedError()
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
    
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
    def close (self) :
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
        """
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
            Explicitly shut down this Service, closing any underlying resources and refusing any new connections.
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
            This will happen implicitly if the Service is destroyed, this is just the explicit interface.
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    40
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    41
            This invalidates this Service object for future use.
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    42
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    43
            This may, in theory, raise an error, which would be supressed if this Service were destroyed.
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
        """
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    45
        
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    46
        raise NotImplementedError()
020c89baaa33 [transport] initial TCP implementation
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47