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

« back to all changes in this revision

Viewing changes to doc/howto/tutorial/listings/finger/finger14.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:
5
5
 
6
6
class FingerProtocol(basic.LineReceiver):
7
7
    def lineReceived(self, user):
8
 
        self.factory.getUser(user
9
 
        ).addErrback(lambda _: "Internal error in server"
10
 
        ).addCallback(lambda m:
11
 
                      (self.transport.write(m+"\r\n"),
12
 
                       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)
13
18
 
14
19
class FingerService(service.Service):
15
20
    def __init__(self, filename):
16
21
        self.users = {}
17
22
        self.filename = filename
 
23
        self._read()
 
24
 
18
25
    def _read(self):
19
26
        for line in file(self.filename):
20
27
            user, status = line.split(':', 1)
22
29
            status = status.strip()
23
30
            self.users[user] = status
24
31
        self.call = reactor.callLater(30, self._read)
 
32
 
25
33
    def startService(self):
26
34
        self._read()
27
35
        service.Service.startService(self)
 
36
 
28
37
    def stopService(self):
29
38
        service.Service.stopService(self)
30
39
        self.call.cancel()
 
40
 
31
41
    def getUser(self, user):
32
42
        return defer.succeed(self.users.get(user, "No such user"))
 
43
 
33
44
    def getFingerFactory(self):
34
45
        f = protocol.ServerFactory()
35
 
        f.protocol, f.getUser = FingerProtocol, self.getUser
 
46
        f.protocol = FingerProtocol
 
47
        f.getUser = self.getUser
36
48
        return f
37
49
 
38
50
application = service.Application('finger', uid=1, gid=1)
40
52
finger = internet.TCPServer(79, f.getFingerFactory())
41
53
 
42
54
finger.setServiceParent(service.IServiceCollection(application))
43
 
f.setServiceParent(service.IServiceCollection(application)) 
 
55
f.setServiceParent(service.IServiceCollection(application))