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]);


Reply via email to