Author: dylan
Date: 2005-06-24 23:55:43 -0400 (Fri, 24 Jun 2005)
New Revision: 815

Modified:
   trunk/
   trunk/perl/server/lib/Haver/Server.pm
   trunk/perl/server/lib/Haver/Server/Config.pm
   trunk/perl/server/lib/Haver/Server/Entity/User.pm
   trunk/perl/server/lib/Haver/Server/Listener.pm
   trunk/perl/server/lib/Haver/Server/Talker.pm
   trunk/perl/server/lib/Haver/Server/Wheel/Login.pm
   trunk/perl/server/lib/Haver/Server/Wheel/Main.pm
Log:
 [EMAIL PROTECTED]:  dylan | 2005-06-24 23:55:27 -0400
 Now using the Listener-closure system.
 Also updated the usage of the Entity API.



Property changes on: trunk
___________________________________________________________________
Name: svk:merge
   - 1f59643a-e6e5-0310-bc24-f7d4c744f460:/haver/havercurs-objc:43089
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:1175
edfcd8bd-4ce7-0310-a97e-bb1efd40edf3:/local:238
   + 1f59643a-e6e5-0310-bc24-f7d4c744f460:/haver/havercurs-objc:43089
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:1176
edfcd8bd-4ce7-0310-a97e-bb1efd40edf3:/local:238

