#!/usr/bin/perl -w use CORBA::ORBit idl => [ qw(Account.idl) ]; use Error qw(:try); use strict; # CORBA::ORBit::debug_wait; # open IOR, "/home/otaylor/devel/corba-mico-nofixed/ir.ref"; # my $ior = ; # close IOR; # unshift @ARGV, "--ORBIfaceRepoIOR" => $ior; my $orb = CORBA::ORB_init("orbit-local-orb"); open IOR, "account.ref"; my $ior = ; close IOR; my $account = $orb->string_to_object($ior); if (!$account->_is_a ("IDL:Account/BaseAccount:1.0")) { die ("Account isn't a BaseAccount!"); } for (my $i=0;$i<0;$i++) { $account->deposit( 1 ); } $account->deposit( 100 ); $account->deposit( 100 ); $account->deposit( 100 ); $account->deposit( 100 ); $account->deposit( 100 / 3); $account->withdraw( 240 ); $account->withdraw( 10 ); print "Balance is ".$account->balance."\n"; my $prefs = $account->_get_prefs; print "Favorite color is ",$prefs->{favorite_color},"\n"; print "Lottery numbers are ", join(" ", @{$prefs->{lottery_numbers}}),"\n"; print "Nickname is ",$prefs->{nickname},"\n"; $account->set_pref ( [ 'pt_color', 'chartreuse', ] ); $account->set_pref ( [ 'pt_nickname', 'Grumpy', ] ); $account->_set_appearance ( [ map { [ split // ] } split /\n/, <<'FACE' ] ); /****\ ; ; [ O O ] l \ l ; -- ; ;;;; FACE for (@{$account->_get_appearance}) { print join("",@$_),"\n"; } print "Favorite color is now ",$account->get_pref('pt_color')->[1],"\n"; print "As an any: favorite color is now ", $account->get_pref_any('pt_color')->value,"\n"; print "As an any: nickname is now ", $account->get_pref_any('pt_nickname')->value,"\n"; # # Test LongLong marshalling # sub commify # I forget how to do this more efficiently and simply :-) { my $str = shift; $str =~ s/(\d)(?=(?:\d\d\d)+(?:$|\D))/$1,/g; $str; } my $amount = '1000000000000'; my $double_amount = '2000000000000'; my $test_amount = $account->add ($amount, $amount); printf "2 * %s pennies = %s pennies\n", commify($amount), commify($test_amount); if ("$test_amount" ne "$double_amount") { die "Incorrect result from addition call!\n"; } print "Withdrawing \$100,000\n"; try { $account->withdraw (100_000); } catch Account::Account::InsufficientFunds with { my $e = shift; print STDERR "Oops. I don't have that much money\n"; print STDERR " (I need $e->{overdraft} more)\n"; }; my $counter = $account->counter(); $counter = $account->echo_object ($counter); print join(" ", map { $counter->next } (1..10)), "\n"; $counter->destroy(); try { $counter->next; } catch CORBA::Exception with { print "Caught $_[0], while counting with a destroyed counter\n"; }; # Try getting some typecodes my $tc1 = new CORBA::TypeCode "IDL:Account/Account/Preferences:1.0"; my $tc2 = new CORBA::TypeCode "IDL:Account/Amounts:1.0"; my $tc3 = new CORBA::TypeCode "IDL:omg.org/CORBA/Double:1.0"; print "Successful completion\n"