1#!/usr/bin/perl -w
2use strict;
3
4use lib qw(blib/lib blib/arch);
5
6use POE qw(Session);
7use POE::Component::IKC::Client;
8
9my $name="Client$$";
10
11### Send a request to the time-server
12sub server_io
13{
14    my($kernel, $msg)=@_;
15}
16
17### Called when we connect to the time server
18sub create_me
19{
20    print "Creating session...\n";
21    POE::Session->new(
22        _start=>sub
23        {
24            my($kernel)=$_[KERNEL];
25            warn "_start";
26            $kernel->sig('USR1', 'hup');
27            $kernel->alias_set('me');
28
29            $kernel->post('poe://*/timeserver', 'connect',
30                            "poe://$name/me/pulse");
31            $kernel->post('IKC', 'publish', 'me', [qw(pulse)]);
32        },
33        hup=>sub
34        {
35            my($kernel)=$_[KERNEL];
36            print "Got USR1\n";
37            $kernel->post('poe://Pulse/timeserver', 'disconnect',
38                          "poe://$name/me/pulse");
39            return 1;
40        },
41
42        # output a . when the pulse is sent
43        # output a + if it took longer then a second to get from
44        # the timerserver
45        pulse=>sub { print ($_[ARG0] eq localtime() ? '.' : '+'); },
46
47    );
48}
49
50$|++;
51POE::Component::IKC::ClientLite->spawn(
52            port=>31337,
53            name=>$name,
54            subscribe=>[qw(poe://*/timeserver)],
55            on_connect=>\&create_me,
56);
57
58print "Running client...\n";
59$poe_kernel->run();
60
61