~justin-fathomdb/nova/justinsb-openstack-api-volumes

« back to all changes in this revision

Viewing changes to vendor/Twisted-10.0.0/doc/core/howto/tutorial/listings/finger/finger12.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
# But let's try and fix setting away messages, shall we?
 
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 FingerFactory(protocol.ServerFactory):
 
20
    protocol = FingerProtocol
 
21
 
 
22
    def __init__(self, **kwargs):
 
23
        self.users = kwargs
 
24
 
 
25
    def getUser(self, user):
 
26
        return defer.succeed(self.users.get(user, "No such user"))
 
27
    
 
28
class FingerSetterProtocol(basic.LineReceiver):
 
29
    def connectionMade(self):
 
30
        self.lines = []
 
31
 
 
32
    def lineReceived(self, line):
 
33
        self.lines.append(line)
 
34
 
 
35
    def connectionLost(self, reason):
 
36
        user = self.lines[0]
 
37
        status = self.lines[1]
 
38
        self.factory.setUser(user, status)
 
39
        
 
40
class FingerSetterFactory(protocol.ServerFactory):
 
41
    protocol = FingerSetterProtocol
 
42
 
 
43
    def __init__(self, fingerFactory):
 
44
        self.fingerFactory = fingerFactory
 
45
 
 
46
    def setUser(self, user, status):
 
47
        self.fingerFactory.users[user] = status
 
48
 
 
49
ff = FingerFactory(moshez='Happy and well')
 
50
fsf = FingerSetterFactory(ff)
 
51
 
 
52
application = service.Application('finger', uid=1, gid=1)
 
53
serviceCollection = service.IServiceCollection(application)
 
54
internet.TCPServer(79,ff).setServiceParent(serviceCollection)
 
55
internet.TCPServer(1079,fsf).setServiceParent(serviceCollection)