The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl
# vim: ts=2 sw=2 noexpandtab

use warnings;
use strict;
use lib qw(../lib);

{
	package ConcurrentHttpClient;
	use Moose;
	extends 'HttpClient';

	has pending => (
		is      => 'rw',
		isa     => 'Int',
		default => 0,
	);

	after request => sub {
		my ($self) = @_;
		$self->pending( $self->pending() + 1 );
	};

	after internal_http_response => sub {
		my ($self) = @_;
		return if $self->pending( $self->pending() - 1 );
		$self->emit( -name => "empty" );
	};
}

### Main usage.

use HTTP::Request;

my $client = ConcurrentHttpClient->new();
$client->request( HTTP::Request->new( GET => $_ ) ) foreach (
	'http://poe.perl.org',
	'http://duckduckgo.com/',
	'http://metacpan.org/',
	'http://perl.org/',
	'http://twitter.com/',
);

while (my $event = $client->next()) {
	last if $event->_name() eq 'empty';
	print $event->response()->code(), " = ", $event->request()->uri(), "\n";
}

exit;