Agent-TCLI
view release on metacpan or search on metacpan
lib/Agent/TCLI/Control.pm view on Meta::CPAN
sub _start {
my ($kernel, $self, $session) =
@_[KERNEL, OBJECT, SESSION];
if (!defined( $self->id ))
{
$self->Verbose("_start: OIO not done re-starting");
$kernel->yield('_start');
return;
}
$kernel->alias_set("$id[$$self]");
$self->Verbose("_start: Starting commands start routines \n");
foreach my $startcmd ( @{ $starts[$$self] } ) {
if ( ref($startcmd) eq 'HASH' )
{
if (defined ($startcmd->{'start'})) {
$self->Verbose("_start:\trunning ".$startcmd->{'name'}." 's start \n",2) ;
eval { $startcmd->{'start'}( kernel => $kernel,
object => $self,
session => $session,
) }
}
}
elsif ( ref($startcmd) =~ /Agent::TCLI::Command/ )
{
$self->Verbose("_start:\trunning ".$startcmd->name()." 's start \n",2) ;
# TODO some error checking here maybe :)
$startcmd->start( { kernel => $kernel,
object => $self,
session => $session,
} );
}
}
# Handlers are events to send the request to. The result will be returned
# to AsYouWished.
# The handler is the name of the event, and the command is the session that
# will handle the event.
# Often the handler name will not be the actual command name.
# TODO, this isn't doing anything right now. Should it? Or are we doing it in the
# _starts session creation....
$self->Verbose("_start: Insert command handler states \n");
foreach my $command ( @{ $handlers[$$self] } ) {
# if the command is not defined, the handler is assumed to be pre-loaded
if ( ref($command->{'command'}) =~ /CODE/ ) {
$self->Verbose("_start:\tregistering ".$command->{'name'}." 's handler $command->{'handler'} \n", 2 );
$kernel->state( $command->{'handler'} , $command->{'command'} );
}
}
# unless ($heap->{no_std_tie}) {
# $self->Verbose "tie STDOUT and STDERR \n" if VERBOSE;
# tie *STDOUT, __PACKAGE__."::Output", 'stdout', \&jabber_send_msg;
# tie *STDERR, __PACKAGE__."::Output", 'stderr', \&jabber_send_msg;
# }
#
# if ($heap->{ties}) {
# foreach (@{$heap->{ties}}) {
# $self->Verbose "tie $_ \n" if VERBOSE;
# tie *$_, __PACKAGE__."::Output", $_, \&jabber_send_msg;
# }
# }
if( $self->session )
{
$self->set(\@start_time, time() );
$self->Verbose( "_started: up at ".$self->start_time.
" _start completed. \n\n");
}
} # End sub _start
=item stop
Poe state that is mostly just a placeholder.
=cut
sub _stop {
my ($kernel, $self, $session) = @_[KERNEL, OBJECT, SESSION];
$self->Verbose("Stopping ".$self->id );
return ('_stop '.$self->id )
}
=item shutdown
POE event to forcibly shutdown the CLI control. It will call the stops for
all registered commnds that requested them. This probably is not necessary,
as their sessions will clean up after themselves.
=cut
sub _shutdown {
my ($kernel, $self, $session) = @_[KERNEL, OBJECT, SESSION];
foreach my $cmd ( @{ $stops[$$self] } ) {
if (defined ($cmd->stop)) {
$self->Verbose("\t running $cmd 's stop \n" , 2 );
eval { $cmd->stop( $kernel, $self, $session ) }
}
}
$kernel->alarm_remove_all();
$kernel->alias_remove( $id[$$self] );
}
=item ControlAddState
POE Event handler that allows new state registrations.
=cut
sub ControlAddState {
my ( $kernel, $self, $command, $coderef, $method ) =
@_[ KERNEL, OBJECT, ARG0, ARG1, ARG2 ];
( run in 0.639 second using v1.01-cache-2.11-cpan-39bf76dae61 )