NAME
AEAE::Command - a base class for an asynchroneous command.
AUTHOR
jerome.eteve@it-omics.com
SYNOPSIS
Use this class as a base class when you wand to implement an asynchroneous command usable by AEAE::Service.
You only have to inherit from this class and implement the methods _doItReal and (eventually) _killHandler .
See those methods for more details.
See AEAE::CommandExample for a simple example.
METHODS
new
Always override this method in subclasses in this way:
sub new{ my ($class) = @_ ;
my $self = $class->SUPER::new(@_);
bless $self, $class ;
return $self ;
}
YOU CANNOT DO ANOTHER WAY. Any attempt to make another constructor will fail.
runningpid
Get/Set the pid of the process running this command.
getSTDOUT
Get the standard ouput content of this command.
Usage:
my $stdout = $cmd->getSTDOUT();
getSTDERR
Same as getSTDOUT but for STDERR
isLocked
Returns true if is locked, false otherwise. Locked means that the process is not finished yet.
isDone
Returns true when it is done.
done
Set to true the done status. Can be used once.
oneStep
Use this to specifie the percentage of advance of this process.
suicide
Kill yourself !!
_doItReal
Overide this method in subclasses. This is the main method executing the action to be made asynchroneous.
You must implement this method as a regular synchroneous procedure. You cannot return anything.
Within this method, you can (and must) access the current command to indicate the framework where you are in your procedure. For instance, if you are at 50% done, call :
$AEAE::Command::processCommand->oneStep(50);
Example of implementation:
sub _doItReal{
my $self = shift ;
my $arg1 = shift ;
my $arg2 = shift ;
# ...
my $i = 0 ;
print "Ca commence !\n";
while( $i < 101){
$AEAE::Command::processCommand->oneStep($i);
print "Step ".$i."\n";
$i += 1 ;
select(undef, undef, undef, 0.25);
}
print "C'est fini !\n";
}
_killHandler
Called on myself when this command receive the order to suicide. Implement here release of ressources, termination of other process etc..
This method is called in the same memory space of the launched command. That means it is the same memory space as you are in the _doItReal method. Hence, any values setted in memory (for instance in $self->...) within the _doItReal method will be available here also.