Ticket #6217: pbecho.py

File pbecho.py, 1.6 KB (added by BrianMatthews, 16 months ago)
Line 
1
2# Copyright (c) 2001-2006 Twisted Matrix Laboratories.
3# See LICENSE for details.
4import sys
5from zope.interface import implements
6from twisted.internet import iocpreactor
7iocpreactor.install()
8
9from twisted.spread import pb
10from twisted.cred.portal import IRealm
11
12class SimplePerspective(pb.Avatar):
13
14    def perspective_echo(self, text):
15        print 'echoing',text
16        return text
17
18    def perspective_transfer(self, data, msg):
19        print 'Transfer', data['description'], msg
20        print 'Samples ', len(data['values'])
21        return msg
22
23    def logout(self):
24        print self, "logged out"
25        reactor.callLater(10, reactor.stop)
26
27
28class SimpleRealm:
29    implements(IRealm)
30
31    def requestAvatar(self, avatarId, mind, *interfaces):
32        if pb.IPerspective in interfaces:
33            avatar = SimplePerspective()
34
35            return pb.IPerspective, avatar, avatar.logout
36        else:
37            raise NotImplementedError("no interface")
38
39class MyPBFactory(pb.PBServerFactory):
40   
41    def __init__(self, root):
42        pb.PBServerFactory.__init__(self, root)
43
44    def clientConnectionMade(self, broker):       
45        broker.transport.setTcpNoDelay(1)
46       
47if __name__ == '__main__':
48    from twisted.internet import reactor
49    from twisted.cred.portal import Portal
50    from twisted.cred.checkers import InMemoryUsernamePasswordDatabaseDontUse
51    portal = Portal(SimpleRealm())
52    checker = InMemoryUsernamePasswordDatabaseDontUse()
53    checker.addUser("guest", "guest")
54    portal.registerChecker(checker)
55    reactor.listenTCP(pb.portno, MyPBFactory(portal))
56    reactor.run()