package Eixo::Queue::Queues;
use strict;
use Eixo::Base::Clase;
has(
queues=>{},
jobs_resolve=>{},
);
#
# Jobs administration
#
sub getJob{
my ($self, $id) = @_;
if(my $queue_name = $self->jobs_resolve->{$id}){
$self->queues->{$queue_name}->status($id);
}
}
sub addJob{
my ($self, $job) = @_;
my $queue = $self->queues->{$job->queue};
unless($queue->isInmediate || $queue->isDirect){
#
# Add resolve unless inmediate or direct queue
#
$self->jobs_resolve->{$job->id} = $job->queue;
}
#
# Add job to the queue
#
$queue->add($job);
return $job if($queue->isDirect);
return $job->copy($queue->wait) if($queue->isInmediate);
return 1;
}
#
# Queues administration
#
sub createQueue{
my ($self, $queue) = @_;
unless($queue && $queue->isa('Eixo::Queue')){
die(ref($self) . '::createQueue: queue must exist and be an instance of Eixo::Queue');
}
$self->queues->{$queue->name} = $queue;
$queue->init;
}
1;