]> git.vpit.fr Git - perl/modules/IPC-MorseSignals.git/blobdiff - lib/IPC/MorseSignals/Emitter.pm
This is 0.17
[perl/modules/IPC-MorseSignals.git] / lib / IPC / MorseSignals / Emitter.pm
index 940fd16c64e7b09f66b7b02a1a376c7c91257e7f..4a8be4f1fd6ac0a0979475fe60de031eac15e355 100644 (file)
@@ -3,12 +3,12 @@ package IPC::MorseSignals::Emitter;
 use strict;
 use warnings;
 
-use Carp qw/croak/;
-use POSIX qw/SIGUSR1 SIGUSR2/;
-use Time::HiRes qw/usleep/;
+use Carp        qw<croak>;
+use POSIX       qw<SIGUSR1 SIGUSR2>;
+use Time::HiRes qw<usleep>;
 
 use Bit::MorseSignals::Emitter;
-use base qw/Bit::MorseSignals::Emitter/;
+use base qw<Bit::MorseSignals::Emitter>;
 
 =head1 NAME
 
@@ -16,17 +16,23 @@ IPC::MorseSignals::Emitter - Base class for IPC::MorseSignals emitters.
 
 =head1 VERSION
 
-Version 0.13
+Version 0.17
 
 =cut
 
-our $VERSION = '0.13';
+our $VERSION = '0.17';
+
+=head1 WARNING
+
+Due to the POSIX signals specification (which I wasn't aware of at the time I wrote this module), this module is by nature completely unreliable and will never work properly.
+It is therefore B<deprecated>.
+Please don't use it (if you were actually crazy enough to use it).
 
 =head1 SYNOPSIS
 
     use IPC::MorseSignals::Emitter;
 
-    my $deuce = new IPC::MorseSignals::Emitter speed => 1024;
+    my $deuce = IPC::MorseSignals::Emitter->new(speed => 1024);
     $deuce->post('HLAGH') for 1 .. 3;
     $deuce->send($pid);
 
@@ -43,9 +49,18 @@ sub _check_self {
 
 =head1 METHODS
 
-=head2 C<< new < delay => $seconds, speed => $bauds, %bme_options > >>
+=head2 C<new>
+
+    my $ime = IPC::MorseSignals::Emitter->new(
+     delay => $seconds,
+     speed => $bauds,
+     %bme_options,
+    );
 
-Creates a new emitter object. C<delay> specifies the delay between two sends, in seconds, while C<speed> is the number of bits sent per second. The delay value has priority over the speed. Extra arguments are passed to L<Bit::MorseSignals::Emitter/new>.
+Creates a new emitter object.
+C<delay> specifies the delay between two sends, in seconds, while C<speed> is the number of bits sent per second.
+The delay value has priority over the speed, and defaults to 1 second.
+Extra arguments are passed to L<Bit::MorseSignals::Emitter/new>.
 
 =cut
 
@@ -66,9 +81,11 @@ sub new {
  bless $self, $class;
 }
 
-=head2 C<send $pid>
+=head2 C<send>
 
-Sends messages enqueued with L<Bit::MorseSignals::Emitter/post> to the process C<$pid> (or to all the C<@$pid> if C<$pid> is an array reference).
+    $ime->send($pid);
+
+Sends messages enqueued with L<Bit::MorseSignals::Emitter/post> to the process C<$pid> (or to all the C<@$pid> if C<$pid> is an array reference, in which case duplicated targets are stripped off).
 
 =cut
 
@@ -76,8 +93,10 @@ sub send {
  my ($self, $dest) = @_;
  _check_self($self);
  return unless defined $dest;
- my @dests = grep $_ > 0, ref $dest eq 'ARRAY' ? map int, grep defined, @$dest
-                                               : int $dest;
+ my %count;
+ my @dests = grep $_ > 0 && !$count{$_}++, # Remove duplicates.
+              ref $dest eq 'ARRAY' ? map int, grep defined, @$dest
+                                   : int $dest;
  return unless @dests;
  while (defined(my $bit = $self->pop)) {
   my @sigs = (SIGUSR1, SIGUSR2);
@@ -87,7 +106,10 @@ sub send {
  }
 }
 
-=head2 C<< delay < $seconds > >>
+=head2 C<delay>
+
+    my $delay = $ime->delay;
+    $ime->delay($seconds);
 
 Returns the current delay in seconds, or set it if an argument is provided.
 
@@ -100,7 +122,10 @@ sub delay {
  return $self->{delay};
 }
 
-=head2 C<< speed < $bauds > >>
+=head2 C<speed>
+
+    my $speed = $ime->speed;
+    $ime->speed($bauds);
 
 Returns the current speed in bauds, or set it if an argument is provided.
 
@@ -141,11 +166,12 @@ For truly useful IPC, search for shared memory, pipes and semaphores.
 
 Vincent Pit, C<< <perl at profvince.com> >>, L<http://www.profvince.com>.
 
-You can contact me by mail or on #perl @ FreeNode (vincent or Prof_Vince).
+You can contact me by mail or on C<irc.perl.org> (vincent).
 
 =head1 BUGS
 
-Please report any bugs or feature requests to C<bug-ipc-morsesignals-emitter at rt.cpan.org>, or through the web interface at L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=IPC-MorseSignals>.  I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
+Please report any bugs or feature requests to C<bug-ipc-morsesignals-emitter at rt.cpan.org>, or through the web interface at L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=IPC-MorseSignals>.
+I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
 
 =head1 SUPPORT
 
@@ -155,7 +181,7 @@ You can find documentation for this module with the perldoc command.
 
 =head1 COPYRIGHT & LICENSE
 
-Copyright 2007-2008 Vincent Pit, all rights reserved.
+Copyright 2007,2008,2013,2017 Vincent Pit, all rights reserved.
 
 This program is free software; you can redistribute it and/or modify it
 under the same terms as Perl itself.