]> git.vpit.fr Git - perl/modules/Bit-MorseSignals.git/blobdiff - lib/Bit/MorseSignals/Receiver.pm
Make sure the POD headings are linkable
[perl/modules/Bit-MorseSignals.git] / lib / Bit / MorseSignals / Receiver.pm
index 42f6b4fcca68fefed9422077afbcaffb98c8899c..1eb7befe980215f25a39526ba1335299e42c68ce 100644 (file)
@@ -3,11 +3,11 @@ package Bit::MorseSignals::Receiver;
 use strict;
 use warnings;
 
-use Carp qw/croak/;
-use Encode qw/decode_utf8/;
-use Storable qw/thaw/;
+use Carp     qw<croak>;
+use Encode   qw<decode_utf8>;
+use Storable qw<thaw>;
 
-use Bit::MorseSignals qw/:consts/;
+use Bit::MorseSignals qw<:consts>;
 
 =head1 NAME
 
@@ -15,17 +15,17 @@ Bit::MorseSignals::Receiver - Base class for Bit::MorseSignals receivers.
 
 =head1 VERSION
 
-Version 0.01
+Version 0.08
 
 =cut
 
-our $VERSION = '0.01';
+our $VERSION = '0.08';
 
 =head1 SYNOPSIS
 
-    use Bit::MorseSignals;
+    use Bit::MorseSignals::Receiver;
 
-    my $pants = new Bit::MorseSignals::Receiver done => sub { print "received $_[1]!\n" };
+    my $pants = Bit::MorseSignals::Receiver->new(done => sub { print "received $_[1]!\n" });
     while (...) {
      my $bit = comes_from_somewhere_lets_say_signals();
      $pants->push($bit);
@@ -46,15 +46,17 @@ sub _check_self {
 
 =head1 METHODS
 
-=head2 C<< new [ done => $cb ] >>
+=head2 C<new>
 
-L<Bit::MorseSignal::Receiver> object constructor. With the C<'done'> option, you can specify a callback that will be triggered every time a message is completed, and in which C<$_[0]> will be the receiver object and C<$_[1]> the message received.
+    my $bmr = Bit::MorseSignals::Receiver->new(done => $cb);
+
+L<Bit::MorseSignals::Receiver> object constructor. With the C<'done'> option, you can specify a callback that will be triggered every time a message is completed, and in which C<$_[0]> will be the receiver object and C<$_[1]> the message received.
 
 =cut
 
 sub new {
  my $class = shift;
$class = ref $class || $class || return;
return unless $class = ref $class || $class;
  croak 'Optional arguments must be passed as key => value pairs' if @_ % 2;
  my %opts = @_;
  my $self = {
@@ -66,7 +68,9 @@ sub new {
  return $self;
 }
 
-=head2 C<push $bit>
+=head2 C<push>
+
+    $bmr->push($bit);
 
 Tells the receiver that you have received the bit C<$bit>. Returns true while the message isn't completed, and C<undef> as soon as it is.
 
@@ -98,7 +102,12 @@ sub push {
     substr $self->{buf}, -$base, $base, '';
     my @demanglers = (sub { $_[0] }, \&decode_utf8, \&thaw  );
     #        BM_DATA_{PLAIN,         UTF8,          STORABLE}
-    $self->{msg} = $demanglers[$self->{type}]->($self->{buf});
+    $self->{msg} = defined $demanglers[$self->{type}]
+                    ? do {
+                       local $SIG{__DIE__} = sub { warn @_ };
+                       $demanglers[$self->{type}]->($self->{buf})
+                      }
+                    : $self->{buf};
     $self->reset;
     $self->{done}->($self, $self->{msg}) if $self->{done};
     return;
@@ -109,9 +118,10 @@ sub push {
 
   vec($self->{buf}, $self->{len}++, 1) = $bit;
   if ($self->{len} >= 3) {
-   my $type = 2 * vec($self->{buf}, 0, 1)
-                + vec($self->{buf}, 1, 1);
-   @{$self}{qw/state type buf len/} = (3, $type, '', 0);
+   my $type = 2 * vec($self->{buf}, 1, 1)
+                + vec($self->{buf}, 0, 1);
+   $type = BM_DATA_PLAIN if vec($self->{buf}, 2, 1);
+   @{$self}{qw<state type buf len>} = (3, $type, '', 0);
   }
 
  } elsif ($self->{state} == 1) { # end of signature
@@ -123,7 +133,7 @@ sub push {
 
  } else { # first bit
 
-  @{$self}{qw/state sig sig_bit sig_len buf len/}
+  @{$self}{qw<state sig sig_bit sig_len buf len>}
            = (1,    '', $bit,   1,      '', 0  );
   vec($self->{sig}, 0, 1) = $bit;
 
@@ -142,7 +152,7 @@ sub reset {
  my ($self) = @_;
  _check_self($self);
  $self->{state} = 0;
- @{$self}{qw/sig sig_bit sig_len type buf len/} = ();
+ @{$self}{qw<sig sig_bit sig_len type buf len>} = ();
  return $self;
 }
 
@@ -184,9 +194,9 @@ L<Bit::MorseSignals>, L<Bit::MorseSignals::Emitter>.
 
 =head1 AUTHOR
 
-Vincent Pit, C<< <perl at profvince.com> >>
+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
 
@@ -198,6 +208,8 @@ You can find documentation for this module with the perldoc command.
 
     perldoc Bit::MorseSignals::Receiver
 
+Tests code coverage report is available at L<http://www.profvince.com/perl/cover/Bit-MorseSignals>.
+
 =head1 COPYRIGHT & LICENSE
 
 Copyright 2008 Vincent Pit, all rights reserved.