The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

POE::Component::Schedule - Schedule POE events using DateTime::Set iterators

SYNOPSIS

use POE qw(Component::Schedule);
use DateTime::Set;

POE::Session->create(
    inline_states => {
        _start => sub {
            $_[HEAP]{sched} = POE::Component::Schedule->add(
                $_[SESSION], Tick => DateTime::Set->from_recurrence(
                    after      => DateTime->now,
                    before     => DateTime->now->add(seconds => 3),
                    recurrence => sub {
                        return $_[0]->truncate( to => 'second' )->add( seconds => 1 )
                    },
                ),
            );
        },
        Tick => sub {
            print 'tick ', scalar localtime, "\n";
        },
        remove_sched => sub {
            # Three ways to remove a schedule
            # The first one is only for API compatibility with POE::Component::Cron
            $_[HEAP]{sched}->delete;
            $_[HEAP]{sched} = undef;
            delete $_[HEAP]{sched};
        },
        _stop => sub {
            print "_stop\n";
        },
    },
);

POE::Kernel->run();

DESCRIPTION

This component encapsulates a session that sends events to client sessions on a schedule as defined by a DateTime::Set iterator.

POE::Component::Schedule METHODS

spawn(Alias => name)

Start up the PoCo::Schedule background session with the given alias. Returns the back-end session handle.

No need to call this in normal use, add() and new() all crank one of these up if it is needed.

add($session, $event_name, $iterator, @event_args)

my $sched = POE::Component::Schedule->add(
    $session,
    $event_name,
    $DateTime_Set_iterator,
    @event_args
);

Add a set of events to the scheduler.

Returns a schedule handle. The event is automatically deleted when the handle is not referenced anymore.

new($session, $event_name, $iterator, @event_args)

new() is an alias for add().

SCHEDULE HANDLE METHODS

delete()

Removes a schedule using the handle returned from add() or new().

DEPRECATED: Schedules are now automatically deleted when they are not referenced anymore. So just setting the container variable to undef will delete the schedule.

SEE ALSO

POE, DateTime::Set, POE::Component::Cron.

SUPPORT

You can look for information at:

ACKNOWLEDGMENT & HISTORY

This module was a friendly fork of POE::Component::Cron to extract the generic parts and isolate the Cron specific code in order to reduce dependencies on other CPAN modules.

See https://rt.cpan.org/Ticket/Display.html?id=44442.

The orignal author of POE::Component::Cron is Chris Fedde.

POE::Component::Cron is now implemented as a class that inherits from POE::Component::Schedule.

Most of the POE::Component::Schedule internals have since been rewritten in 0.91_01 and we have now a complete test suite.

AUTHORS

Olivier Mengué, dolmen@cpan.org
Chris Fedde, cfedde@cpan.org

COPYRIGHT AND LICENSE

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.3 or, at your option, any later version of Perl 5 you may have available.