From da7d90773b8acf3dde1731f81237bb451ab73e33 Mon Sep 17 00:00:00 2001 From: William Heimbigner Date: Thu, 14 Jan 2016 14:48:23 -0700 Subject: Allow multiple event handlers to be added for the same event. Increased version number to allow for depending on this ability --- lib/Net/IRC/Connection.pm | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) (limited to 'lib/Net/IRC/Connection.pm') diff --git a/lib/Net/IRC/Connection.pm b/lib/Net/IRC/Connection.pm index 65af574..b0ce1ec 100644 --- a/lib/Net/IRC/Connection.pm +++ b/lib/Net/IRC/Connection.pm @@ -161,7 +161,17 @@ sub _add_generic_handler { } } - $hash_ref->{lc $ev} = [ $ref, $rp ]; +# $hash_ref->{lc $ev} = [ @{$hash_ref->{lc $ev}}, [$ref, $rp] ]; + if (!defined($hash_ref->{lc $ev})) { + $hash_ref->{lc $ev} = [ ]; + } + if ($rp == 0) { + $hash_ref->{lc $ev} = [ $ref ]; + } elsif ($rp == 1) { + $hash_ref->{lc $ev} = [ $ref, @{$hash_ref->{lc $ev}} ]; + } elsif ($rp == 2) { + $hash_ref->{lc $ev} = [ @{$hash_ref->{lc $ev}}, $ref ]; + } } return 1; } @@ -498,20 +508,8 @@ sub handler { } else { return $self->_default($event, @_); } - - my ($code, $rp) = @{$handler}; - - # If we have args left, try to call the handler. - if ($rp == 0) { # REPLACE + foreach my $code (@{$handler}) { &$code($self, $event, @_); - } elsif ($rp == 1) { # BEFORE - &$code($self, $event, @_); - $self->_default($event, @_); - } elsif ($rp == 2) { # AFTER - $self->_default($event, @_); - &$code($self, $event, @_); - } else { - confess "Bad parameter passed to handler(): rp=$rp"; } warn "Handler for '$ev' called.\n" if $self->{_debug}; -- cgit v1.2.3