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{TERM} = \&signal_TERM;
|
||||||
$SIG{INT} = \&signal_INT;
|
$SIG{INT} = \&signal_INT;
|
||||||
$SIG{HUP} = \&signal_HUP;
|
$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.
|
# Print startup message.
|
||||||
@@ -212,6 +215,10 @@ while (1) { sleep 1; }
|
|||||||
# Subroutines #
|
# Subroutines #
|
||||||
###############
|
###############
|
||||||
|
|
||||||
|
sub on_sigint {
|
||||||
|
println "Goodbye world!";
|
||||||
|
}
|
||||||
|
|
||||||
# Send data to socket.
|
# Send data to socket.
|
||||||
sub socksnd
|
sub socksnd
|
||||||
{
|
{
|
||||||
@@ -245,6 +252,7 @@ sub mod_load {
|
|||||||
# SIGTERM
|
# SIGTERM
|
||||||
sub signal_TERM
|
sub signal_TERM
|
||||||
{
|
{
|
||||||
|
API::Std::event_run("on_sigterm");
|
||||||
API::IRC::quit($_, "Caught SIGTERM") foreach (keys %SOCKET);
|
API::IRC::quit($_, "Caught SIGTERM") foreach (keys %SOCKET);
|
||||||
dbug "!!! Caught SIGTERM; terminating...";
|
dbug "!!! Caught SIGTERM; terminating...";
|
||||||
alog "!!! Caught SIGTERM; terminating...";
|
alog "!!! Caught SIGTERM; terminating...";
|
||||||
@@ -258,6 +266,7 @@ sub signal_TERM
|
|||||||
# SIGINT
|
# SIGINT
|
||||||
sub signal_INT
|
sub signal_INT
|
||||||
{
|
{
|
||||||
|
API::Std::event_run("on_sigint");
|
||||||
API::IRC::quit($_, "Caught SIGINT") foreach (keys %SOCKET);
|
API::IRC::quit($_, "Caught SIGINT") foreach (keys %SOCKET);
|
||||||
dbug "!!! Caught SIGINT; terminating...";
|
dbug "!!! Caught SIGINT; terminating...";
|
||||||
alog "!!! Caught SIGINT; terminating...";
|
alog "!!! Caught SIGINT; terminating...";
|
||||||
@@ -271,6 +280,7 @@ sub signal_INT
|
|||||||
# SIGHUP
|
# SIGHUP
|
||||||
sub signal_HUP
|
sub signal_HUP
|
||||||
{
|
{
|
||||||
|
API::Std::event_run("on_sighup");
|
||||||
dbug "!!! Caught SIGHUP but rehash is unavailable; ignoring";
|
dbug "!!! Caught SIGHUP but rehash is unavailable; ignoring";
|
||||||
alog "!!! 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
|
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.
|
* server:nspass removed. server:idstr added.
|
||||||
* Changed the way we parse strings to support multi-word
|
* Changed the way we parse strings to support multi-word
|
||||||
strings in config values.
|
strings in config values.
|
||||||
|
|||||||
+79
-1
@@ -11,7 +11,7 @@ use Exporter;
|
|||||||
our @ISA = qw(Exporter);
|
our @ISA = qw(Exporter);
|
||||||
our @EXPORT_OK = qw(conf_get trans err awarn);
|
our @EXPORT_OK = qw(conf_get trans err awarn);
|
||||||
|
|
||||||
my (%LANGE, %MODULE);
|
my (%LANGE, %MODULE, %EVENTS, %HOOKS);
|
||||||
|
|
||||||
|
|
||||||
# Initialize a module.
|
# 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.
|
# Configuration value getter.
|
||||||
sub conf_get
|
sub conf_get
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in new issue
Block a user