3
0
mirror of https://github.com/pragma-/pbot.git synced 2024-11-20 02:49:49 +01:00

Add registerable atexit functionality and trap SIGINT

This commit is contained in:
Pragmatic Software 2014-05-16 22:11:31 +00:00
parent b1cb9fa200
commit d8d26b1cea
7 changed files with 21 additions and 12 deletions

View File

@ -163,13 +163,7 @@ sub ack_die {
my $self = shift; my $self = shift;
my ($from, $nick, $user, $host, $arguments) = @_; my ($from, $nick, $user, $host, $arguments) = @_;
$self->{pbot}->logger->log("$nick!$user\@$host made me exit.\n"); $self->{pbot}->logger->log("$nick!$user\@$host made me exit.\n");
$self->{pbot}->atexit();
# TODO: move all of those to an registerable atexit handler
$self->{pbot}->factoids->save_factoids;
$self->{pbot}->ignorelist->save_ignores;
$self->{pbot}->{quotegrabs}->{database}->end();
$self->{pbot}->{messagehistory}->{database}->end();
$self->{pbot}->conn->privmsg($from, "Good-bye.") if defined $from; $self->{pbot}->conn->privmsg($from, "Good-bye.") if defined $from;
$self->{pbot}->conn->quit("Departure requested."); $self->{pbot}->conn->quit("Departure requested.");
exit 0; exit 0;

View File

@ -46,6 +46,8 @@ sub initialize {
$self->{pbot} = $pbot; $self->{pbot} = $pbot;
$self->{factoidmodulelauncher} = PBot::FactoidModuleLauncher->new(pbot => $pbot); $self->{factoidmodulelauncher} = PBot::FactoidModuleLauncher->new(pbot => $pbot);
$self->{pbot}->{atexit}->register(sub { $self->save_factoids; return; });
} }
sub load_factoids { sub load_factoids {

View File

@ -45,6 +45,8 @@ sub initialize {
$self->{MSG_NICKCHANGE} = 3; # CHANGED NICK $self->{MSG_NICKCHANGE} = 3; # CHANGED NICK
$self->{pbot}->commands->register(sub { $self->recall_message(@_) }, "recall", 0); $self->{pbot}->commands->register(sub { $self->recall_message(@_) }, "recall", 0);
$self->{pbot}->{atexit}->register(sub { $self->{database}->end(); return; });
} }
sub get_message_account { sub get_message_account {

View File

@ -60,9 +60,9 @@ sub new {
} }
my ($class, %conf) = @_; my ($class, %conf) = @_;
my $self = bless {}, $class; my $self = bless {}, $class;
$self->initialize(%conf); $self->initialize(%conf);
$self->register_signal_handlers;
return $self; return $self;
} }
@ -108,6 +108,8 @@ sub initialize {
$self->{commands} = PBot::Commands->new(pbot => $self); $self->{commands} = PBot::Commands->new(pbot => $self);
$self->{timer} = PBot::Timer->new(timeout => 10); $self->{timer} = PBot::Timer->new(timeout => 10);
$self->{atexit} = PBot::Registerable->new();
$self->{select_handler} = PBot::SelectHandler->new(pbot => $self); $self->{select_handler} = PBot::SelectHandler->new(pbot => $self);
$self->{stdin_reader} = PBot::StdinReader->new(pbot => $self); $self->{stdin_reader} = PBot::StdinReader->new(pbot => $self);
@ -235,6 +237,16 @@ sub start {
} }
} }
sub register_signal_handlers {
my $self = shift;
$SIG{INT} = sub { $self->atexit; exit 0; };
}
sub atexit {
my $self = shift;
$self->{atexit}->execute_all;
}
#----------------------------------------------------------------------------------- #-----------------------------------------------------------------------------------
# Getters/Setters # Getters/Setters
#----------------------------------------------------------------------------------- #-----------------------------------------------------------------------------------

View File

@ -45,6 +45,8 @@ sub initialize {
#$self->{database} = PBot::Quotegrabs_Hashtable->new(pbot => $self->{pbot}, filename => $self->{filename}); #$self->{database} = PBot::Quotegrabs_Hashtable->new(pbot => $self->{pbot}, filename => $self->{filename});
$self->{database}->begin(); $self->{database}->begin();
$self->{pbot}->{atexit}->register(sub { $self->{database}->end(); return; });
#------------------------------------------------------------------------------------- #-------------------------------------------------------------------------------------
# The following could be in QuotegrabsCommands.pm, or they could be kept in here? # The following could be in QuotegrabsCommands.pm, or they could be kept in here?
#------------------------------------------------------------------------------------- #-------------------------------------------------------------------------------------

View File

@ -19,7 +19,6 @@ sub new {
} }
my ($class, %conf) = @_; my ($class, %conf) = @_;
my $self = bless {}, $class; my $self = bless {}, $class;
$self->initialize(%conf); $self->initialize(%conf);
return $self; return $self;
@ -27,7 +26,6 @@ sub new {
sub initialize { sub initialize {
my $self = shift; my $self = shift;
$self->{handlers} = []; $self->{handlers} = [];
} }
@ -67,7 +65,6 @@ sub register {
Carp::croak("Must pass subroutine reference to register()"); Carp::croak("Must pass subroutine reference to register()");
} }
# TODO: Check if subref already exists in handlers?
my $ref = { subref => $subref }; my $ref = { subref => $subref };
push @{ $self->{handlers} }, $ref; push @{ $self->{handlers} }, $ref;

View File

@ -13,7 +13,7 @@ use warnings;
# These are set automatically by the build/commit script # These are set automatically by the build/commit script
use constant { use constant {
BUILD_NAME => "PBot", BUILD_NAME => "PBot",
BUILD_REVISION => 580, BUILD_REVISION => 581,
BUILD_DATE => "2014-05-16", BUILD_DATE => "2014-05-16",
}; };