# Simple worker component.
# Simulates a long-running, asynchronous task.
# Copyright 2004 by Rocco Caputo.  Free software.
# Same terms as Perl itself.  Have fun!

package Worker;

use warnings;
use strict;

use POE;

sub spawn {
  my ($class, %args) = @_;
  POE::Session->create(
    inline_states => {
      _start => \&handle_start,
      done   => \&handle_done,
    },
    heap => \%args,
  );
  return;
}

sub handle_start {
  print "Worker ", $_[SESSION]->ID, " begins.\n";
  $_[KERNEL]->delay(
    done => $_[HEAP]->{sleep_period}
  );
}

sub handle_done {
  print(
    "Worker ", $_[SESSION]->ID, " is done.\n"
  );
}

1;
