Author: dylan
Date: 2005-05-23 21:44:00 -0400 (Mon, 23 May 2005)
New Revision: 723

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/Entity/Lobby.pm
   trunk/main/server/lib/Haver/Server/Listener.pm
   trunk/main/server/lib/Haver/Server/Talker.pm
Log:
 [EMAIL PROTECTED]:  dylan | 2005-05-23 21:43:41 -0400
 okay, had to fix some things. TO and IN were removed before I even commited
 them. Login stuff works though.



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:995
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:1005
edfcd8bd-4ce7-0310-a97e-bb1efd40edf3:/local:238

Modified: trunk/main/server/lib/Haver/Server/Avatar.pm
===================================================================
--- trunk/main/server/lib/Haver/Server/Avatar.pm        2005-05-24 01:22:26 UTC 
(rev 722)
+++ trunk/main/server/lib/Haver/Server/Avatar.pm        2005-05-24 01:44:00 UTC 
(rev 723)
@@ -5,7 +5,7 @@
 
 our $VERSION = 0.07;
 
-field 'wheel';
+field 'sid'   => undef;
 field _access => {};
 
 sub grant {

Modified: trunk/main/server/lib/Haver/Server/Container.pm
===================================================================
--- trunk/main/server/lib/Haver/Server/Container.pm     2005-05-24 01:22:26 UTC 
(rev 722)
+++ trunk/main/server/lib/Haver/Server/Container.pm     2005-05-24 01:44:00 UTC 
(rev 723)
@@ -38,7 +38,7 @@
     return delete $self->{_contents}{$ns}{$name};
 }
 
