Audio-Daemon-MPG123

 view release on metacpan or  search on metacpan

MPG123.pm  view on Meta::CPAN

package Audio::Daemon::MPG123;

use IO::Socket::INET;
use IO::Select;
use vars qw($VERSION);
$VERSION='0.9Beta';

sub new {
  my ($proto, %arg)  = @_;
  my $class = ref($proto) || $proto;
  my $self = {};
  foreach my $k (qw/Allow Deny Server Port Log/) {
    $self->{$k} = $arg{$k} if (defined $arg{$k});
  }
  $self->{sep} = sprintf("%c", 255);
  $self->{subsep} = sprintf("%c", 254);
  bless($self, $class);
}

sub debug { my $self = shift; return $self->log('debug', @_); }
sub info { my $self = shift; return $self->log('info', @_); }
sub error { my $self = shift; return $self->log('error', @_); }
sub crit { my $self = shift; return $self->log('crit', @_); }
sub warn { my $self = shift; return $self->log('warn', @_); }

sub log {
  my $self = shift;
  my @caller = caller(2);
  # print "caller line is ".$caller[2]."\n";
  # ($package, $filename, $line, $subroutine, $hasargs,
  #  $wantarray, $evaltext, $is_require, $hints, $bitmask)
  if (defined $self->{Log}) {
    &{$self->{Log}}(@_, @caller);
    return 1;
  } else {
    return 0;
  }
}

sub socket {
  my $self = shift;
  if (ref $self->{socket} eq 'IO::Socket::INET') {
    $self->debug('caller requested existing socket');
    return $self->{socket} 
  }
  if (ref $self eq 'Audio::Daemon::MPG123::Server') {
    if (! defined $self->{Port}) {
      $self->crit("No Port defined for socket creation");
      return;
    }
    $self->{socket} = IO::Socket::INET->new(LocalPort => $self->{Port}, Proto=>'udp');
  } elsif (ref $self eq 'Audio::Daemon::MPG123::Client') {
    if (! defined $self->{Port} || ! defined $self->{Server}) {
      $self->crit("Need both the Port and Server defined for socket creation");
      return;
    }
    $self->{socket} = IO::Socket::INET->new(PeerPort => $self->{Port}, PeerAddr => $self->{Server}, Proto=>'udp');
  }
  if (! defined $self->{socket}) {
    $self->crit("Failed to initialize Socket: $!");
    return;
  }
  return $self->{socket};
}

1;

__END__

=head1 NAME

Audio::Daemon::MPG123 - UDP Daemon wrapper around Audio::Play::MPG123

=head1 SYNOPSIS

  This isn't called directly, but exists for inheritance reasons.

  use Audio::Daemon::MPG123::Server;
  # or 
  use Audio::Daemon::MPG123::Client;

=head1 DESCRIPTION

Audio::Daemon::MPG123 is a wrapper around Audio::Play::MPG123, adding two big 
features, Multiple clients accessing the same Audio::Play::MPG123 instance, and 
udp messaging allowing the client to be removed from the server.  There are 
other interesting features, but those were the two goals of this project.



( run in 1.130 second using v1.01-cache-2.11-cpan-5c0b1e786e0 )