7 use base qw/Class::Accessor/;
8 __PACKAGE__->mk_accessors( qw/
14 #use Carp qw/confess/;
15 use Data::Dump qw/dump/;
17 use File::Path qw/mkpath/;
24 CWMP::Queue - implement commands queue for CPE
30 my $obj = CWMP::Queue->new({
31 id => 'CPE_serial_number',
39 my $self = $class->SUPER::new( @_ );
41 die "need id" unless $self->id;
43 warn "created ", __PACKAGE__, "(", dump( @_ ), ") object\n" if $self->debug;
45 my $dir = File::Spec->catfile('queue',$self->id);
48 mkpath $dir || die "can't create $dir: $!";
49 print "created new queue $dir\n";
54 if ( ! defined( $self->{dq}->{$id} ) ) {
55 $self->{dq}->{$id} = IPC::DirQueue->new({
60 warn "## created queue object for CPE $id path $dir\n" if $self->debug;
69 'CommandToDispatch', {
80 my ( $dispatch, $args ) = @_;
82 warn "## enqueue( $dispatch with ", dump( $args ), " ) for $id\n" if $self->debug;
84 $self->{dq}->{$id}->enqueue_string( Dump({ dispatch => $dispatch, args => $args }) );
89 my $job = $q->dequeue;
90 my ( $dispatch, $args ) = $job->dispatch;
91 # after dispatch is processed
101 my $job = $self->{dq}->{$id}->pickup_queued_job();
102 return unless defined $job;
104 warn "## dequeue for $id = ", dump( $job ), " )\n" if $self->debug;
106 return CWMP::Queue::Job->new({ job => $job, debug => $self->debug });
111 Accessor to C<IPC::DirQueue> object
119 return $self->{dq}->{$self->id};
122 package CWMP::Queue::Job;
124 =head1 CWMP::Queue::Job
130 use base qw/Class::Accessor/;
131 __PACKAGE__->mk_accessors( qw/
136 use YAML qw/LoadFile/;
137 use Data::Dump qw/dump/;
141 my ( $dispatch, $args ) = $job->dispatch;
147 my $path = $self->job->get_data_path || die "get_data_path?";
148 my $data = LoadFile( $path ) || die "can't read $path: $!";
149 warn "## dispatch returns ",dump($data),"\n" if $self->debug;
150 return ( $data->{dispatch}, $data->{args} );
155 Finish job and remove it from queue