Author: dylan
Date: 2005-05-08 20:34:04 -0400 (Sun, 08 May 2005)
New Revision: 676

Added:
   trunk/main/core/lib/Haver/Base/
   trunk/main/core/lib/Haver/Base/Session.pm
Modified:
   trunk/
   trunk/main/server/lib/Haver/Server/Avatar.pm
   trunk/main/server/lib/Haver/Server/Container.pm
   trunk/main/server/lib/Haver/Server/Entity.pm
   trunk/main/server/lib/Haver/Server/Listener.pm
   trunk/main/server/lib/Haver/Server/Speaker.pm
Log:
Added Haver::Base::Session, for defining class-sessions.
Sort of like POE::Class on CPAN, but POE::Class says it is unstable.




Property changes on: trunk
___________________________________________________________________
Name: svk:merge
   - 1f59643a-e6e5-0310-bc24-f7d4c744f460:/haver/local/trunk:11166
1f59643a-e6e5-0310-bc24-f7d4c744f460:/haver/local/trunk-merge-10131:11178
27e50396-46e3-0310-8b22-ae223a1f35ce:/local:212
e9404bb1-7af0-0310-a7ff-e22194cd388b:/haver/local:945
edfcd8bd-4ce7-0310-a97e-bb1efd40edf3:/local:238
   + 1f59643a-e6e5-0310-bc24-f7d4c744f460:/haver/local/trunk:11166
1f59643a-e6e5-0310-bc24-f7d4c744f460:/haver/local/trunk-merge-10131:11178
27e50396-46e3-0310-8b22-ae223a1f35ce:/local:212
e9404bb1-7af0-0310-a7ff-e22194cd388b:/haver/local:947
edfcd8bd-4ce7-0310-a97e-bb1efd40edf3:/local:238

Added: trunk/main/core/lib/Haver/Base/Session.pm
===================================================================
--- trunk/main/core/lib/Haver/Base/Session.pm   2005-05-08 20:39:37 UTC (rev 
675)
+++ trunk/main/core/lib/Haver/Base/Session.pm   2005-05-09 00:34:04 UTC (rev 
676)
@@ -0,0 +1,46 @@
+# vim: set ts=4 sw=4 noexpandtab si ai sta tw=100:
+# This module is copyrighted, see end of file for details.
+package Haver::Base::Session;
+use Haver::Base '-Base';
+use POE::Session;
+
+our @EXPORT_BASE = qw(
+       OBJECT SESSION
+       KERNEL HEAP STATE
+       SENDER CALLER_FILE
+       CALLER_LINE ARG0
+       ARG1 ARG2 ARG3
+       ARG4 ARG5 ARG6
+       ARG7 ARG8 ARG9
+       state states
+);
+our $VERSION = 0.04;
+
+sub create {
+       my $this = shift;
+       my $what = ref $this ? 'object' : 'package';
+
+       create POE::Session (
+               "${what}_states" => [
+                       $this => $this->declared_states,
+               ],
+               args => [ @_ ],
+       )
+}
+
+*state           = \&states;
+*declared_states = \&_states;
+
+
+sub states (@) {
+       my $s = _states(scalar caller);
+       push @$s, @_;
+}
+
+
+# TODO: Inherit states.
+sub _states {
+       my ($package) = @_;
+       no strict 'refs';
+       return [EMAIL PROTECTED]('::', $package, '_STATES')};
+}

Modified: trunk/main/server/lib/Haver/Server/Avatar.pm
===================================================================
--- trunk/main/server/lib/Haver/Server/Avatar.pm        2005-05-08 20:39:37 UTC 
(rev 675)
+++ trunk/main/server/lib/Haver/Server/Avatar.pm        2005-05-09 00:34:04 UTC 
(rev 676)
@@ -1,7 +1,7 @@
 # vim: set ts=4 sw=4 expandtab si ai sta tw=104:
 # This module is copyrighted, see end of file for details.
 package Haver::Server::Avatar;
-use Haver::Server::Base qw( -Base );
+use Haver::Base qw( -Base );
 
 our $VERSION = 0.07;
 

Modified: trunk/main/server/lib/Haver/Server/Container.pm
===================================================================
--- trunk/main/server/lib/Haver/Server/Container.pm     2005-05-08 20:39:37 UTC 
(rev 675)
+++ trunk/main/server/lib/Haver/Server/Container.pm     2005-05-09 00:34:04 UTC 
(rev 676)
@@ -2,7 +2,7 @@
 # This module is copyrighted, see end of file for details.
 # This is a mixin class.
 package Haver::Server::Container;
-use Haver::Server::Base '-Base';
+use Haver::Base '-Base';
 
 our $VERSION = 0.04;
 

Modified: trunk/main/server/lib/Haver/Server/Entity.pm
===================================================================
--- trunk/main/server/lib/Haver/Server/Entity.pm        2005-05-08 20:39:37 UTC 
(rev 675)
+++ trunk/main/server/lib/Haver/Server/Entity.pm        2005-05-09 00:34:04 UTC 
(rev 676)
@@ -1,7 +1,7 @@
 # vim: set ts=4 sw=4 expandtab si ai sta tw=104:
 # This module is copyrighted, see end of file for details.
 package Haver::Server::Entity;
