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

use lib qw(blib/lib blib/arch);

# BEGIN {sub POE::Kernel::TRACE_GARBAGE () { 1 }}

use POE;
use POE::Session;
use POE::Component::IKC::Server;
use POE::Component::IKC::Specifier;

# Very simple server.  all it does is shutdown when 'goaway' is posted


create_ikc_server(
    unix=>($ENV{TMPDIR}||$ENV{TEMP}||'/tmp').'/userver',    
    name=>'shut-server');       

POE::Session->create(
    inline_states => {
            _start=>\&time_start,
            goaway=>\&goaway,
            _stop=>\&time_stop,
        }
);

print "Running server for 60 seconds at most...\n";
$poe_kernel->run();
print "Server exited...\n";

#############################################
sub time_start
{
    my($kernel, $heap, $session)=@_[KERNEL, HEAP, SESSION];
    $kernel->delay('goaway', 60);
    $kernel->alias_set('Goaway');
    $kernel->call(IKC=>'publish',  
                  Goaway=>[qw(goaway)]);
    
}

#############################################
sub goaway
{
    my($kernel, $heap)=@_[KERNEL, HEAP];
    warn "Now it's time to say good night, sleep tight\n";
    $kernel->post('IKC', 'shutdown');
    $kernel->delay('goaway');
}

sub time_stop
{
    warn "Time to _stop\n";
}