Author: dylan
Date: 2005-12-10 00:46:31 -0500 (Sat, 10 Dec 2005)
New Revision: 951
Modified:
trunk/
trunk/perl/server/TODO
trunk/perl/server/lib/Haver/Server/Entity/Avatar.pm
trunk/perl/server/lib/Haver/Server/Wheel/Login.pm
trunk/perl/server/lib/Haver/Server/Wheel/Main.pm
Log:
address is now masked; full-address doesn't exist yet, pending a reworking of
how "info" works and ACLs.
OPEN/CLOSE should now work as per the specs.
The specs should be updates to reflect what to expect from CLOSE...
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
1f59643a-e6e5-0310-bc24-f7d4c744f460:/haver/winch/trunk:43192
27e50396-46e3-0310-8b22-ae223a1f35ce:/local:212
e9404bb1-7af0-0310-a7ff-e22194cd388b:/haver/local:1684
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
1f59643a-e6e5-0310-bc24-f7d4c744f460:/haver/winch/trunk:43192
27e50396-46e3-0310-8b22-ae223a1f35ce:/local:212
e9404bb1-7af0-0310-a7ff-e22194cd388b:/haver/local:1689
edfcd8bd-4ce7-0310-a97e-bb1efd40edf3:/local:238
Modified: trunk/perl/server/TODO
===================================================================
--- trunk/perl/server/TODO 2005-12-10 04:58:45 UTC (rev 950)
+++ trunk/perl/server/TODO 2005-12-10 05:46:31 UTC (rev 951)
@@ -1,5 +1,6 @@
* Integrate the config file stuff. Everything that can be configured should be.
* Add an unlisten state to the Listener.
* Add rate limits, using a token bucket (bd_)
+* Add Reaper object, that makes sure an object is returned to the store when
it is no longer needed.
* Implement ATTR.
* Implement ACL.
Modified: trunk/perl/server/lib/Haver/Server/Entity/Avatar.pm
===================================================================
--- trunk/perl/server/lib/Haver/Server/Entity/Avatar.pm 2005-12-10 04:58:45 UTC
(rev 950)
+++ trunk/perl/server/lib/Haver/Server/Entity/Avatar.pm 2005-12-10 05:46:31 UTC
(rev 951)
@@ -12,11 +12,23 @@
field sid => undef;
field _access => {};
field passcode => undef;
-field address => '0.0.0.*';
+field full_address => '0.0.0.0';
field version => 'unknown';
field email => '';
field authenticated => 0;
+sub address {
+ my ($self, $addr) = @_;
+
+ if (@_ == 2) {
+ $self->full_address($addr);
+ } else {
+ my @ip = split(/\./, $self->full_address);
+ $ip[3] = '*';
+ join('.', @ip);
+ }
+}
+
sub initialize {
my ($self) = @_;
if (not exists $self->{passcode}) {
Modified: trunk/perl/server/lib/Haver/Server/Wheel/Login.pm
===================================================================
--- trunk/perl/server/lib/Haver/Server/Wheel/Login.pm 2005-12-10 04:58:45 UTC
(rev 950)
+++ trunk/perl/server/lib/Haver/Server/Wheel/Login.pm 2005-12-10 05:46:31 UTC
(rev 951)
@@ -7,6 +7,7 @@
use Haver::Server::Wheel -base;
use Haver::Server::Wheel::Auth;
use Haver::Server::Wheel::Reg;
+use Haver::Server::Wheel::Attr;
use Haver::Util qw( :name );
our $VERSION = 0.02;
@@ -111,6 +112,7 @@
$heap->{loader}->unload_wheel(__PACKAGE__);
$heap->{loader}->load_wheel('Haver::Server::Wheel::Main');
$heap->{loader}->load_wheel('Haver::Server::Wheel::Reg');
+ $heap->{loader}->load_wheel('Haver::Server::Wheel::Attr');
}
Modified: trunk/perl/server/lib/Haver/Server/Wheel/Main.pm
===================================================================
--- trunk/perl/server/lib/Haver/Server/Wheel/Main.pm 2005-12-10 04:58:45 UTC
(rev 950)
+++ trunk/perl/server/lib/Haver/Server/Wheel/Main.pm 2005-12-10 05:46:31 UTC
(rev 951)
@@ -86,14 +86,43 @@
$lobby->add(
new Haver::Server::Entity::Channel (
name => $name,
- owner => 'bob',
+ owner => $heap->{user}->name,
)
);
$heap->{client}->put(['OPEN', $name]);
- $kernel->yield('msg_JOIN', [$name]);
}
+sub msg_CLOSE {
+ my ($kernel, $heap, $args) = @_[KERNEL, HEAP, ARG0];
+ my $lobby = $heap->{lobby};
+ my $user = $heap->{user};
+ my ($name) = @$args;
+
+ unless (is_valid_name($name)) {
+ call('fail', "invalid.name", $name);
+ return;
+ }
+ unless ($lobby->contains('channel', $name)) {
+ call('fail', 'unknown.channel', $name);
+ return;
+ }
+ my $chan = $lobby->get('channel', $name);
+ if ($chan->owner ne $user->name) {
+ call('fail', 'not-owner', $chan->owner, $user->name);
+ return;
+ }
+
+ $lobby->remove('channel', $name);
+ $chan->put(['CLOSE', $name]);
+ if (not $chan->contains('user', $user->name)) {
+ $heap->{client}->put(['CLOSE', $name]);
+ }
+
+
+
+}
+
sub msg_PART {
my ($kernel, $heap, $args) = @_[KERNEL, HEAP, ARG0];
my $lobby = $heap->{lobby};