The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl
use strict;

use RPC::Lite::Client;

use Data::Dumper;

use BadPackage;

my $client = RPC::Lite::Client->new(
                                     {
                                       Transport  => 'TCP:Host=localhost,Port=10000',
                                       Serializer => 'XML',
                                     }
                                   );    
print "connected...\n";
print "GetSingatures: \n  " . Dumper($client->Request('system.GetSignatures')) . "\n\n";

print "GetSignature(add):\n  " . Dumper($client->Request('system.GetSignature', 'add')) . "\n\n";

print "GetSignature(MergeHashes):\n  " . Dumper($client->Request('system.GetSignature', 'MergeHashes')) . "\n\n";

my $val1   = 1;
my $val2   = 2;
my $result = $client->Request( 'add', $val1, $val2 );
print "add: \n  $val1\n  $val2\n  =\n  $result\n\n\n";

my $hash1 = { a => 1, b => 2, c => 214332 };
my $hash2 = { c => 3, d => [ 1, 2, 3 ], e => { z => 9, x => 8 }, f => [], g => {} };
my $hash = $client->Request( 'MergeHashes', $hash1, $hash2 );
print "MergeHashes: \n", Dumper($hash1), Dumper($hash2), Dumper($hash), "\n\n";

my $array1 = [ "word", "worth", "wooly", "antelope" ];
my $array2 = [ "blah", "yak", "foo", "worn" ];
my $array = $client->Request( 'MergeArrays', $array1, $array2 );
print "MergeArrays: \n", Dumper($array1), Dumper($array2), Dumper($array), "\n\n";

my $s_array = $client->Request( 'SortArray', $array );
print "SortArray: \n", Dumper($array), Dumper($s_array), "\n\n";

my $uptime = $client->Request( 'system.Uptime' );
print "Uptime:\n  $uptime\n\n";

my $requestCount = $client->Request( 'system.RequestCount' );
print "Request Count:\n  $requestCount\n\n";

my $systemRequestCount = $client->Request( 'system.SystemRequestCount' );
print "System Request Count:\n  $systemRequestCount\n\n";

my $undefValue = $client->Request('Undef');
print "Undef:\n  ", Dumper($undefValue), "\n\n";

my $undefArray = $client->Request('UndefArray');
print "UndefArray:\n  ", Dumper($undefArray), "\n\n";

my $mixedUndefArray = $client->Request('MixedUndefArray');
print "MixedUndefArray:\n  ", Dumper($mixedUndefArray), "\n\n";

my $mixedArray = $client->Request("MixedArray");
print "MixedArray:\n  ", Dumper($mixedArray), "\n\n";


my $badType = $client->Request( 'BadType' );
print "BadType: \n", Dumper($badType), "\n\n";

my $badArray = $client->Request( 'BadArray' );
print "BadArray: \n", Dumper($badArray), "\n\n";

my $badHash = $client->Request( 'BadHash' );
print "BadHash: \n", Dumper($badHash), "\n\n";

my $badNestedData = $client->Request( 'BadNestedData' );
print "BadNestedData: \n", Dumper($badNestedData), "\n\n";

my $badDataInCall = $client->Request('add', BadPackage->new());
print "BadDataInCall: \n", Dumper($badDataInCall), "\n\n";

my $badArrayInCall = $client->Request('add', [BadPackage->new(), BadPackage->new()]);
print "BadArrayInCall: \n", Dumper($badArrayInCall), "\n\n";

my $badHashInCall = $client->Request('add', { a => BadPackage->new(), b => BadPackage->new() });
print "BadHashInCall: \n", Dumper($badHashInCall), "\n\n";

my $bp = BadPackage->new();
$bp->{bp} = BadPackage->new();
my $badNestedDataInCall = $client->Request('add', $bp);
print "BadNestedDataInCall: ", Dumper($badNestedDataInCall), "\n\n";

print "Broken: sending as a notification.  You should see no output on the next line\n";
$client->Notify('Broken');
print "\n";

print "Broken: sending as a Request.  You should see an error message next, then nothing else:\n";
$client->Request('Broken');

print "\nERROR!  The previous call should have died and quit the script!\n";