#!/var/bin/perl use warnings; use strict; use POE qw(Component::IKC::Server); use Data::Dumper::Simple; POE::Component::IKC::Server->spawn( port =>'12345', name => 'Server', ); POE::Session->create( inline_states => { _start => \&start, compute => \&compute, finish => \&finish, _stop => \&stop, }, ); print "$$: Running server...\n"; POE::Kernel->run(); print "$$: Server exited...\n"; exit(); sub start { my ($kernel) = $_[KERNEL]; my $service_name = 'ServerTest'; $kernel->alias_set($service_name); $kernel->post( IKC => publish => $service_name, ['compute'] ); return; } sub compute { my ($kernel, $arg) = @_[KERNEL, ARG0]; my $sender_id = $_[SENDER]->ID; print "\n\t sub compute ", $arg; $kernel->refcount_increment( $sender_id, 'MYREFCOUNT' ); $kernel->yield( 'finish', $arg+1, $sender_id ); return; } sub finish { my ($kernel, $arg, $sender_id ) = @_[KERNEL, ARG0, ARG1]; print "\n\t sub finish ", $arg, "\n"; $kernel->post($sender_id, 'status', $arg); $kernel->refcount_decrement( $sender_id, 'MYREFCOUNT' ); return; } sub stop { my ( $kernel ) = $_[KERNEL]; print "\n STOP \n"; $kernel->alias_remove('ServerTest'); }