#!/var/bin/perl use warnings; use strict; use POE; use POE qw(Component::IKC::Client); use Data::Dumper::Simple; POE::Component::IKC::Client->spawn( port =>'12345', name=>"Client$$", on_connect=>\&create_sessions, ); sub create_sessions { POE::Session->create( inline_states => { _start => \&start, execute => \&execute, status => \&status, _stop => \&stop, }, ); } print "$$: Running client...\n"; POE::Kernel->run(); print "$$: Client exited...\n"; exit(); sub start { my ( $kernel, $session ) = @_[ KERNEL, SESSION ]; my $service_name = 'ClientTest'; $kernel->alias_set($service_name); $kernel->post( IKC => publish => $service_name, ['status'] ); $kernel->yield( 'execute' ); return; } sub execute { my ( $kernel, $session ) = @_[ KERNEL, SESSION ]; my $value = 0; $value = $_[ARG0] unless (! defined $_[ARG0]); print "\n\t sub execute... $value"; $kernel->post( 'IKC', 'post', 'poe://Server/ServerTest/compute', $value ); return; } sub status { my ($kernel) = $_[KERNEL]; print "\n\t sub status... ", $_[ARG0], "\n"; sleep(1); $kernel->yield('execute', $_[ARG0]); return; } sub stop { my ( $kernel ) = $_[KERNEL]; print "\n STOP \n"; $kernel->alias_remove('ClientTest'); }