#! /usr/bin/perl
use strict;
use warnings;

use POE;
use POE::Component::Client::HTTP;
use LWP::UserAgent;

POE::Component::Client::HTTP->spawn(
    Alias   => 'ua',
    Timeout => 3,
    Agent   => 'test-me',
);

my @sites = (
    {
        hps        =>  3,
        name       => 'Testing',
        url       => 'http://www.r-stream.com/',
#        url       => 'http://poe.perl.org/',
        DEBUG => 0,
    },
    {
        hps        =>  3,
        name       => 'Testing 2',
        url       => 'http://www.r-stream.com/',
#        url       => 'http://poe.perl.org/',
        DEBUG => 0,
    },
);

foreach my $site (@sites) {
   
    my $hps        = $site->{hps};
    my $interval   = $hps ? 1/$hps : 1;
    my $next_alarm = time()  + $interval;

    POE::Session->create(
        heap           => {
            next_alarm       => 0,
            url              => $site->{url},
            hps              => $hps,
            interval         => $interval,
            next_alarm       => $next_alarm,
            in_process       => 0,
        },
        package_states => [ main => [ "_start", "snap", "got_response" ] ]
    );
}


POE::Kernel->run();
exit 0;

sub _start {
    my ($kernel, $heap) = @_[ KERNEL, HEAP ];
    $kernel->alarm( snap => $heap->{next_alarm} );
}

sub snap {
    my ($kernel, $heap) = @_[ KERNEL, HEAP ];

    if (!$heap->{in_process}) {
        $heap->{in_process}++;
        my $url = $heap->{url};
        my $req = HTTP::Request->new(GET => $url);
        $kernel->post( ua => request => got_response => $req );
    }
    $heap->{next_alarm} += $heap->{interval};
    $kernel->alarm( snap => $heap->{next_alarm} );
}

sub got_response {
    my ( $kernel, $heap, $request_packet, $response_packet ) = @_[ KERNEL, HEAP, ARG0, ARG1 ];
    $heap->{in_process} =  0;

    my $time = time();
    my $req = $request_packet->[0];
    my $response = $response_packet->[0];
    my $type = $response->header('content-type') || '';
    print "$type\n";
}




