The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package IPC::Transit::Test::Example;

use strict;use warnings;
use Data::Dumper;
use IPC::Transit;
use POE;
use JSON;
use File::Slurp;

sub
import {
    my $self = shift;
    my ($callpack, $callfile, $callline) = caller;
    my @EXPORT;
    if (@_) {
        @EXPORT = @_;
    }
    foreach my $sym (@EXPORT) {
        no strict 'refs';
        *{"${callpack}::$sym"} = \&{"IPC::Transit::Test::Example::$sym"};
    }
}

sub
get_routes {
    my $routes_text = read_file('routes.json') or die "get_routes: routes.json not found\n";
    my $routes;
    eval {
        $routes = decode_json($routes_text) or die "returned false\n";
    };
    die "get_routes: decode_json() failed: $@\n" if $@;
    return $routes;
}

sub
recur {
    my %args = @_;

    $args{repeat} = 300 unless $args{repeat};
    $args{work} = sub { print "Somebody forgot to pass work\n"; } unless $args{work};
    POE::Session->create(
        inline_states => {
            _start => sub {$_[KERNEL]->delay(tick => 1);},
            tick => sub {
                $_[KERNEL]->delay(tick => $args{repeat});
                &{$args{work}}(\%args);
            },
            _child => sub { }, #ignore kids
        },
    );
}

1;