Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
POEx::IRC::Backend
Perl Perl6

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
lib/POEx/IRC
t
.gitignore
Changes
README.mkdn
dist.ini

README.mkdn

NAME

POEx::IRC::Backend - IRC client or server sockets

SYNOPSIS

## Spawn a Backend and register as the controlling session.
my $backend = POEx::IRC::Backend->spawn(
  ## See POE::Component::SSLify (SSLify_Options):
  ssl_opts => [ ARRAY ],
);

$poe_kernel->post( $backend->session_id, 'register' );

$backend->create_listener(
  bindaddr => $addr,
  port     => $port,
  ## Optional:
  ipv6     => 1,
  ssl      => 1,
);

$backend->create_connector(
  remoteaddr => $remote,
  remoteport => $remoteport,
  ## Optional:
  bindaddr => $bindaddr,
  ipv6     => 1,
  ssl      => 1,
);

## Handle and dispatch incoming IRC events.
sub ircsock_input {
  my ($kernel, $self) = @_[KERNEL, OBJECT];

## POEx::IRC::Backend::Connect obj:
my $this_conn = $_[ARG0];

## IRC::Message::Object obj:
my $input_obj = $_[ARG1];

my $cmd = $input_obj->command;

  ## ... dispatch, etc ...
}

DESCRIPTION

A POE IRC backend socket handler using POE::Filter::IRCv3 and IRC::Toolkit.

This can be used by client/server libraries to speak IRC protocol via IRC::Message::Object objects.

This module is part of a set of IRC building blocks that have been split out of a much larger project; it is also early 'alpha-quality' software.

Take a gander at POE::Component::IRC for a fully-featured IRC library.

Attributes

controller

Retrieve the POE::Session ID for the backend's registered controller.

Predicate: has_controller

connectors

A HASH of active Connector objects, keyed on their wheel ID.

filter

A POE::Filter::Stackable instance consisting of the current "filter_irc" stacked with "filter_line" (at the time the attribute is built).

filter_irc

A POE::Filter::IRCv3 instance with colonify enabled, by default.

A client-side Backend will probably want a non-colonifying filter:

my $backend = POEx::IRC::Backend->new(
  filter_irc => POE::Filter::IRCv3->new(colonify => 0),
  ...
);

filter_line

A POE::Filter::Line instance.

listeners

HASH of active Listener objects, keyed on their wheel ID.

session_id

Returns the backend's session ID.

wheels

HASH of actively connected wheels, keyed on their wheel ID.

Methods

spawn

my $backend = POEx::IRC::Backend->spawn(
  ## Optional, needed for SSL-ified server-side sockets
  ssl_opts => [
    'server.key',
    'server.cert',
  ],
);

create_connector

$backend->create_connector(
  remoteaddr => $addr,
  remoteport => $addr,
  ## Optional:
  bindaddr => $local_addr,
  ipv6 => 1,
  ssl  => 1,
);

Attempts to create a POEx::IRC::Backend::Connector that holds a POE::Wheel::SocketFactory connector wheel; connectors will attempt to establish an outgoing connection immediately.

create_listener

$backend->create_listener(
  bindaddr => $addr,
  port     => $port,
  ## Optional:
  ipv6     => 1,
  ssl      => 1,
  idle     => $seconds,
);

Attempts to create a POEx::IRC::Backend::Listener that holds a POE::Wheel::SocketFactory listener wheel.

remove_listener

$backend->remove_listener(
  listener => $listener_id,
);

## or via addr, port, or combination thereof:
$backend->remove_listener(
  addr => '127.0.0.1',
  port => 6667,
);

Removes a listener and clears its wheel attribute; the socket shuts down when the POE::Wheel::SocketFactory wheel goes out of scope.

disconnect

$backend->disconnect($wheel_id, $disconnect_string);

Given a connection's wheel ID, mark the specified wheel for disconnection.

send

$backend->send(
  {
    prefix  => $prefix,
    params  => [ @params ],
    command => $cmd,
  },
  @connect_ids
);

use IRC::Message::Object 'ircmsg';
my $msg = ircmsg(
  command => 'PRIVMSG',
  params  => [ $chan, $string ],
);
$backend->send( $msg, $connect_id );

