NAME
      POE::Session::MessageBased - a message-based (not @_
      based) POE::Session

SYNOPSIS
        use POE::Kernel;
        use POE::Session::MessageBased;

        POE::Session::MessageBased->create
          ( inline_states =>
            { _start => sub {
                my $message = shift;
                print "Started.\n";
                $message->kernel->yield( count => 2 );
              },
              count => sub {
                my ($message, $count) = @_;
                print "Counted to $count.\n";
                if ($count < 10) {
                  $message->kernel->yield( count => ++$count );
                }
              },
              _stop => sub {
                print "Stopped.\n";
              }
            },
          );

        POE::Kernel->run();


DESCRIPTION
      POE::Session::MessageBased exists mainly to replace
      @_[KERNEL, etc.]  with message objects that encapsulate
      various aspects of each event.  It also exists as an exam-
      ple of a subclassed POE::Session, in case someone wants to
      create new callback or Session semantics.

      People generally balk at the @_[KERNEL, etc.] calling con-
      vention that POE uses by default.  The author defends the
      position that this calling convention is a simple combina-
      tion of common Perl features.  Interested people can read
      http://poe.perl.org/?POE_FAQ/calling_convention for a more
      detailed account.

      Anyway, POE::Session::MessageBased subclasses POE::Session
      and works almost identically to it.  The major change is
      the way event handlers (states) are called.

      Inline (coderef) handlers gather their parameters like
      this.

        my ($message, @args) = @_;

      Package and object-oriented handlers receive an additional
      parameter representing the package or object.  This is
      part of the common calling convention that Perl uses.

        my ($package, $message, @args) = @_;  # Package states.
        my ($self, $message, @args) = @_;     # Object states.

      The $message parameter is an instance of
      POE::Session::Message, which is not documented elsewhere.
      POE::Session::Message encapsulates every POE parameter and
      provides accessors for them.

        POE::Session             POE::Session::MessageBased
        ------------------------ -----------------------------------
        $_[OBJECT]               $package, or $self
        $_[SESSION]              $message->session
        $_[KERNEL]               $message->kernel
        $_[HEAP]                 $message->heap
        $_[STATE]                $message->state
        $_[SENDER]               $message->sender
        $_[CALLER_FILE]          $message->caller_file
        $_[CALLER_LINE]          $message->caller_line
        @_[ARG0..$#_]            $message->args (in list context)

      You do not need to use POE::Session::Message yourself.  It
      is included in POE::Session::MessageBased itself.

BUGS
      $message->args() always returns a list: @_[ARG0..$#_].  It
      would be nice to return a list reference in scalar con-
      text.

AUTHOR & LICENSE
      POE::Session::MessageBased is Copyright 2002-2010 by Rocco
      Caputo.  All rights are reserved.  POE::Session::Message-
      Based is free software; you may redistribute it and/or
      modify it under the same terms as Perl itself.

      The author may be contacted by e-mail via
      [email protected].