Author: dylan
Date: 2005-05-24 04:43:02 -0400 (Tue, 24 May 2005)
New Revision: 729

Modified:
   trunk/
   trunk/main/server/lib/Haver/Server/Avatar.pm
   trunk/main/server/lib/Haver/Server/Talker.pm
Log:
 [EMAIL PROTECTED]:  dylan | 2005-05-24 04:42:56 -0400
 IN works. Server does not send QUIT.
 Minimal error checking.



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:1005
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:1025
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 02:57:33 UTC 
(rev 728)
+++ trunk/main/server/lib/Haver/Server/Avatar.pm        2005-05-24 08:43:02 UTC 
(rev 729)
@@ -5,9 +5,20 @@
 
 our $VERSION = 0.07;
 
-field 'sid'   => undef;
+
+field -weak => 'wheel';
 field _access => {};
 
+
+sub put {
+       if (my $w = $self->wheel) {
+               $w->put([EMAIL PROTECTED]);
+               return 1;
+       } else {
+               return undef;
+       }
+}
+
 sub grant {
        my ($where, $what, $level) = @_;
 

Modified: trunk/main/server/lib/Haver/Server/Talker.pm
===================================================================
--- trunk/main/server/lib/Haver/Server/Talker.pm        2005-05-24 02:57:33 UTC 
(rev 728)
+++ trunk/main/server/lib/Haver/Server/Talker.pm        2005-05-24 08:43:02 UTC 
(rev 729)
@@ -123,14 +123,16 @@
        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);
+               Log('error', $@) if $@;
+       }
+
+       if (my $user = $heap->{user}) {
+               $Lobby->remove($user->namespace, $user->name);
+       }
        $kernel->alarm_remove_all();
 }
 
@@ -143,17 +145,6 @@
        }
 }
 
-
-
-
-
-
-
-
-
-
-
-
 sub msg_HAVER {
        my ($kernel, $heap, $args) = @_[KERNEL, HEAP, ARG0];
        my ($version) = @$args;
@@ -175,13 +166,14 @@
        } else {
                my $user = new Haver::Server::Entity::User (
                        name  => $name,
+                       wheel => $heap->{client}, # weak reference!
                );
                $Lobby->add($user);
                $heap->{user} = $user;
                $kernel->state('msg_ODENT');
                $heap->{client}->put(['HELLO', $name]);
                $kernel->state('msg_IDENT');
-               foreach (qw( TO BYE )) {
+               foreach (qw( TO BYE IN )) {
                        $kernel->state("msg_$_", __PACKAGE__);
                }
        }
@@ -189,9 +181,43 @@
 
 sub msg_TO {
        my ($kernel, $heap, $args) = @_[KERNEL, HEAP, ARG0];
-       my ($name) = shift @$args;
+       my ($name, $type) = (shift @$args, shift @$args);
        my $user   = $heap->{user};
+       my $targ   = $Lobby->fetch('user', $name);
+
+       unless ($targ) {
+               $kernel->yield('fail', 'unknown.user');
+               return;
+       }
+       unless (defined $type) {
+               $kernel->yield('fail', 'missing.type');
+               return;
+       }
+
+
+       $targ->put('FROM', $user->name, $type, @$args);
+}
+
+sub msg_IN {
+       my ($kernel, $heap, $args) = @_[KERNEL, HEAP, ARG0];
+       my ($name, $type) = (shift @$args, shift @$args);
+       my $user   = $heap->{user};
+       my $chan   = $Lobby->fetch('channel', $name);
+
+       unless ($chan) {
+               $kernel->yield('fail', 'unknown.user');
+               return;
+       }
+       unless (defined $type) {
+               $kernel->yield('fail', 'missing.type');
+               return;
+       }
+
+       $name = $chan->name;
        
+       foreach my $targ ($chan->contents('user')) {
+               $targ->put('IN', $name, $user->name, $type, @$args);
+       }
 }
 
 sub msg_BYE {


Reply via email to