text: #!/usr/bin/env python
  
  # Copyright (c) Twisted Matrix Laboratories.
  # See LICENSE for details.
  
  
  from twisted.internet import reactor
  from twisted.python import log
  from twisted.spread import jelly, pb
  
  
  class LilyPond:
      def setStuff(self, color, numFrogs):
          self.color = color
          self.numFrogs = numFrogs
  
      def countFrogs(self):
          print("%d frogs" % self.numFrogs)
  
  
  class CopyPond(LilyPond, pb.Copyable):
      pass
  
  
  class Sender:
      def __init__(self, pond):
          self.pond = pond
  
      def got_obj(self, remote):
          self.remote = remote
          d = remote.callRemote("takePond", self.pond)
          d.addCallback(self.ok).addErrback(self.notOk)
  
      def ok(self, response):
          print("pond arrived", response)
          reactor.stop()
  
      def notOk(self, failure):
          print("error during takePond:")
          if failure.type == jelly.InsecureJelly:
              print(" InsecureJelly")
          else:
              print(failure)
          reactor.stop()
          return None
  
  
  def main():
      from copy_sender import CopyPond  # so it's not __main__.CopyPond
  
      pond = CopyPond()
      pond.setStuff("green", 7)
      pond.countFrogs()
      # class name:
      print(".".join([pond.__class__.__module__, pond.__class__.__name__]))
  
      sender = Sender(pond)
      factory = pb.PBClientFactory()
      reactor.connectTCP("localhost", 8800, factory)
      deferred = factory.getRootObject()
      deferred.addCallback(sender.got_obj)
      reactor.run()
  
  
  if __name__ == "__main__":
      main()
  