NAME

Sprocket::Plugin - Base class for Sprocket plugins

SYNOPSIS

use Sprocket qw( Plugin );
use base qw( Sprocket::Plugin );

sub new {
    shift->SUPER::new(
        name => 'MyPlugin',
        @_
    );
}

sub as_string {
    __PACKAGE__;
}

...

ABSTRACT

This is a base class for Sprocket plugins. It provides several default methods for easy plugin implementation.

NOTES

A plugin can define any of the methods below. All are optional, but a plugin should have a conncted and a receive method for it to function. See the Sprocket site for examples. http://sprocket.cc/ Plugins should use the template in the SYNOPSIS.

Also, this module is a subclass of Class::Accessor::Fast, so subclasses of Sprocket::Plugin can create accessors like so (in your new() method):

__PACKAGE__->mk_accessors( qw( foo bar baz ) );

EVENTS

Server Event Methods

These are methods that can be defined in a plugin for Sprocket server instances

local_accept

Called with ( $self, $server, $con, $socket ) Defining this method is optional. The default behavior is to accept the connection. You can call $con->reject() or $con->accept() to reject or accept a connection. You can also call $self->take_connection( $con ); in this phase. See Sprocket::Connection for more information on the accept and reject methods.

local_connected

Called with ( $self, $server, $con, $socket ) This is the last chance for a plugin to take a connection with $self->take_connection( $con ); You should apply your filters for the connection in this method. See Sprocket::Connection for details on how to access the connection's filters.

local_receive

Called with ( $self, $server, $con, $data ) $data is the data from the filter applied to the connection.

Note: A connection's active time doesn't update automaticly for this event. You can call $con->active(), see Sprocket::Connection.

local_disconnected

Called with ( $self, $server, $con, $error ) If error is true, then $operation, $errnum, and $errstr will also be defined after $error. If a connection was closed with $con->close() then $error will be false. If a connection was closed remotely but without an error then $error will be true, but $errnum will be 0. For more details, see ErrorEvent in POE::Wheel::ReadWrite.

local_error

Called with ( $self, $server, $operation, $errnum, $errstr ) This is only called when there is an error with the server wheel, like a bind error. ( $errnum will == EADDRINUSE, after: use Errno qw( EADDRINUSE ); ) The default behavior will be to shutdown the server if there is a bind error.

local_time_out

Called with ( $self, $server, $con, $time ) A time out occurred on the connection. This means the $con->active_time + $con->time_out is less than $time. You can choose to $con->close() or not. The default behavior is to close the connection. This event will only occur if you have set a time out with $con->set_time_out( $seconds )

local_shutdown

Called with ( $self, $server, $con ) This is currently only called when a soft shutdown is initiated. You should make cleanup arrangements and close the connection asap. The server will wait for all connections to close. See the shutdown command in Sprocket::Server, and Sprocket::Client.

Client Event Methods

These are methods that can be defined in a plugin for Sprocket client instances

remote_accept

Why is there an accept method for client connections?! Well, good question. This method is here to allow you to set the filters and blocksize using the $con-accept method. See Sprocket::Connection

See local_accept.

remote_connected

See local_connected.

remote_receive

See local_receive.

remote_disconnected

See local_disconnected. You can call $con->reconnect() to attempt to reconnect to the host.

remote_connect_error

Called with ( $self, $client, $con ) If a connection wasn't attempted due to a DNS issue, $response_error, and $response_obj from POE::Component::DNS will follow $con. The remote_disconnected event will not be called. You can call $con->reconnect() to attempt to reconnect to the host.

remote_time_out

Called with ( $self, $client, $con, $time ) A time out occurred on the connection. This means the $con->active_time + $con->time_out is less than $time. You can choose to $con->close() or not. The default behavior is to close the connection. This event will only occur if you have set a time out with $con->set_time_out( $seconds )

remote_shutdown

See local_shutdown.

METHODS

$self->con_id_list

Returns a list of connection ids currently active conenctions taken by the plugin. Use $sprocket->get_connection() to get the connection reference. Note: con_id_list in a scalar context will return an array ref

foreach ( $self->con_id_list ) {
    if ( my $con = $sprocket->get_connection( $_ ) ) {
        $con->send( "you are client:".$con->ID );
    }
}
$self->take_connection( $con )

Assigns the connection to your plugin. Usually done during the accept or connect phase.

release_connection( $con );
spread_subscribe( [ 'group1', 'group2' ] );
spread_unsubscribe( [ 'group1', 'group2' ] );
spread_publish( [ 'group1', 'group2' ], $message, @etc );

SEE ALSO

Sprocket, Sprocket::Connection, Sprocket::AIO, Sprocket::Server, Sprocket::Client, Sprocket::Local

AUTHOR

David Davis <xantus@cpan.org>

COPYRIGHT AND LICENSE

Copyright 2006-2007 by David Davis

See Sprocket for license information.