Modified: trunk/perl/server/lib/Haver/Server/Config.pm
===================================================================
--- trunk/perl/server/lib/Haver/Server/Config.pm        2005-06-25 03:55:40 UTC 
(rev 814)
+++ trunk/perl/server/lib/Haver/Server/Config.pm        2005-06-25 03:55:43 UTC 
(rev 815)
@@ -9,17 +9,13 @@
 our $VERSION = 0.01;
 our $File  = 'haverd.yml';
 our $Merge = {
-       Interfaces => [
+       listen => [
                {
-                       Host => 'hardison.net',
-                       Port => 7070,
+                       host => 'hardison.god',
+                       port => 7070,
                },
        ],
-       Channels => [qw(
-               lobby
-               creatures
-               basement
-       )],
+       storedir => 'store',
 };
 
 
@@ -49,7 +45,7 @@
 
 =head1 INHERITENCE
 
-Haver::Server::Config extends blaa blaa blaa
+Haver::Server::Config extends L<Haver::Config>
 
 =head1 CONSTRUCTOR
 

Modified: trunk/perl/server/lib/Haver/Server/Entity/User.pm
===================================================================
--- trunk/perl/server/lib/Haver/Server/Entity/User.pm   2005-06-25 03:55:40 UTC 
(rev 814)
+++ trunk/perl/server/lib/Haver/Server/Entity/User.pm   2005-06-25 03:55:43 UTC 
(rev 815)
@@ -6,7 +6,6 @@
 use Haver::Server::Entity::Avatar -base;
 
 const (namespace   => 'user');
-field (_channels   => {});
 
 
 sub join {
@@ -23,12 +22,17 @@
 
 sub add_channel {
        my ($self, $name) = @_;
-       $self->{_channels}{$name} = 1;
+       $self->{channels}{$name} = 1;
 }
 
 sub remove_channel {
        my ($self, $name) = @_;
-       delete $self->{_channels}{$name};
+       delete $self->{channels}{$name};
 }
 
+sub channels {
+       my ($self) = @_;
+       keys %{ $self->{channels} };
+}
+
 1;

Modified: trunk/perl/server/lib/Haver/Server/Listener.pm
===================================================================
--- trunk/perl/server/lib/Haver/Server/Listener.pm      2005-06-25 03:55:40 UTC 
(rev 814)
+++ trunk/perl/server/lib/Haver/Server/Listener.pm      2005-06-25 03:55:43 UTC 
(rev 815)
@@ -26,8 +26,12 @@
 
        $heap->{wheels}   = {};
        $heap->{children} = {};
-       $heap->{lobby}    = $opt->{lobby};
+       $heap->{talker}   = $opt->{talker};
+       my $config = $heap->{config} = $opt->{config};
        $kernel->alias_set($Alias);
+       foreach my $iface (@{ $config->listen }) {
+               $kernel->yield('listen', $iface, { nosave => 1 });
+       }       
        
        Log("$Alias starts.");
 }
@@ -52,8 +56,13 @@
 
 
 sub listen {
-       my ($kernel, $heap, $hash) = @_[KERNEL, HEAP, ARG0];
+       my ($kernel, $heap, $hash, $opt) = @_[KERNEL, HEAP, ARG0, ARG1];
        Log('notice', "Listening on port $hash->{port} with host 
$hash->{host}");
+
+       unless ($opt->{nosave}) {
+               my $l = $heap->{config}->listen;
+               push @$l, $hash;
+       }
        
        my $wheel = POE::Wheel::SocketFactory->new(
                #BindAddress => $addr,
@@ -71,12 +80,11 @@
        @_[KERNEL, HEAP, ARG0, ARG1, ARG2, ARG3];
        
        Log('Socket birth.');
-       create Haver::Server::Talker (
-               sock      => $socket,
-               address   => Socket::inet_ntoa($address),
-               port      => $port,
-               sockinfo  => $heap->{info}{$wid},
-               lobby     => $heap->{lobby},
+       $heap->{talker}->(
+               socket  => $socket,
+               address => Socket::inet_ntoa($address),
+               port    => $port,
+               info    => $heap->{info}{$wid},
        );
 }
 

Modified: trunk/perl/server/lib/Haver/Server/Talker.pm
===================================================================
--- trunk/perl/server/lib/Haver/Server/Talker.pm        2005-06-25 03:55:40 UTC 
(rev 814)
+++ trunk/perl/server/lib/Haver/Server/Talker.pm        2005-06-25 03:55:43 UTC 
(rev 815)
@@ -25,7 +25,7 @@
 
 sub _start {
        my ($heap, $session, $kernel, $opt) = @_[ HEAP,  SESSION,  KERNEL, 
ARG0];
-       my ($address, $socket, $port) = ($opt->{address}, delete $opt->{sock}, 
$opt->{port});
+       my ($address, $socket, $port) = ($opt->{address}, delete 
$opt->{socket}, $opt->{port});
        
        Log('notice', "Talker for $address:$port starts");
        binmode $socket, ":utf8";
@@ -118,7 +118,7 @@
 
 
 sub shutdown {
-       my ($kernel, $heap, $session, @why) = @_[KERNEL, HEAP, SESSION, ARG0, 
ARG1];
+       my ($kernel, $heap, $session, @why) = @_[KERNEL, HEAP, SESSION, ARG0 .. 
$#_];
        my $lobby = $heap->{lobby};
        
        if ($heap->{shutdown}) {
@@ -127,12 +127,10 @@
        Log('info', "Shutting down talker for $heap->{address}:$heap->{port}");
        
        $heap->{shutdown} = 1;
-       if (not @why) {
-               eval {
-                       if (my $user = $heap->{user}) {
-                               $lobby->remove($user->namespace, $user->name);
-                       }
+       if (@why) {
+               if ($heap->{user}) {
                        my $user = delete $heap->{user};
+                       $lobby->remove($user->namespace, $user->name);
                        my %seen;
                        foreach my $name ($user->channels) {
                                my $chan = $lobby->fetch('channel', $name);
@@ -143,11 +141,18 @@
                                        }       
                                }
                        }
+               } else {
+                       Log('error', "\$heap->{user} not defined in shutdown");
+               }
+               
+               if ($heap->{client}) {
                        $heap->{client}->put(['BYE', @why]);
-               };
+               } else {
+                       Log('error', "\$heap->{client} not defined in 
shutdown");
+               }
+       } else {
+               delete $heap->{client};
        }
-       Log('error', $@) if $@;
-
        $kernel->alarm_remove_all();
 }
 

Modified: trunk/perl/server/lib/Haver/Server/Wheel/Login.pm
===================================================================
--- trunk/perl/server/lib/Haver/Server/Wheel/Login.pm   2005-06-25 03:55:40 UTC 
(rev 814)
+++ trunk/perl/server/lib/Haver/Server/Wheel/Login.pm   2005-06-25 03:55:43 UTC 
(rev 815)
@@ -20,7 +20,7 @@
 
        Log('notice', 'Client is ' . $version);
        $heap->{client}->put(
-               ['HAVER', $heap->{sockinfo}{host}, 
"Haver::Server/$Haver::Server::VERSION"]);
+               ['HAVER', $heap->{info}{host}, 
"Haver::Server/$Haver::Server::VERSION"]);
        $heap->{version} = $version;
        $self->define('msg_IDENT', 'msg_IDENT');
 }

Modified: trunk/perl/server/lib/Haver/Server/Wheel/Main.pm
===================================================================
--- trunk/perl/server/lib/Haver/Server/Wheel/Main.pm    2005-06-25 03:55:40 UTC 
(rev 814)
+++ trunk/perl/server/lib/Haver/Server/Wheel/Main.pm    2005-06-25 03:55:43 UTC 
(rev 815)
@@ -49,7 +49,7 @@
        my $lobby = $heap->{lobby};
        my ($name) = @$args;
        my $user   = $heap->{user};
-       my $chan   = $lobby->fetch('channel', $name);
+       my $chan   = $lobby->get('channel', $name);
 
        unless (is_valid_name($name)) {
                $kernel->yield('fail', "invalid.name", $name);
@@ -97,7 +97,7 @@
        my $lobby  = $heap->{lobby};
        my ($name) = @$args;
        my $user   = $heap->{user};
-       my $chan   = $lobby->fetch('channel', $name);
+       my $chan   = $lobby->get('channel', $name);
 
        unless (is_valid_name($name)) {
                $kernel->yield('fail', 'invalid.name', $name);
@@ -122,7 +122,7 @@
        my $lobby = $heap->{lobby};
        my ($name, $type) = (shift @$args, shift @$args);
        my $user   = $heap->{user};
-       my $targ   = $lobby->fetch('user', $name);
+       my $targ   = $lobby->get('user', $name);
 
 
        unless (is_valid_name($name)) {
@@ -147,7 +147,7 @@
        my $lobby = $heap->{lobby};
        my ($name, $type) = (shift @$args, shift @$args);
        my $user   = $heap->{user};
-       my $chan   = $lobby->fetch('channel', $name);
+       my $chan   = $lobby->get('channel', $name);
 
 
        unless (is_valid_name($name)) {
@@ -183,8 +183,8 @@
                $kernel->yield('fail', 'unknown.namespace', $ns);
                return;
        }
-       my $chan = $lobby->fetch('channel', $name);
-       my @items = $chan->contents($ns);
+       my $chan = $lobby->get('channel', $name);
+       my @items = $chan->list($ns);
        $heap->{client}->put(['LIST', $name, $ns, map { $_->name } @items]);
 }
 
@@ -207,7 +207,7 @@
 
 sub msg_BYE {
        my ($kernel, $heap, $args) = @_[KERNEL, HEAP, ARG0];
-       $kernel->yield('shutdown', 'bye', $args->[0]);
+       $kernel->call($_[SESSION], 'shutdown', 'bye', $args->[0]);
 }
 
 

Modified: trunk/perl/server/lib/Haver/Server.pm
===================================================================
--- trunk/perl/server/lib/Haver/Server.pm       2005-06-25 03:55:40 UTC (rev 
814)
+++ trunk/perl/server/lib/Haver/Server.pm       2005-06-25 03:55:43 UTC (rev 
815)
@@ -51,23 +51,16 @@
        my $config = new Haver::Server::Config;
        my $lobby  = new Haver::Server::Entity::Lobby;
        create Haver::Server::Listener (
-               lobby  => $lobby,
-       );
-       foreach my $iface (@{ $config->get('Interfaces') }) {
-               $kernel->post('Listener', 'listen', {
-                               host => $iface->{Host},
-                               port => $iface->{Port},
-                       }
-               );
-       }
-       foreach my $chan (@{ $config->get('Channels') }) {
-               Log('debug', "Openning channel $chan");
-               $lobby->add(
-                       new Haver::Server::Entity::Channel (
-                               name => $chan,
+               config => $config,
+               talker => sub {
+                       create Haver::Server::Talker(@_,
+                               lobby  => $lobby,
+                               config => $config,
                        )
-               );
-       }
+               }
+       );
+
+       $heap->{config} = $config;
 }
 
 sub _stop {


Reply via email to