# create postback
my $postback = $_[SESSION]->postback("status");
$kernel->post( 'IKC', 'post', 'poe://Server/ServerTest/compute', {value=>$value, postback=>$postback} );
####
#!/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');
}
####
#!/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');
}