Added event_add|del|run() and hook_add|del() to API::Std for managing and running events/hooks.

This commit is contained in:
Elijah Perrault committed 2011-01-21 13:54:53 -07:00
1 parent 359f219f22
commit 0024ebf7b0
3 files changed
+91 -1

No files matched your search

+10
View File
@@ -69,6 +69,9 @@ undef @BFVER;
$SIG{TERM} = \&signal_TERM;
$SIG{INT} = \&signal_INT;
$SIG{HUP} = \&signal_HUP;
API::Std::event_add("on_sigterm");
API::Std::event_add("on_sigint");
API::Std::event_add("on_sighup");
# Print startup message.
@@ -212,6 +215,10 @@ while (1) { sleep 1; }
# Subroutines #
###############
sub on_sigint {
println "Goodbye world!";
}
# Send data to socket.
sub socksnd
{
@@ -245,6 +252,7 @@ sub mod_load {
# SIGTERM
sub signal_TERM
{
API::Std::event_run("on_sigterm");
API::IRC::quit($_, "Caught SIGTERM") foreach (keys %SOCKET);
dbug "!!! Caught SIGTERM; terminating...";
alog "!!! Caught SIGTERM; terminating...";
@@ -258,6 +266,7 @@ sub signal_TERM
# SIGINT
sub signal_INT
{
API::Std::event_run("on_sigint");
API::IRC::quit($_, "Caught SIGINT") foreach (keys %SOCKET);
dbug "!!! Caught SIGINT; terminating...";
alog "!!! Caught SIGINT; terminating...";
@@ -271,6 +280,7 @@ sub signal_INT
# SIGHUP
sub signal_HUP
{
API::Std::event_run("on_sighup");
dbug "!!! Caught SIGHUP but rehash is unavailable; ignoring";
alog "!!! Caught SIGHUP but rehash is unavailable; ignoring";
}
+2
View File
@@ -3,6 +3,8 @@ Auto IRC Bot 3.0: Change Log
3.0 Indev
==================================================================
* Added event_add|del|run() and hook_add|del() to API::Std for
managing and running events/hooks.
* server:nspass removed. server:idstr added.
* Changed the way we parse strings to support multi-word
strings in config values.
+79 -1
View File
@@ -11,7 +11,7 @@ use Exporter;
our @ISA = qw(Exporter);
our @EXPORT_OK = qw(conf_get trans err awarn);
my (%LANGE, %MODULE);
my (%LANGE, %MODULE, %EVENTS, %HOOKS);
# Initialize a module.
@@ -101,6 +101,84 @@ sub cmd_del
}
# Add an event to Auto.
sub event_add
{
my ($name) = @_;
unless (defined $EVENTS{lc($name)}) {
$EVENTS{lc($name)} = 1;
return 1;
}
else {
API::Log::dbug("DEBUG: Attempt to add a pre-existing event[".lc($name)."]! Ignoring...");
return 0;
}
}
# Delete an event from Auto.
sub event_del
{
my ($name) = @_;
if (defined $EVENTS{lc($name)}) {
delete $EVENTS{lc($name)};
delete $HOOKS{lc($name)};
return 1;
}
else {
API::Log::dbug("DEBUG: Attempt to delete a non-existing event[".lc($name)."! Ignoring...");
return 0;
}
}
# Trigger an event.
sub event_run
{
my ($event) = @_;
if (defined $EVENTS{lc($event)} and defined $HOOKS{lc($event)}) {
foreach my $hk (keys %{ $HOOKS{lc($event)} }) {
&{ $HOOKS{lc($event)}{$hk} }();
}
}
return 1;
}
# Add a hook to Auto.
sub hook_add
{
my ($event, $name, $sub) = @_;
unless (defined $HOOKS{lc($name)}) {
if (defined $EVENTS{lc($event)}) {
$HOOKS{lc($event)}{lc($name)} = $sub;
return 1;
}
else {
return 0;
}
}
else {
return 0;
}
}
# Delete a hook from Auto.
sub hook_del
{
my ($event, $name) = @_;
if (defined $HOOKS{lc($event)}{lc($name)}) {
delete $HOOKS{lc($event)}{lc($name)};
return 1;
}
else {
return 0;
}
}
# Configuration value getter.
sub conf_get
{