Actions Status GitHub Issues MetaCPAN Release Coverage

NAME

Aion::Emitter - диспетчер событий

SYNOPSIS

Файл lib/Event/BallEvent.pm:

package Event::BallEvent;

use Aion;

has radius => (is => 'rw', isa => Num);
has weight => (is => 'rw', isa => Num);

1;

Файл lib/Listener/RadiusListener.pm:

package Listener::RadiusListener;

use Aion;

#@listen Event::BallEvent
sub listen {
	my ($self, $event) = @_;
	
	$event->radius(10);
}

1;

Файл lib/Listener/WeightListener.pm:

package Listener::WeightListener;

use Aion;

#@listen Event::BallEvent
sub listen {
	my ($self, $event) = @_;
	
	$event->weight(12);
}

#@listen Event::BallEvent#mini „Minimize version”
sub minimize {
	my ($self, $event) = @_;
	
	$event->weight(3);
}

1;

Файл etc/annotation/listen.ann:

Listener::RadiusListener#listen,6=Event::BallEvent
Listener::WeightListener#listen,6=Event::BallEvent
Listener::WeightListener#minimize,6=Event::BallEvent#mini „Minimize version”
use lib 'lib';

use Aion::Emitter;
use Event::BallEvent;

my $emitter = Aion::Emitter->new;
my $ballEvent = Event::BallEvent->new;

$emitter->emit($ballEvent);

$ballEvent->radius # -> 10
$ballEvent->weight # -> 12

$ballEvent->radius(0);

$emitter->emit($ballEvent, "mini");

$ballEvent->weight # -> 3
$ballEvent->radius # -> 0

DESCRIPTION

Данный диспетчер событий реализует паттерн Event Dispatcher в котором событие определяется по классу объекта события (event).

Слушатель регистрируется как эон в плероме и будет всегда представлен одним объектом.

Метод обрабатывающий события отмечается аннотацией #@listen.

SUBROUTINES

emit ($event, [$key])

Излучает событие: вызывает все слушатели связанные с событием $event.

Дополнительный параметр $key позволяет указать уточняющее событие. Представьте, что у нас множество контроллеров и мы хотим излучить событие не для всех, а для каждого конкретного контроллера. Писать для каждого контроллера класс расширяющий класс запроса – расточительно.

$key может содержать буквы, цифры, подчёркивание, тире, двоеточие и точку.

AUTHOR

Yaroslav O. Kosmina dart@cpan.org

LICENSE

Perl5

COPYRIGHT

The Aion::Emitter module is copyright (c) 2026 Yaroslav O. Kosmina. Rusland. All rights reserved.