-use Haver::Server::Base '-Base';
+use Haver::Base '-Base';
 
 field -force => (id   => '_default_');
 field attr   => {};

Modified: trunk/main/server/lib/Haver/Server/Listener.pm
===================================================================
--- trunk/main/server/lib/Haver/Server/Listener.pm      2005-05-08 20:39:37 UTC 
(rev 675)
+++ trunk/main/server/lib/Haver/Server/Listener.pm      2005-05-09 00:34:04 UTC 
(rev 676)
@@ -1,35 +1,20 @@
 package Haver::Server::Listener;
-use Haver::Server::Base '-Base';
+use Haver::Base::Session '-Base';
 
 use POE;
 use POE::Wheel::SocketFactory;
-use Haver::Server::Speaker;
 
-sub create {
-       my $class = shift;
-       my %opts = @_;
-       unless (exists $opt{acceptor}) {
-               croak "Require parameter acceptor missing";
-       }
+states qw(
+       _start
+       _stop
+       _child
+       socket_birth
+       socket_fail
+       listen
+       unlisten
+       shutdown
+);
 
-       POE::Session->create(
-               package_states => [
-                       $class => [qw(
-                               _start
-                               _stop
-                               socket_birth
-                               socket_fail
-                               listen
-                               unlisten
-                               shutdown
-                       )],
-               ],
-               heap => {
-                       acceptor => $opt{acceptor},
-               },
-       );
-}
-
 sub _start {
        my ($kernel, $heap) = @_[KERNEL, HEAP];
        

Modified: trunk/main/server/lib/Haver/Server/Speaker.pm
===================================================================
--- trunk/main/server/lib/Haver/Server/Speaker.pm       2005-05-08 20:39:37 UTC 
(rev 675)
+++ trunk/main/server/lib/Haver/Server/Speaker.pm       2005-05-09 00:34:04 UTC 
(rev 676)
@@ -1,20 +1,18 @@
 package Haver::Server::Speaker;
-
-use Haver::Server::Session '-Base';
+use Haver::Base::Session '-Base';
 use POE::Wheel::ReadWrite;
 use POE::Driver::SysRW;
 
 
-
-map { state "_$_" => "on_$_" } qw( start stop default );
 states qw(
+       _start _stop _default
        input error flush
        cleanup shutdown
        fail oops
 );
 
 
-sub on_start {
+sub _start {
        my ($heap, $session, $kernel, $opt) = @_[ HEAP,  SESSION,  KERNEL,  
ARG0];
        my ($address, $socket, $port) = ($opt->{address}, delete $opt->{sock}, 
$opt->{port});
        
@@ -45,7 +43,7 @@
 }
 
 
-sub on_stop {
+sub _stop {
        my ($kernel, $heap, $session) = @_[KERNEL, HEAP, SESSION];
 
        my ($address, $port) = @$heap{qw(address port)};
@@ -53,14 +51,14 @@
 }
 
 
-sub on_ready {
+sub ready {
        my ($kernel, $heap, $session) = @_[KERNEL, HEAP, SESSION];
 
        $heap->{plugin}->unload('Haver::Server::Commands::Connection');
        $heap->{plugin}->load('Haver::Server::Commands::Channel');
 }
 
-sub on_default {
+sub default {
        my ($kernel, $heap, $event, $args) = @_[KERNEL, HEAP, ARG0, ARG1];
        
        my $cmd = $event;
@@ -72,7 +70,7 @@
        return 0;
 }
 
-sub on_input {
+sub input {
        my ($kernel, $heap, $args) = @_[KERNEL, HEAP, ARG0];
        
        my @copy = @$args;
@@ -104,7 +102,7 @@
 
 }
 
-sub on_flush {
+sub flush {
        my ($kernel, $heap) = @_[KERNEL, HEAP];
 
        if ($heap->{shutdown}) {
@@ -113,7 +111,7 @@
 }
 
 
-sub on_error {
+sub error {
        my ($kernel, $heap, $operation, $errnum, $errstr) = @_[KERNEL, HEAP, 
ARG0..ARG3];
 
        $kernel->post('Logger', 'error', 
@@ -124,7 +122,7 @@
 }
 
 
-sub on_shutdown {
+sub shutdown {
        my ($kernel, $heap, $session, @args) = @_[KERNEL, HEAP, SESSION, ARG0 
.. $#_];
        return if $heap->{shutdown};
 
@@ -136,12 +134,12 @@
        $kernel->yield('cleanup', @args);
 }
 
-sub on_cleanup {
+sub cleanup {
        my ($kernel, $heap, @args) = @_[KERNEL, HEAP, ARG0 .. $#_];
 
 }
 
-sub on_oops {
+sub oops {
        my ($kernel, $heap, $err, $data) = @_[KERNEL, HEAP, ARG0 .. $#_];
 
        if (not defined $data) {
@@ -156,7 +154,7 @@
        $kernel->yield('shutdown', 'OOPS');
 }
 
-sub on_fail {
+sub fail {
        my ($kernel, $heap, $cmd, $err, $data) = @_[KERNEL, HEAP, ARG0 .. $#_];
 
        if (not defined $data) {


Reply via email to