>From the POE::Kernel manpage:
# Post an event which will be delivered after a delay, specified in
# seconds hence. This clears previous timed events with the same
# name.
$kernel->delay( $event, $seconds, @event_args );
# Post an additional delay, leaving existing ones in the queue.
$kernel->delay_add( $event, $seconds, @event_args );
You probably want to use delay_add() instead of delay().
On (Fri, Jul 09 13:16), Robert Boone wrote:
> Hello,
>
> I am trying to write a script that grabs a picture from a web cam every
> 30 second and every 30 minutes copies it to create an archive of
> pictures. To further complete things, I have two servers that this
> script needs to run on but the script only runs on one server depending
> on the status it reads from another server. The problem I am having is
> the subroutine that run every 30 minutes (move_pic) never runs. I will
> include the code that I have so far, but if any one can suggest a better
> way I would be happy to hear it.
>
>
>
> Times shortened for testing...
>
> #!/usr/bin/perl
>
> use strict;
> use warnings;
>
> use POE;
> use LWP::Simple;
> use File::Copy;
> use Net::SMTP;
> use POSIX qw(strftime);
>
> $|++;
>
> my $smtp = Net::SMTP->new('localhost');
> my $host = qx { hostname --short };
>
> my $lb;
> if ($host eq 'www0') {
> $lb = '10.0.0.1';
> } else {
> $lb = '10.0.1.1';
> }
>
> POE::Session->create(
> inline_states => {
> _start => \&start,
> check => \&check,
> get_pic => \&get_pic,
> move_pic => \&move_pic,
> mail => \&mail,
> _stop => \&stop,
> },
> );
>
> $poe_kernel->run;
> exit 0;
>
> sub start {
> my $kernel = $_[KERNEL];
>
> $kernel->yield('check');
> }
>
> sub check {
> my $kernel = $_[KERNEL];
>
> my $servermon = qx { nc -w 2 $lb 5000};
>
> if ($servermon eq $host) {;
> print "Check\n";
> $kernel->delay(move_pic => 30);
> $kernel->delay(get_pic => 10);
> } else {
> $kernel->delay(check => 120);
> }
> }
> sub get_pic {
>
> my ($kernel, $heap) = @_[KERNEL, HEAP];
>
> print "get_pic\n";
>
> my $image_link = 'http://webcam/hugesize.jpg';
> my $temp_filename = '30sec.jpg';
> my $filename = 'current.jpg';
>
> unless (mirror($image_link,$temp_filename)) {
> print "Sending mail\n";
> $kernel->yield('mail');
> }
>
> move($temp_filename,$filename);
>
> $kernel->yield('check');
> }
>
> sub move_pic {
> my ($kernel, $heap) = @_[KERNEL, HEAP];
>
> print "move_pic\n";
>
> my $old_filename = 'current.jpg';
> my $new_filename = time.'.jpg';
>
> if (-f $old_filename) {
> copy($old_filename,$new_filename);
> }
>
> $kernel->yield('check');
> }
>
> sub mail {
> my ($kernel, $heap) = @_[KERNEL, HEAP];
>
> my $failTime = strftime "%H:%M:%S", localtime;
> my $todayDate = strftime "%m/%d/%y", localtime;
>
>
> $smtp->mail('[EMAIL PROTECTED]');
> $smtp->to('[EMAIL PROTECTED]');
> $smtp->data();
>
>
> $smtp->datasend("To: [EMAIL PROTECTED]");
> $smtp->datasend("From: [EMAIL PROTECTED]");
> $smtp->datasend("Subject: WebCam Died...");
> $smtp->datasend("\n\n");
>
>
> $smtp->datasend("Webcam failed will retry in one minute.");
> $smtp->datasend("\n\nDate: ".$todayDate."\nTime: ".$failTime."\n\n");
> $smtp->dataend();
> $smtp->quit;
>
> $kernel->yield(get_pic => 60);
> }
>
> sub stop {
> print "That's All\n";
> }
>
>
>
> Thanks,
> Robert Boone