AC-MrGamoo

 view release on metacpan or  search on metacpan

lib/AC/MrGamoo/Job/Request.pm  view on Meta::CPAN

# -*- perl -*-

# Copyright (c) 2010 AdCopy
# Author: Jeff Weisberg
# Created: 2010-Apr-22 13:49 (EDT)
# Function: network requests - delete file, abort task
#
# $Id: Request.pm,v 1.2 2011/01/14 22:38:06 jaw Exp $

package AC::MrGamoo::Job::Request;
use AC::MrGamoo::Debug 'job_request';
use strict;

our @ISA = 'AC::MrGamoo::Job::Action';

sub new {
    my $class = shift;
    my $job   = shift;

    my $me = bless { @_ }, $class;

    $job->{request_pending}{$me->{id}} = $me;
    return $me;
}

sub start {
    my $me  = shift;
    my $job = shift;

    debug("starting request $me->{info}");
    delete $job->{request_pending}{$me->{id}};

    my $x = $job->_send_request( $me->{server}, $me->{info}, $me->{proto}, $me->{request});

    unless( $x ){
        verbose("cannot start request");
        return;
    }

    $x->set_callback('on_success', \&_cb_start_req,  $me, $job, 1);
    $x->set_callback('on_failure', \&_cb_start_req,  $me, $job, 0);

    $job->{request_running}{$me->{id}} = $me;
    $x->start();
}

sub _cb_start_req {
    my $io  = shift;
    my $evt = shift;
    my $me  = shift;
    my $job = shift;
    my $ok  = shift;

    debug("request finished $me->{info}");
    delete $job->{request_running}{$me->{id}};

    $job->_try_to_do_something()
      if $ok
        && (keys %{$job->{request_pending}})
        && (keys %{$job->{request_running}} < 5);	# we go faster, if we can start a few at a time

}

1;



( run in 0.570 second using v1.01-cache-2.11-cpan-39bf76dae61 )