Feeds POE::Filter::IRCv3 and sends the resultant raw IRC line to the specified connection wheel ID(s).

Accepts either an IRC::Message::Object or a HASH compatible with POE::Filter::IRCv3 -- look there for details.

set_compressed_link

$backend->set_compressed_link( $conn_id );

Mark a specified connection wheel ID as pending compression; POE::Filter::Zlib::Stream will be added to the filter stack when the next flush event arrives.

set_compressed_link_now

$backend->set_compressed_link_now( $conn_id );

Add a POE::Filter::Zlib::Stream to the connection's filter stack immediately, rather than upon next flush event.

unset_compressed_link

$backend->unset_compressed_link( $conn_id );

Remove POE::Filter::Zlib::Stream from the connection's filter stack.

Received events

register

$poe_kernel->post( $backend->session_id,
  'register'
);

Register the sender session as the backend's controller session. The last session to send 'register' is the session that receives notification events from the backend component.

create_connector

Event interface to create_connector -- see "Methods"

create_listener

Event interface to create_listener -- see "Methods"

remove_listener

Event interface to remove_listener -- see "Methods"

send

Event interface to /send -- see "Methods"

shutdown

Disconnect all wheels and clean up.

Dispatched events

These events are dispatched to the controller session; see "register".

ircsock_compressed

Dispatched when a connection wheel has had a compression filter added.

$_[ARG0] is the connection's POEx::IRC::Backend::Connect

ircsock_connection_idle

Dispatched when a connection wheel has had no input for longer than specified idle time (see "create_listener" regarding idle times).

$_[ARG0] is the connection's POEx::IRC::Backend::Connect

ircsock_connector_failure

Dispatched when a Connector has failed due to some sort of socket error.

$_[ARG0] is the connection's POEx::IRC::Backend::Connector with wheel() cleared.

@_[ARG1 .. ARG3] contain the socket error details reported by POE::Wheel::SocketFactory; operation, errno, and errstr, respectively.

ircsock_connector_open

Dispatched when a Connector has established a connection to a peer.

$_[ARG0] is the POEx::IRC::Backend::Connect for the connection.

ircsock_disconnect

Dispatched when a connection wheel has been cleared.

$_[ARG0] is the connection's POEx::IRC::Backend::Connect with wheel() cleared.

ircsock_input

Dispatched when there is some IRC input from a connection wheel.

$_[ARG0] is the connection's POEx::IRC::Backend::Connect.

$_[ARG1] is an IRC::Message::Object.

ircsock_listener_created

Dispatched when a POEx::IRC::Backend::Listener has been created.

$_[ARG0] is the POEx::IRC::Backend::Listener instance; the instance's port() is altered based on getsockname() details after socket creation and before dispatching this event.

ircsock_listener_failure

Dispatched when a Listener has failed due to some sort of socket error.

$_[ARG0] is the POEx::IRC::Backend::Listener object.

@_[ARG1 .. ARG3] contain the socket error details reported by POE::Wheel::SocketFactory; operation, errno, and errstr, respectively.

ircsock_listener_open

Dispatched when a listener accepts a connection.

$_[ARG0] is the connection's POEx::IRC::Backend::Connect

$_[ARG1] is the connection's POEx::IRC::Backend::Listener

ircsock_listener_removed

Dispatched when a Listener has been removed.

$_[ARG0] is the POEx::IRC::Backend::Listener object.

ircsock_registered

Dispatched when a "register" event has been successfully received, as a means of acknowledging the controlling session.

$_[ARG0] is the Backend's $self object.

BUGS

Probably lots. Please report them via RT, e-mail, or GitHub (http://github.com/avenj/poex-irc-backend).

Tests are a bit incomplete, as of this writing. Zlib and SSL are mostly untested.

SEE ALSO

IRC::Toolkit

POE::Filter::IRCv3

AUTHOR

Jon Portnoy avenj@cobaltirc.org

Inspiration derived from POE::Component::Server::IRC::Backend and POE::Component::IRC by BINGOS, HINRIK et al

Something went wrong with that request. Please try again.