Skip to content
Extraits de code Groupes Projets
Valider 4e8e15b2 rédigé par Alexandre Morignot's avatar Alexandre Morignot
Parcourir les fichiers

set download on a queue

parent 3dff32bd
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -18,13 +18,16 @@ POE::Session->create(
filename => \&sessions::downloader::ddl::filename,
signal_filename => \&sessions::downloader::ddl::signal_filename,
signal_ddl => \&sessions::downloader::ddl::signal_ddl,
end_task => \&sessions::downloader::ddl::end_task,
},
);
sub on_start {
my $kernel = $_[KERNEL];
my ($kernel, $heap) = @_[KERNEL, HEAP];
$kernel->alias_set('downloader');
$heap->{ddl}->{tasks} = [];
$log->info("session started");
}
......
......@@ -27,6 +27,14 @@ sub exec {
return if (not $id or not $url);
$log->debug("DDL '$id' '$url' ");
# is there already a task running ?
if ($heap->{ddl}->{running}) {
push $heap->{ddl}->{tasks}, [$id, $url];
return;
}
$heap->{ddl}->{running} = 1;
# first we need to got filename
my $child = POE::Wheel::Run->new(
Program => [
......@@ -75,6 +83,7 @@ sub signal_filename {
$log->error("error getting filename for $id : $status");
$heap->{ddl}->{pb}->{$id}->{child} = undef;
$kernel->yield("end_task");
return;
}
......@@ -103,7 +112,7 @@ sub signal_filename {
sub signal_ddl {
$log->debug("DDL");
my ($heap, $pid, $status) = @_[HEAP, ARG1, ARG2];
my ($kernel, $heap, $pid, $status) = @_[KERNEL, HEAP, ARG1, ARG2];
my $child = delete $heap->{ddl}->{pid}->{$pid};
my $id = delete $heap->{ddl}->{wid}->{$child->ID};
......@@ -111,13 +120,26 @@ sub signal_ddl {
if ($status ne "0") {
$log->error("error downloading $id : $status");
return;
}
else {
eval {
utils::db::set_filename($id, $heap->{ddl}->{pb}->{$id}->{filename});
};
$log->error($@) if ($@);
}
$kernel->yield("end_task");
}
sub end_task {
my ($kernel, $heap) = @_[KERNEL, HEAP];
$heap->{ddl}->{running} = 0;
if (@{ $heap->{ddl}->{tasks} }) {
my $task = shift $heap->{ddl}->{tasks};
$kernel->yield(ddl => $task->[0], $task->[1]);
}
}
1;
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter