>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

Reply via email to