POE::Component::IRC::Plugin::FollowTail.3pm

Langue: en

Version: 2008-05-28 (ubuntu - 08/07/09)

Section: 3 (Bibliothèques de fonctions)

NAME

POE::Component::IRC::Plugin::FollowTail - A PoCo-IRC plugin to follow the tail of an ever-growing file

SYNOPSIS

  use POE qw(Component::IRC Component::IRC::Plugin::FollowTail);
 
  my $nickname = 'Flibble' . $$;
  my $ircname = 'Flibble the Sailor Bot';
  my $ircserver = 'irc.blahblahblah.irc';
  my $filename = '/some/such/file/here';
  my @channels = ( '#Blah', '#Foo', '#Bar' );
 
  my $irc = POE::Component::IRC->spawn( 
      nick => $nickname,
      server => $ircserver,
      port => $port,
      ircname => $ircname,
  ) or die "Oh noooo! $!";
 
  POE::Session->create(
      package_states => [
          main => [ qw(_start irc_001 irc_tail_input irc_tail_error irc_tail_reset) ],
      ],
  );
 
   $poe_kernel->run();
 
  sub _start {
      $irc->plugin_add( 'FollowTail' => POE::Component::IRC::Plugin::FollowTail->new( 
          filename => $filename,
      ));
      $irc->yield( register => 'all' );
      $irc->yield( connect => { } );
      return;
  }
 
  sub irc_001 {
      $irc->yield( join => $_ ) for @channels;
      return;
  }
 
  sub irc_tail_input {
      my ($kernel, $sender, $filename, $input) = @_[KERNEL, SENDER, ARG0, ARG1];
      $kernel->post( $sender, 'privmsg', $_, "$filename: $input" ) for @channels;
      return;
  }
 
  sub irc_tail_error {
      my ($kernel, $sender, $filename, $errnum, $errstring)
          = @_[KERNEL, SENDER, ARG0 .. ARG2];
      $kernel->post( $sender, 'privmsg', $_, "$filename: ERROR: $errnum $errstring" ) for @channels;
      $irc->plugin_del( 'FollowTail' );
      return;
  }
 
  sub irc_tail_reset {
      my ($kernel, $sender, $filename) = @_[KERNEL, SENDER, ARG0];
      $kernel->post( $sender, 'privmsg', $_, "$filename: RESET EVENT" ) for @channels;
      return;
  }
 
 

DESCRIPTION

POE::Component::IRC::Plugin::FollowTail is a POE::Component::IRC plugin that uses POE::Wheel::FollowTail to follow the end of an ever-growing file. It generates 'irc_tail_' prefixed events for each new record that is appended to its file.

METHODS

new

Takes two arguments:

'filename', the name of the file to tail, mandatory;

'filter', a POE::Filter object to pass to POE::Wheel::FollowTail, optional;

OUTPUT

The plugin generates the following additional POE::Component::IRC events:

irc_tail_input

Emitted for every complete record read. ARG0 will be the filename, ARG1 the record which was read.

irc_tail_error

Emitted whenever an error occurs. ARG0 will be the filename, ARG1 and ARG2 hold numeric and string values for $!, respectively.

irc_tail_reset

Emitted every time a file is reset. ARG0 will be the filename.

AUTHOR

Chris 'BinGOs' Williams

SEE ALSO

POE::Component::IRC

POE::Wheel::FollowTail