Initial import to Tizen
[profile/ivi/python-twisted.git] / doc / core / howto / tutorial / listings / finger / finger13.tac
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)