The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
package RunApp::Control::AppControl;
use strict;
require App::Control::Apache;
require YAML;
use base qw(RunApp::Control);
use Config;

sub build {
  my $self = shift;
  my ($conf) = @_;

  $self->{CONTROL} ||= 'App::Control';
  $self->load($self->{CONTROL});

  $self->{control} = $self->{CONTROL}->new
      ( EXEC => $self->{binary},
        ARGS => $self->{args},
        PIDFILE => $conf->{pidfile},
        SLEEP => 1,
        LOOP => 1);

  $self->write;
}

sub dispatch {
  my ($self, $cmd) = @_;
  if ($self->{control}) {
    $self->{control}->$cmd;
  } else {
    system ($self->{file}, $cmd);
  }
}

sub write {
  my $self = shift;
  open my $fh, '>', $self->{file} or die "$self->{file}: $!";
  #warn ". building $self->{file}\n";
  my $control = YAML::Dump ($self->{control});

  my $perl = $Config{'perlpath'};
  $perl = $^X if $^O eq 'VMS';

  print $fh (<< ".");
#!$perl -w
use strict;
use App::Control::Apache;
require YAML;
my \$cmd = shift or die "\$0: <start|stop|restart|graceful|hup|status>\\n";
YAML::Load ( << 'YAML')->dispatch (\$cmd);
$control
YAML

.
}

=head1 NAME

RunApp::Control::AppControl - Class for controlling daemon with App::Control

=head1 SYNOPSIS

 see RunApp::Apache

=head1 DESCRIPTION

The class writes to a perl script that uses App::Control to control
the daemon in the C<build> phase of L<RunApp>, and invokes the control
script in other phases.

=head1 SEE ALSO

L<App::Control>

=head1 AUTHORS

Chia-liang Kao <clkao@clkao.org>

=head1 COPYRIGHT

Copyright (C) 2002-5, Fotango Ltd.

This module is free software; you can redistribute it or modify it
under the same terms as Perl itself.

=cut

1;