Skip to content
Extraits de code Groupes Projets
Sélectionner une révision Git
  • 52e8d899e56938e5362ce173c84a102c9a16b0ec
  • arise par défaut
  • list
3 résultats

EventHandler.pm

Blame
  • 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;