> If you have a (simple) testcase that demonstrates the
> problem I'd be happy to take a look at it.
####
# ==============================================================================
# SERVER IMPLEMENTATION
# exec: perl src.pl
# ==============================================================================
#!/usr/bin/perl -w
# ==============================================================================
use strict;
use POE qw(Session);
use POE::Component::IKC::Server;
use POE::Component::IKC::Specifier;
use threads;
# ==============================================================================
my $port = '32032';
my $ip = '127.0.0.1';
my $name = 'ThreadTest';
my $alias = 'TT';
# === INTER KERNEL COMMUNICATION ===============================================
create_ikc_server( ip => $ip, port => $port, name => $name );
POE::Session -> new
(
# --- general states ---------------------------------------------------
_start => \&start, # session start
# --- service requests -------------------------------------------------
'call' => \&call,
# ----------------------------------------------------------------------
);
$poe_kernel->run();
# === IKC STATES ===============================================================
sub start
{
my($kernel, $heap) = @_[KERNEL, HEAP];
print "State [start]\n";
$kernel -> alias_set( $alias );
$kernel -> call( 'IKC', 'publish', $alias,
[
qw(
call
)
]
);
}
# ==============================================================================
sub call
{
my($kernel, $heap, $param) = @_[KERNEL, HEAP, ARG0];
print "State [call]\n";
async
{
} -> detach;
return [ ];
}
# ==============================================================================
__END__
####
# ==============================================================================
# CLIENT IMPLEMENTATION
# exec: perl cln.pl
# ==============================================================================
#!/usr/bin/perl -w
# ==============================================================================
use strict;
use POE qw( Session );
use POE::Component::IKC::Client;
use POE::Component::IKC::Responder;
# ==============================================================================
my $ip = '127.0.0.1';
my $port = '32032';
my $myName = $$;
# ==============================================================================
create_ikc_client(
ip => $ip,
port => $port,
name => $myName,
subscribe => [ "poe://ThreadTest/TT" ],
);
POE::Session -> new
(
_start => \&start,
remoteSubscribe => \&remoteSubscribe,
runTestDone => \&runTestDone,
);
$poe_kernel -> run;
# === IKC STATES ===============================================================
sub start
{
my ($self, $kernel, $heap) = @_[ OBJECT, KERNEL, HEAP ];
print "State [start]\n";
create_ikc_responder();
$kernel -> alias_set( 'test' );
$kernel -> post( 'IKC', 'publish', 'test',
[
qw(
runTestDone
)
]
);
$kernel -> post( 'IKC', 'monitor', 'ThreadTest',
{
subscribe => 'remoteSubscribe',
}
);
}
# ==============================================================================
sub remoteSubscribe
{
my ($kernel, $heap, $name, $real_name, $what) = @_[ KERNEL, HEAP, ARG0, ARG1, ARG4 ];
print "State [remoteSubscribe]\n";
return unless $real_name eq 'ThreadTest';
$kernel -> alias_set( 'test' );
$kernel -> post( 'IKC',
'call', "poe://ThreadTest/TT/call",
[ $kernel -> ID ], 'poe:runTestDone'
);
}
# ==============================================================================
sub runTestDone
{
my ($kernel, $heap, $rData, $session) = @_[ KERNEL, HEAP, ARG0, SESSION ];
print "State [runTestDone]\n";
$kernel -> call( 'IKC', 'retract', 'test' );
$kernel -> alias_remove( 'test' );
$kernel -> post( IKC => 'shutdown' );
$kernel -> yield( 'shutdown' );
}
# ==============================================================================
__END__