Agent-TCLI
view release on metacpan or search on metacpan
lib/Agent/TCLI/Package/Base.pm view on Meta::CPAN
B<parameters> should only contain hash values.
=cut
my @parameters :Field
:Type('HASH')
:Arg('parameters')
:Get('parameters');
my @session :Field
:Arg('session')
:Get('session')
:Weak;
# :Type('POE::Session');
=item controls
A hash of hashes keyed on control for storing stuff.
=cut
my @controls :Field;
=item requests
A hash collection of requests that are in progress
=cut
my @requests :Field
:Type('HASH')
:Arg('name' => 'requests', 'default' => { } )
:Acc('requests');
=item wheels
A hash of wheels keyed on wheel ID.
B<wheels> values should only be POE::Wheels.
=cut
my @wheels :Field;
# Standard class utils are inherited
=back
=head2 METHODS
Most of these methods are for internal use within the TCLI system and may
be of interest only to developers trying to enhance TCLI.
=over
=cut
sub _preinit :Preinit {
my ($self,$args) = @_;
$args->{'session'} = POE::Session->create(
object_states => [
$self => [qw(
_start
_stop
_shutdown
_default
establish_context
settings
show
)],
],
)
unless defined( $args->{'session'} );
}
# This POE event handler is called when POE starts up a Package.
# The B<_start> method is :Cumulative within OIO. Ideally, most command packages
# could use this Base _start method without implementing
# their own. However there seems to be a race condition between the POE
# initialization and the OIO object initialization. Until this is debugged
# one will probably have to have this _start method in every package.
sub _start :Cumulative {
my ($kernel, $self, $session) =
@_[KERNEL, OBJECT, SESSION];
# are we up before OIO has finished initializing object?
if (!defined( $self->name ))
{
$self->Verbose("_start: OIO not done re-starting");
$kernel->yield('_start');
# $kernel->delay('_start', 1 );
return;
}
$self->Verbose("_start: ".$self->name()." starting");
# There is only one command object per TCLI
$kernel->alias_set($self->name);
}
# This POE event handler is used to initiate a shutdown of the Control.
sub _shutdown :Cumulative {
my ($kernel, $self,) =
@_[KERNEL, OBJECT,];
$self->Verbose("_shutdown:base ".$self->name." shutting down");
$self->Verbose("shutdown:base deleting wheels ",2);
foreach my $wheel ( keys %{ $wheels[$$self] } )
{
$self->SetWheel($wheel);
}
foreach my $control ( keys %{ $controls[$$self] } )
{
$self->SetControl($control);
}
# clear all alarms you might have set
$kernel->alarm_remove_all();
return ("_shutdown:base ".$self->name )
}
#This POE event handler is called when POE stops a Package.
#The B<_stop> method is :Cumulative within OIO.
sub _stop :Cumulative {
my ($kernel, $self,) =
@_[KERNEL, OBJECT,];
$self->Verbose("_stop: ".$self->name." stopping");
return($self->name.":_stop complete ");
}
#Just a placeholder that does nothing but collect unhandled child events
#to keep them out of default.
sub _child {
my ($kernel, $self, $session, $id, $error) =
@_[KERNEL, OBJECT, SESSION, ARG1, ARG2 ];
$self->Verbose("child: pid($id) ");
}
=item establish_context
This POE event handler is the primary way to set context with a command.
Just about any command that has subcommands will use this method as it's handler.
An exception would be a command that sets an single handler to process all
subcoammnds/args using the 'A*' context. See the Eliza package for an example of
how to establish that type of context.
=cut
sub establish_context {
my ($kernel, $self, $sender, $request, ) =
( run in 0.687 second using v1.01-cache-2.11-cpan-39bf76dae61 )