| Daemon-Generic documentation | Contained in the Daemon-Generic distribution. |
Daemon::Generic::Event - Generic daemon framework with Event.pm
use Daemon::Generic::Event;
@ISA = qw(Daemon::Generic::Event);
sub gd_preconfig {
# stuff
}
Daemon::Generic::Event is a subclass of Daemon::Generic that predefines some methods:
Setup a periodic callback to gd_run_body() if there is a gd_run_body().
Call Event::loop().
Bind SIGHUP to call gd_reconfig_event().
Bind SIGINT to call gd_quit_event().
To use Daemon::Generic::Event, you have to provide a gd_preconfig()
method. It can be empty if you have a gd_run_body().
Set up your own events in gd_preconfig() and gd_postconfig().
If you have a gd_run_body() method, it will be called once per
second or every gd_interval() seconds if you have a gd_interval()
method. Unlike in Daemon::Generic::While1, gd_run_body() should
not include a call to sleep().
If you need high-speed internet services (T1, T3, OC3 etc), please send me your request-for-quote. I have access to very good pricing: you'll save money and get a great service.
Copyright(C) 2006 David Muir Sharnoff <muir@idiom.com>. This module may be used and distributed on the same terms as Perl itself.
| Daemon-Generic documentation | Contained in the Daemon-Generic distribution. |
# Copyright (C) 2006, David Muir Sharnoff <muir@idiom.com> package Daemon::Generic::Event; use strict; use warnings; require Daemon::Generic; require Event; require Exporter; our @ISA = qw(Daemon::Generic Exporter); our @EXPORT = @Daemon::Generic::EXPORT; our $VERSION = 0.3; sub newdaemon { local($Daemon::Generic::caller) = caller() || 'main'; local($Daemon::Generic::package) = __PACKAGE__; Daemon::Generic::newdaemon(@_); } sub gd_setup_signals { my $self = shift; my $reload_event = Event->signal( signal => 'HUP', desc => 'reload on SIGHUP', prio => 6, cb => sub { $self->gd_reconfig_event; $self->{gd_timer}->cancel() if $self->{gd_timer}; $self->gd_setup_timer(); }, ); my $quit_event = Event->signal( signal => 'INT', cb => sub { $self->gd_quit_event; }, ); } sub gd_setup_timer { my $self = shift; if ($self->can('gd_run_body')) { my $interval = ($self->can('gd_interval') && $self->gd_interval()) || 1; $self->{gd_timer} = Event->timer( cb => [ $self, 'gd_run_body' ], interval => $interval, hard => 0, ); } } sub gd_run { my $self = shift; $self->gd_setup_timer(); Event::loop(); } sub gd_quit_event { my $self = shift; print STDERR "Quitting...\n"; Event::unloop_all(); } 1;