AC-MrGamoo
view release on metacpan or search on metacpan
lib/AC/MrGamoo/Job/Xfer.pm view on Meta::CPAN
# -*- perl -*-
# Copyright (c) 2010 AdCopy
# Author: Jeff Weisberg
# Created: 2010-Apr-22 12:29 (EDT)
# Function: file transfers
#
# $Id: Xfer.pm,v 1.2 2011/01/14 22:38:07 jaw Exp $
package AC::MrGamoo::Job::Xfer;
use AC::MrGamoo::Debug 'job_xfer';
use AC::MrGamoo::Config;
use AC::MrGamoo::MySelf;
use AC::Misc;
use strict;
our @ISA = 'AC::MrGamoo::Job::Action';
sub new {
my $class = shift;
my $job = shift;
my $info = shift;
my $server = shift;
my $id = unique();
my $me = bless {
id => $id,
info => $info,
server => $server,
created => $^T,
};
$job->{xfer_pending}{$id} = $me;
debug("pending xfer $info->{id} => $id on $server");
return $me;
}
sub start {
my $me = shift;
my $job = shift;
# send request to server
my $server = $me->{server};
my $filename = $me->{info}{filename};
debug("starting xfer $me->{id} on $server of $filename");
my $x = $job->_send_request( $server, "xfer $me->{id}", {
type => 'mrgamoo_filexfer',
msgidno => $^T,
want_reply => 1,
}, {
jobid => $job->{request}{jobid},
copyid => $me->{id},
filename => $filename,
dstname => ($me->{info}{dstname} || $filename),
location => ($job->{file_info}{$filename}{location} || $me->{info}{location}),
console => $job->{request}{console},
master => my_server_id(),
} );
unless( $x ){
verbose("cannot start xfer");
$me->failed( $job );
return;
}
# no success cb here. we will either timeout, or get a XferStatus msg.
$x->set_callback('on_failure', \&_cb_start_xfer_fail, $me, $job );
$me->started($job, 'xfer');
$x->start();
}
sub _cb_start_xfer_fail {
my $io = shift;
my $evt = shift;
my $me = shift;
my $job = shift;
$me->failed($job, 'network');
}
# record status rcvd from file xfer
sub update_status {
( run in 1.064 second using v1.01-cache-2.11-cpan-99c4e6809bf )