~ntt-pf-lab/nova/monkey_patch_notification

« back to all changes in this revision

Viewing changes to vendor/Twisted-10.0.0/doc/core/howto/tutorial/listings/finger/finger13.tac

  • Committer: Jesse Andrews
  • Date: 2010-05-28 06:05:26 UTC
  • Revision ID: git-v1:bf6e6e718cdc7488e2da87b21e258ccc065fe499
initial commit

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Fix asymmetry
 
2
from twisted.application import internet, service
 
3
from twisted.internet import protocol, reactor, defer
 
4
from twisted.protocols import basic
 
5
 
 
6
class FingerProtocol(basic.LineReceiver):
 
7
    def lineReceived(self, user):
 
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)
 
18
 
 
19
class FingerSetterProtocol(basic.LineReceiver):
 
20
    def connectionMade(self):
 
21
        self.lines = []
 
22
 
 
23
    def lineReceived(self, line):
 
24
        self.lines.append(line)
 
25
 
 
26
    def connectionLost(self,reason):
 
27
        user = self.lines[0]
 
28
        status = self.lines[1]
 
29
        self.factory.setUser(user, status)
 
30
 
 
31
class FingerService(service.Service):
 
32
    def __init__(self, **kwargs):
 
33
        self.users = kwargs
 
34
 
 
35
    def getUser(self, user):
 
36
        return defer.succeed(self.users.get(user, "No such user"))
 
37
 
 
38
    def setUser(self, user, status):
 
39
        self.users[user] = status
 
40
 
 
41
    def getFingerFactory(self):
 
42
        f = protocol.ServerFactory()
 
43
        f.protocol = FingerProtocol
 
44
        f.getUser = self.getUser
 
45
        return f
 
46
 
 
47
    def getFingerSetterFactory(self):
 
48
        f = protocol.ServerFactory()
 
49
        f.protocol = FingerSetterProtocol
 
50
        f.setUser = self.setUser
 
51
        return f
 
52
 
 
53
application = service.Application('finger', uid=1, gid=1)
 
54
f = FingerService(moshez='Happy and well')
 
55
serviceCollection = service.IServiceCollection(application)
 
56
internet.TCPServer(79,f.getFingerFactory()
 
57
                   ).setServiceParent(serviceCollection)
 
58
internet.TCPServer(1079,f.getFingerSetterFactory()
 
59
                   ).setServiceParent(serviceCollection)