Sélectionner une révision Git
-
Maxime DESMARCHELIER a rédigéMaxime DESMARCHELIER a rédigé
EventHandler.pm 5,01 Kio
package EventHandler;
# Hash des évènements qui ont été ajoutés
my %changed_events = ();
# ###
# add_event
# Ajoute un handler (à utilisé dans une fonction, pas dans le module)
# ###
sub add_event
{
return 0 unless(_register_event(@_));
return _do_change_event($_[0]);
} # Fin add_event
# ###
# _register_event
# Enregistre un évènement dans le cache de ce module
# ###
sub _register_event
{
my ($event_type, $when, $ref_function, $ref_obj) = @_;
return 0 unless(defined($event_type) and defined($when) and defined($ref_function));
if($when !~ /^before$/i && $when !~ /^after$/i)
{
$::logger->error("'$when' not before nor after, not registering");
return 0;
}
unless(defined($changed_events{$event_type}))
{
$changed_events{$event_type} = {
'before' => [],
'after' => [],
'default' => undef
};
}
# Ajout de la fonction[+objet] à la liste pour cet évènement
push @{$changed_events{$event_type}{lc $when}}, [$ref_function, $ref_obj];
return 1;
} # Fin _register_event
# ###
# _do_change_event
# Change la fonction handler par défaut d'un évènement
# ###
sub _do_change_event
{
my $event_type = shift;
return 0 unless(defined($event_type));
# Changement (ou rien du tout si on est déjà passé par là pour cet event)
# de la fonction pour cet évènement
if(defined($Hook::conn->{_handler}->{$event_type}))
{
my $may_default = $Hook::conn->{_handler}->{$event_type}->[0];
if($may_default ne \&dispatch_event)
{
$changed_events{$event_type}{'default'} = $may_default;