summaryrefslogtreecommitdiff
path: root/doc/core/examples/pbecho.py
diff options
context:
space:
mode:
Diffstat (limited to 'doc/core/examples/pbecho.py')
-rw-r--r--doc/core/examples/pbecho.py51
1 files changed, 51 insertions, 0 deletions
diff --git a/doc/core/examples/pbecho.py b/doc/core/examples/pbecho.py
new file mode 100644
index 0000000..45df949
--- /dev/null
+++ b/doc/core/examples/pbecho.py
@@ -0,0 +1,51 @@
+# Copyright (c) Twisted Matrix Laboratories.
+# See LICENSE for details.
+
+if __name__ == '__main__':
+ # Avoid using any names defined in the "__main__" module.
+ from pbecho import main
+ raise SystemExit(main())
+
+from zope.interface import implements
+
+from twisted.spread import pb
+from twisted.cred.portal import IRealm
+
+class DefinedError(pb.Error):
+ pass
+
+
+class SimplePerspective(pb.Avatar):
+
+ def perspective_echo(self, text):
+ print 'echoing',text
+ return text
+
+ def perspective_error(self):
+ raise DefinedError("exception!")
+
+ def logout(self):
+ print self, "logged out"
+
+
+class SimpleRealm:
+ implements(IRealm)
+
+ def requestAvatar(self, avatarId, mind, *interfaces):
+ if pb.IPerspective in interfaces:
+ avatar = SimplePerspective()
+ return pb.IPerspective, avatar, avatar.logout
+ else:
+ raise NotImplementedError("no interface")
+
+
+def main():
+ from twisted.internet import reactor
+ from twisted.cred.portal import Portal
+ from twisted.cred.checkers import InMemoryUsernamePasswordDatabaseDontUse
+ portal = Portal(SimpleRealm())
+ checker = InMemoryUsernamePasswordDatabaseDontUse()
+ checker.addUser("guest", "guest")
+ portal.registerChecker(checker)
+ reactor.listenTCP(pb.portno, pb.PBServerFactory(portal))
+ reactor.run()