~certify-web-dev/twisted/certify-staging

« back to all changes in this revision

Viewing changes to doc/howto/tutorial/listings/finger/finger12.tac

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2010-01-02 19:38:17 UTC
  • mfrom: (2.2.4 sid)
  • Revision ID: james.westby@ubuntu.com-20100102193817-jphp464ppwh7dulg
Tags: 9.0.0-1
* python-twisted: Depend on the python-twisted-* 9.0 packages.
* python-twisted: Depend on python-zope.interface only. Closes: #557781.

Show diffs side-by-side

added added

removed removed

Lines of Context:
2
2
from twisted.application import internet, service
3
3
from twisted.internet import protocol, reactor, defer
4
4
from twisted.protocols import basic
 
5
 
5
6
class FingerProtocol(basic.LineReceiver):
6
7
    def lineReceived(self, user):
7
 
        self.factory.getUser(user
8
 
        ).addErrback(lambda _: "Internal error in server"
9
 
        ).addCallback(lambda m:
10
 
                      (self.transport.write(m+"\r\n"),
11
 
                       self.transport.loseConnection()))
 
8
        d = self.factory.getUser(user)
 
9
 
 
10
        def onError(err):
 
11
            return 'Internal error in server'
 
12
        d.addErrback(onError)
 
13
 
 
14
        def writeResponse(message):
 
15
            self.transport.write(message + '\r\n')
 
16
            self.transport.loseConnection()
 
17
        d.addCallback(writeResponse)
12
18
 
13
19
class FingerFactory(protocol.ServerFactory):
14
20
    protocol = FingerProtocol
15
 
    def __init__(self, **kwargs): self.users = kwargs
 
21
 
 
22
    def __init__(self, **kwargs):
 
23
        self.users = kwargs
 
24
 
16
25
    def getUser(self, user):
17
26
        return defer.succeed(self.users.get(user, "No such user"))
18
27
    
19
28
class FingerSetterProtocol(basic.LineReceiver):
20
 
    def connectionMade(self): self.lines = []
21
 
    def lineReceived(self, line): self.lines.append(line)
 
29
    def connectionMade(self):
 
30
        self.lines = []
 
31
 
 
32
    def lineReceived(self, line):
 
33
        self.lines.append(line)
 
34
 
22
35
    def connectionLost(self, reason):
23
 
        self.factory.setUser(*self.lines[:2])
24
 
        # first line: user    second line: status
 
36
        user = self.lines[0]
 
37
        status = self.lines[1]
 
38
        self.factory.setUser(user, status)
25
39
        
26
40
class FingerSetterFactory(protocol.ServerFactory):
27
41
    protocol = FingerSetterProtocol
28
 
    def __init__(self, ff): self.setUser = ff.users.__setitem__
 
42
 
 
43
    def __init__(self, fingerFactory):
 
44
        self.fingerFactory = fingerFactory
 
45
 
 
46
    def setUser(self, user, status):
 
47
        self.fingerFactory.users[user] = status
29
48
 
30
49
ff = FingerFactory(moshez='Happy and well')
31
50
fsf = FingerSetterFactory(ff)