Author: dylan
Date: 2005-06-22 14:43:45 -0400 (Wed, 22 Jun 2005)
New Revision: 794

Added:
   trunk/perl/server/t/02_user.t
Modified:
   trunk/
   trunk/perl/server/lib/Haver/Server/Talker.pm
Log:
 [EMAIL PROTECTED]:  dylan | 2005-06-22 14:43:37 -0400
 Fixing bug where users arn't removed from channels upon non-error exit.
 



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

Modified: trunk/perl/server/lib/Haver/Server/Talker.pm
===================================================================
--- trunk/perl/server/lib/Haver/Server/Talker.pm        2005-06-22 17:41:22 UTC 
(rev 793)
+++ trunk/perl/server/lib/Haver/Server/Talker.pm        2005-06-22 18:43:45 UTC 
(rev 794)
@@ -127,26 +127,24 @@
        Log('info', "Shutting down talker for $heap->{address}:$heap->{port}");
        
        $heap->{shutdown} = 1;
-       if (my $user = $heap->{user}) {
-               $lobby->remove($user->namespace, $user->name);
-       }
-       unless ($heap->{error}) {
-               eval {
-                       my $user = delete $heap->{user};
-                       my %seen;
-                       foreach my $name ($user->channels) {
-                               my $chan = $lobby->fetch('channel', $name);
-                               $user->part($chan);
-                               foreach my $u ($chan->contents('user')) {
-                                       unless ($seen{ $u->name }++) {
-                                               $u->put(['QUIT', $user->name, 
@why]);
-                                       }       
-                               }
+       eval {
+               if (my $user = $heap->{user}) {
+                       $lobby->remove($user->namespace, $user->name);
+               }
+               my $user = delete $heap->{user};
+               my %seen;
+               foreach my $name ($user->channels) {
+                       my $chan = $lobby->fetch('channel', $name);
+                       $user->part($chan);
+                       foreach my $u ($chan->contents('user')) {
+                               unless ($seen{ $u->name }++) {
+                                       $u->put(['QUIT', $user->name, @why]);
+                               }       
                        }
-                       $heap->{client}->put(['BYE', @why]);
-               };
-               Log('error', $@) if $@;
-       }
+               }
+               $heap->{client}->put(['BYE', @why]);
+       };
+       Log('error', $@) if $@;
 
        $kernel->alarm_remove_all();
 }

Added: trunk/perl/server/t/02_user.t
===================================================================
--- trunk/perl/server/t/02_user.t       2005-06-22 17:41:22 UTC (rev 793)
+++ trunk/perl/server/t/02_user.t       2005-06-22 18:43:45 UTC (rev 794)
@@ -0,0 +1,25 @@
+#!/usr/bin/perl
+# vim: set ft=perl:
+
+use Test::More tests => 6;
+BEGIN { 
+    use_ok('Haver::Server::Entity::User');
+    use_ok('Haver::Server::Entity::Channel');
+};
+
+my $user = new Haver::Server::Entity::User (
+       name => 'bob',
+);
+my $chan = new Haver::Server::Entity::Channel (
+       name => 'lobby',
+);
+
+ok($user, "user object created");
+ok($chan, "channel object created");
+
+$user->join($chan);
+ok($chan->contains('user', $user->name), "user in channel");
+$user->part($chan);
+ok(not($chan->contains('user', $user->name)), "user not in channel");
+
+


Reply via email to