-sub _contents {
+sub contents {
     my ($ns) = @_;
     my @values = ();
     

Modified: trunk/main/server/lib/Haver/Server/Entity/Lobby.pm
===================================================================
--- trunk/main/server/lib/Haver/Server/Entity/Lobby.pm  2005-05-24 01:22:26 UTC 
(rev 722)
+++ trunk/main/server/lib/Haver/Server/Entity/Lobby.pm  2005-05-24 01:44:00 UTC 
(rev 723)
@@ -1,14 +1,43 @@
 # 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::Lobby;
-use Haver::Server::Entity    qw( -Base );
-use Haver::Server::Container qw( -mixin );
+use Haver::Server::Entity::Channel -Base;
 
-our $VERSION = 0.12;
+our $VERSION = 0.20;
+our $Self;
+const name => '&lobby';
 
-const namespace => 'lobby';
-
 sub can_contain {
     my $object = shift;
-    $object->namespace ne 'lobby';
+    $self != $object;
 }
+
+sub fetch {
+    my ($ns, $name) = @_;
+    
+    if ($ns eq 'channel' and $name eq '&lobby') {
+        return $self;
+    } else {
+        super ($ns, $name);
+    }
+}
+
+sub contains {
+    my ($ns, $name) = @_;
+
+    if ($ns eq 'channel' and $name eq '&lobby') {
+        return 1;
+    } else {
+        return super ($ns, $name);
+    }
+}
+
+
+sub contents {
+    my ($ns) = @_;
+    my $c = super($ns);
+    if ($ns eq 'channel') {
+        push @$c, $self;
+    }
+    wantarray ? @$c : $c;
+}

Modified: trunk/main/server/lib/Haver/Server/Entity.pm
===================================================================
--- trunk/main/server/lib/Haver/Server/Entity.pm        2005-05-24 01:22:26 UTC 
(rev 722)
+++ trunk/main/server/lib/Haver/Server/Entity.pm        2005-05-24 01:44:00 UTC 
(rev 723)
@@ -3,7 +3,7 @@
 package Haver::Server::Entity;
 use Haver::Base '-Base';
 
-field -force => (id   => '_default_');
+field name   => '&undef';
 field attr   => {};
 stub 'namespace';
 

Modified: trunk/main/server/lib/Haver/Server/Listener.pm
===================================================================
--- trunk/main/server/lib/Haver/Server/Listener.pm      2005-05-24 01:22:26 UTC 
(rev 722)
+++ trunk/main/server/lib/Haver/Server/Listener.pm      2005-05-24 01:44:00 UTC 
(rev 723)
@@ -55,8 +55,8 @@
        Log('notice', "Listening on port $port.");
        
        my $wheel = POE::Wheel::SocketFactory->new(
+               #BindAddress => $addr,
                BindPort     => $port,
-               #BindAddress => $addr,
                Reuse        => 1,
                SuccessEvent => 'socket_birth',
                FailureEvent => 'socket_fail',

Modified: trunk/main/server/lib/Haver/Server/Talker.pm
===================================================================
--- trunk/main/server/lib/Haver/Server/Talker.pm        2005-05-24 01:22:26 UTC 
(rev 722)
+++ trunk/main/server/lib/Haver/Server/Talker.pm        2005-05-24 01:44:00 UTC 
(rev 723)
@@ -1,19 +1,27 @@
 package Haver::Server::Talker;
 use Haver::Base::Session -base;
+use Haver::Base::Session -XXX, -dumper;
 use strict;
 use warnings;
 
 use Haver::Server;
+use Haver::Server::Entity::Lobby;
+use Haver::Server::Entity::User;
 use Haver::Protocol::Filter;
+
+
 use POE::Wheel::ReadWrite;
 use POE::Driver::SysRW;
 
+
+
 our $VERSION = '0.08';
+our $Lobby = new Haver::Server::Entity::Lobby (name => '&lobby');
 
 states qw(
        _start _stop _default
        input error flush
-       bye shutdown
+       shutdown fail
        
        msg_HAVER
 );
@@ -55,11 +63,10 @@
                if (not $heap->{version}) {
                        Log('warning', "Client issued unknown command ($cmd) 
before HAVER.");
                        Log('warning', 'Probably a search engine...');
-                       delete $heap->{client};
-                       $kernel->yield('shutdown', 'borked');
+                       $kernel->yield('shutdown');
                } else {
                        Log('warning', "Client isseud unknown command $cmd");
-                       $heap->{client}->put(['FAIL', $cmd, 'unknown.cmd']);
+                       $kernel->yield('fail', 'unknown.cmd');
                }
        }
 
@@ -77,43 +84,38 @@
        my $event = 'msg_' . $cmd;
        $event =~ s/:/_/g;
        
-       Log('info', "Command: '$cmd' ('$event')");
+       Log('info', "Command: '$cmd'");
+       $heap->{cmd} = $cmd;
        $kernel->call($_[SESSION], $event, $args, $cmd);
 }
 
-sub msg_HAVER {
-       my ($kernel, $heap, $args) = @_[KERNEL, HEAP, ARG0];
-       my ($version) = @$args;
-
-       Log('notice', 'Client is ' . $version);
-       $heap->{client}->put(['HAVER', 
"Haver::Server/$Haver::Server::VERSION"]);
-       $heap->{version} = $version;
+sub fail {
+       my ($kernel, $heap, $err, @args) = @_[KERNEL, HEAP, ARG0 .. $#_];
+       $heap->{client}->put(['FAIL', $heap->{cmd}, $err, @args]);
 }
 
 
-
 sub error {
        my ($kernel, $heap, $operation, $errnum, $errstr) = @_[KERNEL, HEAP, 
ARG0..ARG3];
-       my $type;
+       my @why;
        
        if ($errnum == 0) {
-               $type = 'closed';
+               @why = ('closed');
        } else {
                Log('error',
                        "Talker for $heap->{address}:$heap->{port}: ",
                        "Socket generated $operation error ${errnum}: $errstr");
-               $type = 'error';
+               @why = ('error', $errstr);
        }
        
-
+       $heap->{error} = 1;
        delete $heap->{client};
-       $heap->{error} = 1;
-       $kernel->yield('shutdown', $type);
+       $kernel->yield('shutdown', @why);
 }
 
 
 sub shutdown {
-       my ($kernel, $heap, $session, @pair) = @_[KERNEL, HEAP, SESSION, ARG0, 
ARG1];
+       my ($kernel, $heap, $session, @why) = @_[KERNEL, HEAP, SESSION, ARG0, 
ARG1];
        
        if ($heap->{shutdown}) {
                Log('critical', 'Race condition: shutdown called more than 
once!');
@@ -121,21 +123,17 @@
        Log('info', "Shutting down talker for $heap->{address}:$heap->{port}");
        
        $heap->{shutdown} = 1;
+       my $user = delete $heap->{user};
+       unless ($heap->{error}) {
+               eval {
+                       $heap->{client}->put(['BYE', @why]);
+               };
+               warn "Error: ", $@ if $@;
+       }       
+       $Lobby->remove($user->namespace, $user->name);
        $kernel->alarm_remove_all();
-       $kernel->yield('bye', @pair) if $heap->{client};
 }
 
-
-sub bye {
-       my ($kernel, $heap, @pair) = @_[KERNEL, HEAP, ARG0, ARG1];
-
-       if ($heap->{client}) {
-               $heap->{client}->put(['BYE', @pair]);
-       } elsif (not $heap->{error}) {
-               Log('error', "Bye called and then client wheel disappeared.");
-       }
-}
-
 sub flush {
        my ($kernel, $heap) = @_[KERNEL, HEAP];
 
@@ -149,4 +147,58 @@
 
 
 
+
+
+
+
+
+
+
+sub msg_HAVER {
+       my ($kernel, $heap, $args) = @_[KERNEL, HEAP, ARG0];
+       my ($version) = @$args;
+
+       Log('notice', 'Client is ' . $version);
+       $heap->{client}->put(['HAVER', 
"Haver::Server/$Haver::Server::VERSION"]);
+       $heap->{version} = $version;
+       
+       $kernel->state('msg_IDENT', __PACKAGE__);
+       $kernel->state('msg_HAVER');
+}
+
+sub msg_IDENT {
+       my ($kernel, $heap, $args) = @_[KERNEL, HEAP, ARG0];
+       my ($name) = @$args;
+       
+       if ($Lobby->contains('user', $name)) {
+               $kernel->yield('fail', 'exists.user', $name);
+       } else {
+               my $user = new Haver::Server::Entity::User (
+                       name  => $name,
+               );
+               $Lobby->add($user);
+               $heap->{user} = $user;
+               $kernel->state('msg_ODENT');
+               $heap->{client}->put(['HELLO', $name]);
+               $kernel->state('msg_IDENT');
+               foreach (qw( TO BYE )) {
+                       $kernel->state("msg_$_", __PACKAGE__);
+               }
+       }
+}
+
+sub msg_TO {
+       my ($kernel, $heap, $args) = @_[KERNEL, HEAP, ARG0];
+       my ($name) = shift @$args;
+       my $user   = $heap->{user};
+       
+}
+
+sub msg_BYE {
+       my ($kernel, $heap, $args) = @_[KERNEL, HEAP, ARG0];
+       $kernel->yield('shutdown', 'bye', $args->[0]);
+}
+
+
+
 1;


Reply via email to