NAME
POE::Session::Attribute - Use attributes to define your POE Sessions
SYNOPSIS
# in Some/Module.pm
package Some::Module ;
use base qw(POE::Session::Attribute) ;
use POE ;
sub _start : Package { # package state
my ($pkg, @args) = @_[OBJECT, ARG0 .. $#_] ;
...
}
sub stop : Object(_stop) { # object state, explicit state name
my ($self, ...) = @_[OBJECT, ...] ;
...
}
sub some_other_event : Inline { # inline state
print "boo hoo\n" ;
}
...
1 ;
# meanwhile, in some other file
use Some::Module ;
use POE ;
my $new_session_id =
Some::Module->spawn("your", {arguments => "here"}) ;
# or
my $new_session_id = Some::Module->create(
heap => [],
args => ["your", {arguments => "here"}]
) ;
...
POE::Kernel->run() ;
# Inheritance works, too
package Some::Module::Subclass ;
use base qw(Some::Module) ;
sub _stop : Object {
my ($self, @rest) = @_ ;
do_some_local_cleanup() ;
$self->SUPER::_stop(@rest) ; # you can call parent method, too
}
DESCRIPTION
This module's purpose is to save you some boilerplate code around POE::Session->create() method. Just inherit your class from POE::Session::Attribute and define some states using attributes. Method spawn()
in your package will be provided by POE::Session::Attribute (of course, you can override it, if any).
POE::Session::Attribute tries to be reasonably compatible with POE::Session::AttributeBased. As for now, all material test cases from POE::Session::AttributeBased distribution v0.03 run without errors with POE::Session::Attribute.
ATTRIBUTES
- sub your_sub : Package
- sub your_sub : Package(name, more_names, ...)
-
Makes a package state. If
name
is specified, it will be used as a state name. You can specify several names here. Otherwise, the name of your subroutine ("your_sub") will be used as state name. - sub your_sub : Inline
- sub your_sub : Inline(name, more_names, ...)
-
Makes an inline state. If
name
is specified, it will be used as a state name. You can specify several names here. Otherwise, the name of your subroutine ("your_sub") will be used as state name. - sub your_sub : state
-
Same as Inline. Added for compatibility with POE::Session::AttributeBased.
- sub your_sub : Object
- sub your_sub : Object(name, more_names, ...)
-
Makes an object state. If
name
is specified, it will be used as a state name. You can specify several names here. Otherwise, the name of your subroutine ("your_sub") will be used as state name.An instance of your class will be created by
create()
method, if at least one Object state is defined in your package. Methodnew()
from your package will be called to create the instance. Arguments for the call tonew()
will be the same as specified forspawn()
call (or, in other words, the same asargs
key tocreate()
method, see below).
METHODS
- new()
-
POE::Session::Attribute provides a default constructor (
bless {}, $class
). You can (and probably should) override it in your inheriting class.new()
will be called byspawn()
if at least one Object state is defined. - create([same as for POE::Session->create()])
-
Creates a new POE::Session based on your class/package. Accepts the same arguments as POE::Session->create() method (see POE::Session). You probably should not specify any of
inline_states
,object_states
andpackage_states
, because they will be constructed automatically from your code attributes.If you have Object states in your class,
create()
will callnew()
method from your class to construct a class instance.args
(fromcreate()
arguments) will be used as an argument list for this call.Yes, it's probably somewhat messy. Suggest a fix.
When called in scalar context, returns a reference to a newly created POE::Session (but make sure to read POE::Session documentation to see why you shouldn't use it). In list context, returns a reference to POE::Session and a reference to a newly created instance of your class (in case it was really created).
- spawn(@argument_list)
-
Same as
create
(args => [ @argument_list ])
SEE ALSO
POE, POE::Session, attributes, Attribute::Handlers.
There is a somewhat similar module on CPAN, POE::Session::AttributeBased. POE::Session::Attribute is pretty much API-compatible with it.
AUTHOR
dmitry kim, <dmitry.kim(at)gmail.com>
COPYRIGHT AND LICENSE
Copyright (C) 2006 by dmitry kim
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.7 or, at your option, any later version of Perl 5 you may have available.