def run(self, args): if len(args) > 1: print(self.appName() + ": too many arguments") return 1 factory = Printer.ValueFactory() self.communicator().addValueFactory(factory, Demo.Printer.ice_staticId()) adapter = self.communicator().createObjectAdapter("Value") adapter.add(InitialI(adapter), self.communicator().stringToIdentity("initial")) adapter.activate() self.communicator().waitForShutdown() return 0
def run(self, args): if len(args) > 1: print(self.appName() + ": too many arguments") return 1 initial = Demo.InitialPrx.checkedCast( self.communicator().propertyToProxy('Initial.Proxy')) if not initial: print(args[0] + ": invalid proxy") return 1 print('\n'\ "Let's first transfer a simple object, for a class without\n"\ "operations, and print its contents. No factory is required\n"\ "for this.\n"\ "[press enter]") sys.stdin.readline() simple = initial.getSimple() print("==> " + simple.message) print('\n'\ "Yes, this worked. Now let's try to transfer an object for a class\n"\ "with operations as type ::Demo::Printer, without installing a factory\n"\ "first. This should give us a `no factory' exception.\n"\ "[press enter]") sys.stdin.readline() try: printer, printerProxy = initial.getPrinter() print(args[0] + ": Did not get the expected NoValueFactoryException!") sys.exit(false) except Ice.NoValueFactoryException as ex: print("==>", ex) print('\n'\ "Yep, that's what we expected. Now let's try again, but with\n"\ "installing an appropriate factory first. If successful, we print\n"\ "the object's content.\n"\ "[press enter]") sys.stdin.readline() factory = Printer.ValueFactory() self.communicator().addValueFactory(factory, Demo.Printer.ice_staticId()) printer, printerProxy = initial.getPrinter() print("==> " + printer.message) print('\n'\ "Cool, it worked! Let's try calling the printBackwards() method\n"\ "on the object we just received locally.\n"\ "[press enter]") sys.stdin.readline() sys.stdout.write("==> ") sys.stdout.flush() printer.printBackwards() print('\n'\ "Now we call the same method, but on the remote object. Watch the\n"\ "server's output.\n"\ "[press enter]") sys.stdin.readline() printerProxy.printBackwards() print('\n'\ "Next, we transfer a derived object from the server as a base\n"\ "object. Since we haven't yet installed a factory for the derived\n"\ "class, the derived class (::Demo::DerivedPrinter) is sliced\n"\ "to its base class (::Demo::Printer).\n"\ "[press enter]") sys.stdin.readline() derivedAsBase = initial.getDerivedPrinter() print("==> The type ID of the received object is \"" + derivedAsBase.ice_id() + "\"") assert (derivedAsBase.ice_id() == Demo.Printer.ice_staticId()) print('\n'\ "Now we install a factory for the derived class, and try again.\n"\ "[press enter]") sys.stdin.readline() self.communicator().addValueFactory(factory, Demo.DerivedPrinter.ice_staticId()) derived = initial.getDerivedPrinter() print("==> The type ID of the received object is \"" + derived.ice_id() + "\"") print('\n'\ "Let's print the message contained in the derived object, and\n"\ "call the operation printUppercase() on the derived object\n"\ "locally.\n"\ "[press enter]") sys.stdin.readline() print("==> " + derived.derivedMessage) sys.stdout.write("==> ") sys.stdout.flush() derived.printUppercase() print('\n'\ "Now let's make sure that slice is preserved with [\"preserve-slice\"]\n"\ "metadata. We create a derived type on the client and pass it to the\n"\ "server, which does not have a factory for the derived type.\n"\ "[press enter]\n") sys.stdin.readline() clientp = Printer.ClientPrinterI() clientp.message = "a message 4 u" self.communicator().addValueFactory(factory, Demo.ClientPrinter.ice_staticId()) derivedAsBase = initial.updatePrinterMessage(clientp) assert (derivedAsBase.ice_id() == Demo.ClientPrinter.ice_staticId()) print("==> " + derivedAsBase.message) print('\n'\ "Finally, we try the same again, but instead of returning the\n"\ "derived object, we throw an exception containing the derived\n"\ "object.\n"\ "[press enter]") sys.stdin.readline() try: initial.throwDerivedPrinter() print(args[0] + "Did not get the expected DerivedPrinterException!") sys.exit(false) except Demo.DerivedPrinterException as ex: derived = ex.derived assert (derived) print("==> " + derived.derivedMessage) sys.stdout.write("==> ") sys.stdout.flush() derived.printUppercase() print('\n'\ "That's it for this demo. Have fun with Ice!") initial.shutdown() return 0