2 from twisted.application import internet, service
3 from twisted.internet import protocol, reactor, defer
4 from twisted.protocols import basic
6 class FingerProtocol(basic.LineReceiver):
7 def lineReceived(self, user):
8 d = self.factory.getUser(user)
11 return 'Internal error in server'
14 def writeResponse(message):
15 self.transport.write(message + '\r\n')
16 self.transport.loseConnection()
17 d.addCallback(writeResponse)
19 class FingerSetterProtocol(basic.LineReceiver):
20 def connectionMade(self):
23 def lineReceived(self, line):
24 self.lines.append(line)
26 def connectionLost(self,reason):
28 status = self.lines[1]
29 self.factory.setUser(user, status)
31 class FingerService(service.Service):
32 def __init__(self, **kwargs):
35 def getUser(self, user):
36 return defer.succeed(self.users.get(user, "No such user"))
38 def setUser(self, user, status):
39 self.users[user] = status
41 def getFingerFactory(self):
42 f = protocol.ServerFactory()
43 f.protocol = FingerProtocol
44 f.getUser = self.getUser
47 def getFingerSetterFactory(self):
48 f = protocol.ServerFactory()
49 f.protocol = FingerSetterProtocol
50 f.setUser = self.setUser
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)