Added event_add|del|run() and hook_add|del() to API::Std for managing and running events/hooks.
This commit is contained in:
1 parent
359f219f22
commit
0024ebf7b0
3 files changed
+91
-1
No files matched your search
@@ -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";
|
||||
}
|
||||
@@ -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
@@ -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
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user