App-Pocosi
view release on metacpan or search on metacpan
lib/App/Pocosi/Status.pm view on Meta::CPAN
package App::Pocosi::Status;
BEGIN {
$App::Pocosi::Status::AUTHORITY = 'cpan:HINRIK';
}
BEGIN {
$App::Pocosi::Status::VERSION = '0.03';
}
use strict;
use warnings FATAL => 'all';
use Carp;
use IRC::Utils qw(decode_irc strip_color strip_formatting numeric_to_name);
use POE::Component::Server::IRC::Plugin qw(PCSI_EAT_NONE);
use Scalar::Util qw(looks_like_number);
sub new {
my ($package) = shift;
croak "$package requires an even number of arguments" if @_ & 1;
return bless { @_ }, $package;
}
sub PCSI_register {
my ($self, $ircd, %args) = @_;
$ircd->raw_events(1);
$ircd->plugin_register($self, 'SERVER', 'all');
return 1;
}
sub PCSI_unregister {
return 1;
}
sub verbose {
my ($self, $value) = @_;
$self->{Verbose} = $value;
return;
}
sub trace {
my ($self, $value) = @_;
$self->{Trace} = $value;
return;
}
sub _normalize {
my ($line) = @_;
$line = decode_irc($line);
$line = strip_color($line);
$line = strip_formatting($line);
return $line;
}
sub _dump {
my ($arg) = @_;
if (ref $arg eq 'ARRAY') {
my @elems;
for my $elem (@$arg) {
push @elems, _dump($elem);
}
return '['. join(', ', @elems) .']';
}
elsif (ref $arg eq 'HASH') {
my @pairs;
for my $key (keys %$arg) {
push @pairs, [$key, _dump($arg->{$key})];
}
return '{'. join(', ', map { "$_->[0] => $_->[1]" } @pairs) .'}';
}
elsif (ref $arg) {
require overload;
return overload::StrVal($arg);
}
elsif (defined $arg) {
return $arg if looks_like_number($arg);
return "'".decode_irc($arg)."'";
}
else {
return 'undef';
}
}
sub _event_debug {
my ($self, $ircd, $args, $event) = @_;
if (!defined $event) {
$event = (caller(1))[3];
$event =~ s/.*:://;
}
pop @$args;
my @output;
for my $i (0..$#{ $args }) {
push @output, "ARG$i: " . _dump(${ $args->[$i] });
}
$ircd->send_event_next(
'ircd_plugin_status',
$self,
'debug',
"$event: ".join(', ', @output),
);
return;
}
sub IRCD_connected {
my ($self, $ircd) = splice @_, 0, 2;
my $addr = ${ $_[1] };
my $port = ${ $_[2] };
my $peer = ${ $_[5] };
my $msg = "Connected to peer $peer on $addr:$port";
$self->_event_debug($ircd, \@_) if $self->{Trace};
$ircd->send_event_next('ircd_plugin_status', $self, 'normal', $msg);
return PCSI_EAT_NONE;
}
sub IRCD_socketerr {
my ($self, $ircd) = splice @_, 0, 2;
my $args = ${ $_[0] };
my $op = ${ $_[1] };
my $error = ${ $_[3] };
my $addr = $args->{remoteaddress};
my $port = $args->{remoteport};
my $peer = $args->{name};
my $msg = "Failed to connect to peer $peer on $addr:$port. Operation $op failed: $error";
$self->_event_debug($ircd, \@_) if $self->{Trace};
$ircd->send_event_next('ircd_plugin_status', $self, 'normal', $msg);
return PCSI_EAT_NONE;
}
sub IRCD_listener_add {
my ($self, $ircd) = splice @_, 0, 2;
my $port = ${ $_[0] };
( run in 2.391 seconds using v1.01-cache-2.11-cpan-59e3e3084b8 )