1
0
Fork 0
mirror of https://github.com/perlbot/perlbuut synced 2025-06-07 16:55:42 -04:00
perlbuut/lib/Bot/BB3/Roles/.svn/text-base/SocketMessageIRC.pm.svn-base
2009-12-05 00:02:04 -05:00

86 lines
1.6 KiB
Text

package Bot::BB3::Roles::SocketMessageIRC;
use POE;
use POE::Wheel::SocketFactory;
use POE::Wheel::ReadWrite;
use Socket;
use strict;
sub new {
my( $class, $conf, $pm ) = @_;
my $self = bless { conf => $conf }, $class;
$self->{session} = POE::Session->create(
object_states => [
$self => [ qw/_start new_connection failed_connection read_line socket_error/ ]
]
);
return $self;
}
sub _start {
my( $self, $kernel ) = @_[OBJECT,KERNEL];
$kernel->alias_set( __PACKAGE__ );
$self->{socketfactory} = POE::Wheel::SocketFactory->new(
BindAddress => '127.0.0.1',
BindPort => ( $self->{conf}->{roles}->{socketmessageirc}->{port} || 10090 ),
SocketDomain => AF_INET(),
SocketType => SOCK_STREAM(),
SocketProtocol => 'tcp',
ListenQueue => 50,
Reuse => 'on',
SuccessEvent => 'new_connection',
FailureEvent => 'failed_connection',
);
}
sub new_connection {
my( $self, $socket ) = @_[OBJECT,ARG0];
my $wheel = POE::Wheel::ReadWrite->new(
Handle => $socket,
Driver => POE::Driver::SysRW->new,
Filter => POE::Filter::Line->new,
InputEvent => "read_line",
ErrorEvent => "socket_error",
);
$self->{rw_wheels}->{$wheel->ID} = $wheel; # save our reference
}
sub failed_connection {
}
sub read_line {
my( $self, $kernel, $line ) = @_[OBJECT,KERNEL,ARG0];
my( $server, $nick, $channel, $message ) = split/\s*:\s*/, $line, 4;
warn "Receiving irc message: $server,$nick,$channel,$message\n";
$kernel->post(
"Bot::BB3::Roles::IRC",
'external_message',
$server,
$nick,
$channel,
$message
);
}
sub socket_error {
my( $self, $wheel_id ) = @_[OBJECT,ARG3];
delete $self->{rw_wheels}->{$wheel_id};
}
1;