App-Pocoirc
view release on metacpan or search on metacpan
lib/App/Pocoirc.pm view on Meta::CPAN
package App::Pocoirc;
BEGIN {
$App::Pocoirc::AUTHORITY = 'cpan:HINRIK';
}
{
$App::Pocoirc::VERSION = '0.47';
}
use strict;
use warnings FATAL => 'all';
use App::Pocoirc::Status;
use Class::Load qw(try_load_class);
use Fcntl qw(O_CREAT O_EXCL O_WRONLY);
use File::Glob ':glob';
use File::Spec::Functions 'rel2abs';
use IO::Handle;
use IRC::Utils qw(decode_irc);
use POE;
use POE::Component::Client::DNS;
use POSIX 'strftime';
use Scalar::Util 'looks_like_number';
sub new {
my ($package, %args) = @_;
return bless \%args, $package;
}
sub run {
my ($self) = @_;
# we print IRC output, which will be UTF-8
binmode $_, ':utf8' for (*STDOUT, *STDERR);
if ($self->{list_plugins}) {
require Module::Pluggable;
Module::Pluggable->import(
sub_name => '_available_plugins',
search_path => 'POE::Component::IRC::Plugin',
);
for my $plugin (sort $self->_available_plugins()) {
$plugin =~ s/^POE::Component::IRC::Plugin:://;
print $plugin, "\n";
}
return;
}
$self->_setup();
if ($self->{check_cfg}) {
print "The configuration is valid and all modules could be compiled.\n";
return;
}
if ($self->{daemonize}) {
require Proc::Daemon;
eval {
Proc::Daemon::Init->();
if (defined $self->{log_file}) {
open STDOUT, '>>:encoding(utf8)', $self->{log_file}
or die "Can't open $self->{log_file}: $!\n";
open STDERR, '>>&STDOUT' or die "Can't redirect STDERR: $!\n";
STDOUT->autoflush(1);
}
$poe_kernel->has_forked();
};
chomp $@;
die "Can't daemonize: $@\n" if $@;
}
if (defined $self->{pid_file}) {
sysopen my $fh, $self->{pid_file}, O_CREAT|O_EXCL|O_WRONLY
or die "Can't create pid file or it already exists. Pocoirc already running?\n";
print $fh "$$\n";
close $fh;
}
POE::Session->create(
object_states => [
$self => [qw(
_start
sig_die
sig_int
sig_term
irc_plugin_add
irc_plugin_del
irc_plugin_error
irc_plugin_status
irc_network
irc_shutdown
)],
$self => {
irc_432 => 'irc_432_or_433',
( run in 2.062 seconds using v1.01-cache-2.11-cpan-140bd7fdf52 )