#!/usr/bin/perl package Devel::Events::Handler::Multiplex; # ABSTRACT: Delegate events to multiple handlers our $VERSION = '0.09'; use Moose; with qw/Devel::Events::Handler/; use Set::Object; has '_handlers' => ( is => 'ro', isa => 'Set::Object', default => sub { Set::Object->new }, ); sub BUILD { my ( $self, $param ) = @_; if ( my $handlers = $param->{handlers} ) { $self->add_handler( @$handlers ); } } sub add_handler { my ( $self, @h ) = @_; $self->_handlers->insert(@h); } sub remove_handler { my ( $self, @h ) = @_; $self->_handlers->remove(@h); } sub handlers { my ( $self, @h ) = @_; if ( @h ) { $self->_handlers( Set::Object->new(@h) ); } $self->_handlers->members; } sub new_event { my ( $self, @event ) = @_; foreach my $handler ( $self->handlers ) { $handler->new_event(@event); } } __PACKAGE__; __END__ =pod =encoding UTF-8 =head1 NAME Devel::Events::Handler::Multiplex - Delegate events to multiple handlers =head1 VERSION version 0.09 =head1 SYNOPSIS use Devel::Events::Handler::Multiplex; my $h = Devel::Events::Handler::Multiplex->new( handlers => \@handlers, ); $h->add_handler( $other_handler ); $h->new_event( ... ); $h->remove_handler( $some_handler ); =head1 DESCRIPTION This handler repeats events to any number of sub handlers. It is useful as a central hub, delegating to any number of sub listeners, from any number of generators. =head1 METHODS =over 4 =item new_event @handlers Delegates the event to every one of the sub handlers. =item handlers Lists the handlers =item add_handler $handler Add a handler to the set of registered handlers. =item remove_handler $handler Remove a handler from the set of registered handlers. =back =head1 SUPPORT Bugs may be submitted through L (or L). =head1 AUTHOR יובל קוג'מן (Yuval Kogman) =head1 COPYRIGHT AND LICENCE This software is copyright (c) 2007 by יובל קוג'מן (Yuval Kogman). This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. =cut