--- nfo/perl/libs/POE/Component/LookupClient.pm 2003/07/01 13:05:01 1.2 +++ nfo/perl/libs/POE/Component/LookupClient.pm 2003/12/03 04:01:05 1.6 @@ -1,7 +1,16 @@ ## ------------------------------------------------------------------------ -## $Id: LookupClient.pm,v 1.2 2003/07/01 13:05:01 joko Exp $ +## $Id: LookupClient.pm,v 1.6 2003/12/03 04:01:05 joko Exp $ ## ------------------------------------------------------------------------ ## $Log: LookupClient.pm,v $ +## Revision 1.6 2003/12/03 04:01:05 joko +## somehow got this to re-connect transparently if server-side goes down +## +## Revision 1.5 2003/07/01 18:13:15 joko +## fixed: shutdown and session-unaliasing seems to be done by gc now...? +## +## Revision 1.3 2003/07/01 13:13:44 joko +## made "port" and "host" configurable from script +## ## Revision 1.2 2003/07/01 13:05:01 joko ## major changes, tried to clean up shutdown phase - the watchdog-mech didn't work out well..... - what's about IKC's monitor? does it work on Linux? ## @@ -74,11 +83,13 @@ # Client component - encapsulates some session(s) and/or wheel(s)? - my $host = "localhost"; + $self->{options}->{host} ||= "localhost"; + $self->{options}->{port} ||= 30; + #create_ikc_client( host => $host, port => 30, name => 'Client', on_connect => $self->{options}->{on_connect} ); create_ikc_client( - host => $host, - port => 30, + ip => $self->{options}->{host}, + port => $self->{options}->{port}, #name => 'Client', #on_connect => sub { $self->build(); }, on_connect => sub { $self->build(); }, @@ -92,7 +103,7 @@ # start up the watchdog which monitors the required IKC intercom session #$kernel->yield('waste_time'); - #$kernel->delay('watchdog', 2); + $kernel->delay('watchdog', 2); }; @@ -103,7 +114,7 @@ sub build { my $self = shift; - print "build", "\n"; + #print "build", "\n"; # create sessions that depend on the foreign kernel. POE::Component::LookupClient::Session->new(); } @@ -114,10 +125,10 @@ #$kernel->post( IKC => 'monitor', '*' => { register => 'start_session' }); - #if (not defined $kernel->alias_resolve('DeviceClient')) { - if (not defined $kernel->alias_resolve('IKC')) { + if (not defined $kernel->alias_resolve('DeviceClient')) { + #if (not defined $kernel->alias_resolve('IKC')) { print STDERR "Session died, trying to restart!", "\n"; - #$kernel->yield('boot_intercom'); + $kernel->yield('boot_intercom'); return; } @@ -191,7 +202,10 @@ #$kernel->alias_set(''); #$kernel->post(); - + + #sub POE::Component::IKC::Responder::DEBUG { 1 } + #sub POE::Component::IKC::Responder::Object::DEBUG { 1 } + # set up communication channel for asynchronous responses $kernel->alias_set('DeviceClient'); $kernel->post('IKC', 'publish', 'DeviceClient', [qw( on_response )]); @@ -239,7 +253,8 @@ # If registration succeeded, start the renewal cycle. if ($payload eq 'REG_OK') { $self->debug("Starting lease renewal loop."); - #$kernel->post( IKC => 'monitor', '*' => { shutdown => 'remote_shutdown' }); + $kernel->post( IKC => 'monitor', '*' => { unregister => 'remote_shutdown' }); + $kernel->post( IKC => 'monitor', '*' => { shutdown => 'remote_shutdown' }); $kernel->yield( 'renew_lease' ); } elsif ($payload eq 'LEASE_OK') { @@ -308,13 +323,13 @@ #print "resp: $resp", "\n"; # and again... - $kernel->delay('renew_lease', 15); + $kernel->delay('renew_lease', 5); #$kernel->delay_set('renew_lease', 15); #$kernel->delay_add('renew_lease', 15); # timeout!? #$kernel->delay('remote_timeout', 20); - $kernel->delay_add('remote_timeout', 20); + $kernel->delay_add('remote_timeout', 7); #$kernel->delay_set('remote_timeout', 5); #$kernel->delay_set('remote_timeout', 20); @@ -373,13 +388,20 @@ #$kernel->run_one_timeslice(); #return; - $kernel->post( 'IKC' => 'shutdown' ); + #$kernel->post( 'IKC' => 'shutdown' ); + #$kernel->post( 'IKC' => 'blah' ); #$kernel->run_one_timeslice(); #$kernel->run_one_timeslice(); + $kernel->post('DeviceClient', 'stop'); + $kernel->alias_remove('DeviceClient'); + $kernel->alias_remove('IKC'); + #$kernel->run_one_timeslice(); #$kernel->run_one_timeslice(); + + #$kernel->yield('_start'); }