X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=lib%2FBit%2FMorseSignals%2FReceiver.pm;h=0eb8751ff293a7afa74ccbbe61cf3364e3d7ac2a;hb=f38dcd0ed41b4fd271ba4905528f992f9e2cd0fc;hp=87c0a5b3ad450980dc5087272aead1f40a937545;hpb=0288f57c6aaf2cb133df80f13d78af66ea094902;p=perl%2Fmodules%2FBit-MorseSignals.git diff --git a/lib/Bit/MorseSignals/Receiver.pm b/lib/Bit/MorseSignals/Receiver.pm index 87c0a5b..0eb8751 100644 --- a/lib/Bit/MorseSignals/Receiver.pm +++ b/lib/Bit/MorseSignals/Receiver.pm @@ -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; +use Encode qw; +use Storable qw; -use Bit::MorseSignals qw/:consts/; +use Bit::MorseSignals qw<:consts>; =head1 NAME @@ -15,17 +15,19 @@ Bit::MorseSignals::Receiver - Base class for Bit::MorseSignals receivers. =head1 VERSION -Version 0.04 +Version 0.08 =cut -our $VERSION = '0.04'; +our $VERSION = '0.08'; =head1 SYNOPSIS 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); @@ -33,7 +35,8 @@ our $VERSION = '0.04'; =head1 DESCRIPTION -Base class for L receivers. Please refer to this module for more general information about the protocol. +Base class for L receivers. +Please refer to this module for more general information about the protocol. Given a sequence of bits coming from the L protocol, the receiver object detects when a packet has been completed and then reconstructs the original message depending of the datatype specified in the header. @@ -46,15 +49,18 @@ sub _check_self { =head1 METHODS -=head2 C<< new < done => $cb > >> +=head2 C -L 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 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,9 +72,12 @@ sub new { return $self; } -=head2 C +=head2 C + + $bmr->push($bit); -Tells the receiver that you have received the bit C<$bit>. Returns true while the message isn't completed, and C as soon as it is. +Tells the receiver that you have received the bit C<$bit>. +Returns true while the message isn't completed, and C as soon as it is. =cut @@ -100,10 +109,8 @@ sub push { # BM_DATA_{PLAIN, UTF8, STORABLE} $self->{msg} = defined $demanglers[$self->{type}] ? do { - my $msg = eval { - $demanglers[$self->{type}]->($self->{buf}) - }; - $@ ? undef : $msg; + local $SIG{__DIE__} = sub { warn @_ }; + $demanglers[$self->{type}]->($self->{buf}) } : $self->{buf}; $self->reset; @@ -116,10 +123,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); + 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); + @{$self}{qw} = (3, $type, '', 0); } } elsif ($self->{state} == 1) { # end of signature @@ -131,7 +138,7 @@ sub push { } else { # first bit - @{$self}{qw/state sig sig_bit sig_len buf len/} + @{$self}{qw} = (1, '', $bit, 1, '', 0 ); vec($self->{sig}, 0, 1) = $bit; @@ -150,7 +157,7 @@ sub reset { my ($self) = @_; _check_self($self); $self->{state} = 0; - @{$self}{qw/sig sig_bit sig_len type buf len/} = (); + @{$self}{qw} = (); return $self; } @@ -184,7 +191,7 @@ An object module shouldn't export any function, and so does this one. =head1 DEPENDENCIES -L (standard since perl 5), L (since perl 5.007003), L (idem). +L (standard since perl 5), L (since perl 5.7.3), L (idem). =head1 SEE ALSO @@ -194,11 +201,12 @@ L, L. Vincent Pit, C<< >>, L. -You can contact me by mail or on #perl @ FreeNode (vincent or Prof_Vince). +You can contact me by mail or on C (vincent). =head1 BUGS -Please report any bugs or feature requests to C, or through the web interface at L. 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, or through the web interface at L. +I will be notified, and then you'll automatically be notified of progress on your bug as I make changes. =head1 SUPPORT @@ -206,6 +214,8 @@ You can find documentation for this module with the perldoc command. perldoc Bit::MorseSignals::Receiver +Tests code coverage report is available at L. + =head1 COPYRIGHT & LICENSE Copyright 2008 Vincent Pit, all rights reserved.