Event::Emitter
Event::Emitter
An extendable JS like event emitter but way more fun. Can use supplies or channels and is basically just some syntax sugar on already implemented Perl6 features.
Syntax
Out of the box functionality
Single thread
Event::Emitter
uses a Supply
in the back end
use Event::Emitter;
my Event::Emitter $e .= new;
# hey, i work with regex
$e.on(/^^ "Some regex"/, -> $data {
qw<do something with your $data here>;
});
# your own callables to match events
my $event = { 'some flag' => 3, 'some other flag' => 5 };
$e.on({ $event<some flag> // Nil eq $*STATE }, -> $data {
qw<do something with your $data here>;
});
# plain ol strings, just like mom used to make
$e.on('some str', -> $data {
qw<do something with your $data here>;
});
# runs the some str listener
$e.emit('some str', @(1 .. 5));
# runs the regex because it matches the regex;
$e.emit('Some regex', { conn => IO::Socket::INET });
$e.emit({ 'some flag' => 5 }, { });
Thread
Event::Emitter
uses a Channel
in the back end
use Event::Emitter;
my Event::Emitter $e .= new(:threaded);
Rolling your own Event::Emitter
Want to make your own receiver/emitter? Here's a template
Your new .pm6 file
use Event::Emitter::Role::Handler;
unit class My::Own::Emitter does Event::Emitter::Role::Handler;
method on($event, $data) {
qw<do your thing>;
}
method emit($event, $data?) {
qw<do your thing here>;
}
Later in your .pl6
use Event::Emitter;
my $e = Event::Emitter.new(:class<My::Own::Emitter>);
License
Free for all.