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