Author: dylan
Date: 2005-06-19 13:43:16 -0400 (Sun, 19 Jun 2005)
New Revision: 774
Modified:
trunk/
trunk/main/server/lib/Haver/Server/Wheel/Main.pm
Log:
[EMAIL PROTECTED]: dylan | 2005-06-19 13:42:52 -0400
added PING/PONG and POKE/OUCH support.
Property changes on: trunk
___________________________________________________________________
Name: svk:merge
- 1f59643a-e6e5-0310-bc24-f7d4c744f460:/haver/havercurs-objc:43050
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:1101
edfcd8bd-4ce7-0310-a97e-bb1efd40edf3:/local:238
+ 1f59643a-e6e5-0310-bc24-f7d4c744f460:/haver/havercurs-objc:43050
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:1103
edfcd8bd-4ce7-0310-a97e-bb1efd40edf3:/local:238
Modified: trunk/main/server/lib/Haver/Server/Wheel/Main.pm
===================================================================
--- trunk/main/server/lib/Haver/Server/Wheel/Main.pm 2005-06-19 07:51:01 UTC
(rev 773)
+++ trunk/main/server/lib/Haver/Server/Wheel/Main.pm 2005-06-19 17:43:16 UTC
(rev 774)
@@ -6,6 +6,7 @@
use Haver::Server::Wheel -base;
use Haver::Util 'is_valid_name';
+use constant PING_TIME => 4 * 60;
sub setup {
my $self = shift;
@@ -16,8 +17,38 @@
$self->msg('PART');
$self->msg('BYE');
$self->msg('LIST');
+ $self->msg('POKE');
+ $self->msg('PONG');
+ $self->provide('ping', 'on_ping');
+ $self->provide('schedule_ping', 'on_schedule_ping');
}
+sub on_load {
+ my ($kernel, $heap) = @_[KERNEL, HEAP];
+ $kernel->yield('schedule_ping');
+}
+
+sub on_schedule_ping {
+ my ($kernel, $heap) = @_[KERNEL, HEAP];
+
+ my $aid = $kernel->alarm_set('ping', time + PING_TIME);
+ if (defined $heap->{alarm_send_ping}) {
+ $kernel->alarm_remove($heap->{alarm_send_ping});
+ }
+ if (defined $heap->{alarm_ping_out}) {
+ $kernel->alarm_remove($heap->{alarm_ping_out});
+ }
+
+ $heap->{alarm_send_ping} = $aid;
+}
+
+sub on_ping {
+ my ($kernel, $heap) = @_[KERNEL, HEAP];
+ my $aid = $kernel->alarm_set('shutdown', time + PING_TIME, 'ping');
+ $heap->{client}->put(['PING', $aid]);
+ $heap->{alarm_ping_out} = $aid;
+}
+
sub msg_JOIN {
my ($kernel, $heap, $args) = @_[KERNEL, HEAP, ARG0];
my $lobby = $heap->{lobby};
@@ -162,6 +193,17 @@
$heap->{client}->put(['LIST', $name, $ns, map { $_->name } @items]);
}
+sub msg_POKE {
+ my ($kernel, $heap, $args) = @_[KERNEL, HEAP, ARG0];
+ $heap->{client}->put(['OUCH', $args->[0]]);
+}
+
+sub msg_PONG {
+ my ($kernel, $heap, $args) = @_[KERNEL, HEAP, ARG0];
+
+ $kernel->yield('schedule_ping');
+}
+
sub msg_BYE {
my ($kernel, $heap, $args) = @_[KERNEL, HEAP, ARG0];
$kernel->yield('shutdown', 'bye', $args->[0]);