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)