Author: dylan
Date: 2005-06-25 00:25:22 -0400 (Sat, 25 Jun 2005)
New Revision: 817

Modified:
   trunk/
   trunk/perl/server/lib/Haver/Server.pm
   trunk/perl/server/lib/Haver/Server/Config.pm
   trunk/perl/server/lib/Haver/Server/Entity/Lobby.pm
   trunk/perl/server/lib/Haver/Server/Store.pm
   trunk/perl/server/lib/Haver/Server/Talker.pm
Log:
 [EMAIL PROTECTED]:  dylan | 2005-06-25 00:25:10 -0400
 API changes in Config; must call load() now.
 More debugging prints.
 Entity::Lobby now stores any channels it contains, as well as loading them.
 Store now passes itself to the entity's dump() method to facilitate 
Entity::Lobby's
 behavior. Talker now uses the Entity::* list() and get() methods rather than 
contents()
 and fetch(), as the later two are deprecated.
 



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:1176
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:1181
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:57:07 UTC 
(rev 816)
+++ trunk/perl/server/lib/Haver/Server/Config.pm        2005-06-25 04:25:22 UTC 
(rev 817)
@@ -7,7 +7,6 @@
 use Haver::Config -base;
 
 our $VERSION = 0.01;
-our $File  = 'haverd.yml';
 our $Merge = {
        listen => [
                {
@@ -21,10 +20,6 @@
 
 sub initialize {
        my $self = shift;
-       if (not $self->file) {
-               $self->file($File);
-       }
-       $self->load($self->file);
        $self->merge($Merge);
 }
 

Modified: trunk/perl/server/lib/Haver/Server/Entity/Lobby.pm
===================================================================
--- trunk/perl/server/lib/Haver/Server/Entity/Lobby.pm  2005-06-25 03:57:07 UTC 
(rev 816)
+++ trunk/perl/server/lib/Haver/Server/Entity/Lobby.pm  2005-06-25 04:25:22 UTC 
(rev 817)
@@ -17,10 +17,17 @@
 }
 
 sub dump {
-    my ($self) = shift;
+    my ($self, $store) = @_;
     my $data = super;
-    $data->{channels} = $self->names('channel');
+    my @chans = $self->list('channel');
+    my @names;
+
+    foreach my $chan (@chans) {
+        $store->insert($chan);
+        push @names, $chan->name;
+    }
     
+    $data->{channels} = [EMAIL PROTECTED];
     return $data;
 }
 

Modified: trunk/perl/server/lib/Haver/Server/Store.pm
===================================================================
--- trunk/perl/server/lib/Haver/Server/Store.pm 2005-06-25 03:57:07 UTC (rev 
816)
+++ trunk/perl/server/lib/Haver/Server/Store.pm 2005-06-25 04:25:22 UTC (rev 
817)
@@ -32,7 +32,7 @@
 
 sub insert {
        my ($self, $entity) = @_;
-       my $data = $entity->dump;
+       my $data = $entity->dump($self);
        my $file = $self->filename($entity->namespace, $entity->name);
        
        $self->_save_file($file, ref($entity), $data);
@@ -59,7 +59,7 @@
 
 sub filename {
        my ($self, $ns, $name) = @_;
-       File::Spec->catfile($self->storedir, $ns, $name)
+       File::Spec->catfile($self->storedir, $ns, lc $name)
 }
 
 sub dirname {

Modified: trunk/perl/server/lib/Haver/Server/Talker.pm
===================================================================
--- trunk/perl/server/lib/Haver/Server/Talker.pm        2005-06-25 03:57:07 UTC 
(rev 816)
+++ trunk/perl/server/lib/Haver/Server/Talker.pm        2005-06-25 04:25:22 UTC 
(rev 817)
@@ -133,9 +133,9 @@
                        $lobby->remove($user->namespace, $user->name);
                        my %seen;
                        foreach my $name ($user->channels) {
-                               my $chan = $lobby->fetch('channel', $name);
+                               my $chan = $lobby->get('channel', $name);
                                $user->part($chan);
-                               foreach my $u ($chan->contents('user')) {
+                               foreach my $u ($chan->list('user')) {
                                        unless ($seen{ $u->name }++) {
                                                $u->put(['QUIT', $user->name, 
@why]);
                                        }       

Modified: trunk/perl/server/lib/Haver/Server.pm
===================================================================
--- trunk/perl/server/lib/Haver/Server.pm       2005-06-25 03:57:07 UTC (rev 
816)
+++ trunk/perl/server/lib/Haver/Server.pm       2005-06-25 04:25:22 UTC (rev 
817)
@@ -27,9 +27,11 @@
 use Haver::Server::Entity::Channel;
 use Haver::Server::Entity::Lobby;
 use Haver::Server::Config;
+use Haver::Server::Store;
 
 our $VERSION = 0.08;
 our $Alias   = 'Server';
+our $Config  = 'haverd.yml';
 
 sub states {
        return [qw(
@@ -38,7 +40,7 @@
 }
 
 sub create {
-       my $self = shift;
+       my $this = shift;
        Log('debug', "Booting Haver::Server v$VERSION");
        super;
 }
@@ -48,23 +50,53 @@
        $kernel->alias_set($Alias);
        Log('debug', "$Alias starts.");
 
-       my $config = new Haver::Server::Config;
-       my $lobby  = new Haver::Server::Entity::Lobby;
+       my $config = new Haver::Server::Config (
+               load => $opt->{config} || $Config,
+       );
+
+       # Configure the Store.
+       my $dir = $config->storedir;
+       mkdir $dir or die "mkdir $dir: $!" unless -e $dir;
+       my $store  = new Haver::Server::Store (
+               storedir => $dir,
+       );
+
+       # Add &lobby to the Store if not already there.
+       unless ($store->exists('lobby', '&lobby')) {
+               my $lobby = new Haver::Server::Entity::Lobby;
+               $store->insert($lobby);
+       }
+
+       # Fetch the lobby
+       Log('debug', "Fetching &lobby");
+       my $lobby = $store->fetch('lobby', '&lobby');
+
+       Log('debug', "Channels: ", join(", ", $lobby->names('channel')));
+       
        create Haver::Server::Listener (
                config => $config,
                talker => sub {
                        create Haver::Server::Talker(@_,
                                lobby  => $lobby,
                                config => $config,
+                               store  => $store,
                        )
                }
        );
 
        $heap->{config} = $config;
+       $heap->{store}  = $store;
+       $heap->{lobby}  = $lobby;
 }
 
 sub _stop {
        my ($kernel, $heap) = @_[KERNEL, HEAP];
+
+       Log('debug', "Saving config");
+       $heap->{config}->save;
+       Log('debug', "Storing &lobby");
+       $heap->{store}->insert($heap->{lobby});
+       
        Log('debug', "$Alias stops");
 }
 


Reply via email to