#!/usr/bin/perl
use strict;
use warnings;
use lib "/path/to/module"; #--- not needed if Schedule::ATkB is installed
use POE qw(Component::Schedule::ATkB);
use Algorithm::TokenBucket;
use Time::HiRes qw( time );
use Time::Elapse;
my $so_many_task = 3;
my $so_many_seconds = 5;
my $burst_size = 1;
my $rate = $so_many_task / $so_many_seconds;
my $elapsed_time;

print 'start ', time , "\n";
Time::Elapse->lapse($elapsed_time);
POE::Session->create(
        inline_states => {
            _start => sub {
               $_[KERNEL]->yield("add_sched");
            },
            Tick => sub {
                #--- Just to show that we do get Ticks at the said rate
                print 'tick ', time, " ( $elapsed_time )\n";
            },
            add_sched => sub {
                $_[HEAP]{sched} = POE::Component::Schedule::ATkB->add(
                    $_[SESSION], Tick => Algorithm::TokenBucket->new($rate, $burst_size),
                );
            },
            remove_sched => sub {
                $_[HEAP]{sched}->delete;
                #$_[HEAP]{sched} = undef;
                #delete $_[HEAP]{sched};
            },
            _stop => sub {
                print "_stop\n";
            },
        },
    );


POE::Kernel->run();
exit(0);
