#!/usr/bin/perl -w
use strict;

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

use POE qw(Session);
use POE::Component::IKC::Client;

my $name="Client$$";

### Send a request to the time-server
sub server_io
{
    my($kernel, $msg)=@_;
    $kernel->call('IKC', 'post', 
                {session=>'timeserver', event=>$msg, kernel=>'Pulse'},
                { kernel=>$name, session=>'me', event=>'pulse'});
}

### Called when we connect to the time server
sub create_me
{
    POE::Session->new(
        _start=>sub 
        {
            my($kernel)=$_[KERNEL];
            $kernel->sig('USR1', 'hup');
            server_io($kernel, 'connect') and
                    $kernel->alias_set('me');
        },
#        _stop=>sub { print "_stop\n"; },
        hup=>sub
        {
            my($kernel)=$_[KERNEL];
            print "Got USR1\n";
            server_io($kernel, 'disconnect');
            return 1;
        },
        # output a . when the pulse is sent
        # output a + if it took longer then a second to get from 
        # the timerserver
        pulse=>sub { print ($_[ARG0] eq localtime() ? '.' : '+'); },
    );
}

$|++;
create_ikc_client(
        on_connect=>\&create_me,
        port=>31338,                        # eleet++
        name=>$name,
                 );

print "Running client...\n";
$poe_kernel->run();

