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 {