POE::Session::AttributeBased - POE::Session syntax sweetener


POE-Session-AttributeBased documentation Contained in the POE-Session-AttributeBased distribution.

Index


Code Index:

NAME

Top

POE::Session::AttributeBased - POE::Session syntax sweetener

VERSION

Top

Version 0.10

SYNOPSIS

Top

    #!perl

    package Foo;

    use Test::More tests => 7;

    use POE;
    use base 'POE::Session::AttributeBased';

    sub _start : State {
	my $k : KERNEL;
	my $h : HEAP;

	ok( 1, "in _start" );

	$k->yield( tick => 5 );
    }

    sub tick : State {
	my $k     : KERNEL;
	my $count : ARG0;

	ok( 1, "in tick" );
	return 0 unless $count;

	$k->yield( tick => $count - 1 );
	return 1;
    }

    POE::Session->create(
	Foo->inline_states(),
    );

    POE::Kernel->run();
    exit;

ABSTRACT

Top

A simple attribute handler mixin that makes POE state easier to keep track of.

DESCRIPTION

Top

Provides an attribute handler that does some bookkeeping for state handlers. There have been a few of these classes for POE. This is probably the most minimal. It supports only the inline attribute syntax. but that seems sufficient for cranking up a POE session.

FUNCTIONS

Top

State

The state hander attribute. Never called directly.

Offset

POE::Session argument offset handler. This use of the DB module to get extra info from caller might be risky.

OBJECT =cut

SESSION =cut

KERNEL =cut

HEAP =cut

STATE =cut

SENDER =cut

CALLER_FILE =cut

CALLER_LINE =cut

CALLER_STATE =cut

ARG0 =cut

ARG1 =cut

ARG2 =cut

ARG3 =cut

ARG4 =cut

ARG5 =cut

ARG6 =cut

ARG7 =cut

ARG8 =cut

ARG9 =cut

inline_states

Returns the list of states in a format that is usable by POE::Session->create. Can also specify what to return as the hash key so that it is useful in packages like POE::Component::Server::TCP where the state list has a different tag.

AUTHOR

Top

Chris Fedde, <cfedde at cpan.org>

BUGS

Top

Please report any bugs or feature requests to bug-poe-attr at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=POE-Session-AttributeBased. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

SUPPORT

Top

You can find documentation for this module with the perldoc command.

    perldoc POE::Session::AttributeBased

You can also look for information at:

* AnnoCPAN: Annotated CPAN documentation

http://annocpan.org/dist/POE-Session-AttributeBased

* CPAN Ratings

http://cpanratings.perl.org/d/POE-Session-AttributeBased

* RT: CPAN's request tracker

http://rt.cpan.org/NoAuth/Bugs.html?Dist=POE-Session-AttributeBased

* Search CPAN

http://search.cpan.org/dist/POE-Session-AttributeBased

ACKNOWLEDGEMENTS

Top

COPYRIGHT & LICENSE

Top


POE-Session-AttributeBased documentation Contained in the POE-Session-AttributeBased distribution.
package POE::Session::AttributeBased;
use 5.008000;
use Attribute::Handlers;
require POE::Session;    # for the offset constants

use warnings;
use strict;

our $VERSION = '0.10';

my %State;

sub State : ATTR(CODE) {
    my ( $package, $symbol, $code, $attribute, $data ) = @_;

    $State{$package}{ *{$symbol}{NAME} } = $code;
}

sub Offset {
    my $ref       = $_[2];
    my $attribute = $_[3];

    package DB;
    my @x = caller(5);
    $$ref = $DB::args[ POE::Session->$attribute() ];
}

sub OBJECT       : ATTR(SCALAR) { Offset @_; }

sub SESSION      : ATTR(SCALAR) { Offset @_; }

sub KERNEL       : ATTR(SCALAR) { Offset @_; }

sub HEAP         : ATTR(SCALAR) { Offset @_; }

sub STATE        : ATTR(SCALAR) { Offset @_; }

sub SENDER       : ATTR(SCALAR) { Offset @_; }

sub CALLER_FILE  : ATTR(SCALAR) { Offset @_; }

sub CALLER_LINE  : ATTR(SCALAR) { Offset @_; }

sub CALLER_STATE : ATTR(SCALAR) { Offset @_; }

sub ARG0         : ATTR(SCALAR) { Offset @_; }

sub ARG1         : ATTR(SCALAR) { Offset @_; }

sub ARG2         : ATTR(SCALAR) { Offset @_; }

sub ARG3         : ATTR(SCALAR) { Offset @_; }

sub ARG4         : ATTR(SCALAR) { Offset @_; }

sub ARG5         : ATTR(SCALAR) { Offset @_; }

sub ARG6         : ATTR(SCALAR) { Offset @_; }

sub ARG7         : ATTR(SCALAR) { Offset @_; }

sub ARG8         : ATTR(SCALAR) { Offset @_; }

sub ARG9         : ATTR(SCALAR) { Offset @_; }

sub inline_states {
    my $tag = $_[1] || 'inline_states';

    return ( $tag => $State{ ( caller() )[0] } );
}

1;    # End of POE::Session::AttributeBased