| 2 |
## $Id$ |
## $Id$ |
| 3 |
## ------------------------------------------------------------------------ |
## ------------------------------------------------------------------------ |
| 4 |
## $Log$ |
## $Log$ |
| 5 |
|
## Revision 1.6 2003/12/03 04:01:05 joko |
| 6 |
|
## somehow got this to re-connect transparently if server-side goes down |
| 7 |
|
## |
| 8 |
|
## Revision 1.5 2003/07/01 18:13:15 joko |
| 9 |
|
## fixed: shutdown and session-unaliasing seems to be done by gc now...? |
| 10 |
|
## |
| 11 |
|
## Revision 1.3 2003/07/01 13:13:44 joko |
| 12 |
|
## made "port" and "host" configurable from script |
| 13 |
|
## |
| 14 |
## Revision 1.2 2003/07/01 13:05:01 joko |
## Revision 1.2 2003/07/01 13:05:01 joko |
| 15 |
## 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? |
## 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? |
| 16 |
## |
## |
| 83 |
|
|
| 84 |
# Client component - encapsulates some session(s) and/or wheel(s)? |
# Client component - encapsulates some session(s) and/or wheel(s)? |
| 85 |
|
|
| 86 |
my $host = "localhost"; |
$self->{options}->{host} ||= "localhost"; |
| 87 |
|
$self->{options}->{port} ||= 30; |
| 88 |
|
|
| 89 |
#create_ikc_client( host => $host, port => 30, name => 'Client', on_connect => $self->{options}->{on_connect} ); |
#create_ikc_client( host => $host, port => 30, name => 'Client', on_connect => $self->{options}->{on_connect} ); |
| 90 |
create_ikc_client( |
create_ikc_client( |
| 91 |
host => $host, |
ip => $self->{options}->{host}, |
| 92 |
port => 30, |
port => $self->{options}->{port}, |
| 93 |
#name => 'Client', |
#name => 'Client', |
| 94 |
#on_connect => sub { $self->build(); }, |
#on_connect => sub { $self->build(); }, |
| 95 |
on_connect => sub { $self->build(); }, |
on_connect => sub { $self->build(); }, |
| 103 |
|
|
| 104 |
# start up the watchdog which monitors the required IKC intercom session |
# start up the watchdog which monitors the required IKC intercom session |
| 105 |
#$kernel->yield('waste_time'); |
#$kernel->yield('waste_time'); |
| 106 |
#$kernel->delay('watchdog', 2); |
$kernel->delay('watchdog', 2); |
| 107 |
|
|
| 108 |
}; |
}; |
| 109 |
|
|
| 114 |
|
|
| 115 |
sub build { |
sub build { |
| 116 |
my $self = shift; |
my $self = shift; |
| 117 |
print "build", "\n"; |
#print "build", "\n"; |
| 118 |
# create sessions that depend on the foreign kernel. |
# create sessions that depend on the foreign kernel. |
| 119 |
POE::Component::LookupClient::Session->new(); |
POE::Component::LookupClient::Session->new(); |
| 120 |
} |
} |
| 125 |
|
|
| 126 |
#$kernel->post( IKC => 'monitor', '*' => { register => 'start_session' }); |
#$kernel->post( IKC => 'monitor', '*' => { register => 'start_session' }); |
| 127 |
|
|
| 128 |
#if (not defined $kernel->alias_resolve('DeviceClient')) { |
if (not defined $kernel->alias_resolve('DeviceClient')) { |
| 129 |
if (not defined $kernel->alias_resolve('IKC')) { |
#if (not defined $kernel->alias_resolve('IKC')) { |
| 130 |
print STDERR "Session died, trying to restart!", "\n"; |
print STDERR "Session died, trying to restart!", "\n"; |
| 131 |
#$kernel->yield('boot_intercom'); |
$kernel->yield('boot_intercom'); |
| 132 |
return; |
return; |
| 133 |
} |
} |
| 134 |
|
|
| 202 |
|
|
| 203 |
#$kernel->alias_set(''); |
#$kernel->alias_set(''); |
| 204 |
#$kernel->post(); |
#$kernel->post(); |
| 205 |
|
|
| 206 |
|
#sub POE::Component::IKC::Responder::DEBUG { 1 } |
| 207 |
|
#sub POE::Component::IKC::Responder::Object::DEBUG { 1 } |
| 208 |
|
|
| 209 |
# set up communication channel for asynchronous responses |
# set up communication channel for asynchronous responses |
| 210 |
$kernel->alias_set('DeviceClient'); |
$kernel->alias_set('DeviceClient'); |
| 211 |
$kernel->post('IKC', 'publish', 'DeviceClient', [qw( on_response )]); |
$kernel->post('IKC', 'publish', 'DeviceClient', [qw( on_response )]); |
| 253 |
# If registration succeeded, start the renewal cycle. |
# If registration succeeded, start the renewal cycle. |
| 254 |
if ($payload eq 'REG_OK') { |
if ($payload eq 'REG_OK') { |
| 255 |
$self->debug("Starting lease renewal loop."); |
$self->debug("Starting lease renewal loop."); |
| 256 |
#$kernel->post( IKC => 'monitor', '*' => { shutdown => 'remote_shutdown' }); |
$kernel->post( IKC => 'monitor', '*' => { unregister => 'remote_shutdown' }); |
| 257 |
|
$kernel->post( IKC => 'monitor', '*' => { shutdown => 'remote_shutdown' }); |
| 258 |
$kernel->yield( 'renew_lease' ); |
$kernel->yield( 'renew_lease' ); |
| 259 |
|
|
| 260 |
} elsif ($payload eq 'LEASE_OK') { |
} elsif ($payload eq 'LEASE_OK') { |
| 323 |
#print "resp: $resp", "\n"; |
#print "resp: $resp", "\n"; |
| 324 |
|
|
| 325 |
# and again... |
# and again... |
| 326 |
$kernel->delay('renew_lease', 15); |
$kernel->delay('renew_lease', 5); |
| 327 |
#$kernel->delay_set('renew_lease', 15); |
#$kernel->delay_set('renew_lease', 15); |
| 328 |
#$kernel->delay_add('renew_lease', 15); |
#$kernel->delay_add('renew_lease', 15); |
| 329 |
|
|
| 330 |
# timeout!? |
# timeout!? |
| 331 |
#$kernel->delay('remote_timeout', 20); |
#$kernel->delay('remote_timeout', 20); |
| 332 |
$kernel->delay_add('remote_timeout', 20); |
$kernel->delay_add('remote_timeout', 7); |
| 333 |
#$kernel->delay_set('remote_timeout', 5); |
#$kernel->delay_set('remote_timeout', 5); |
| 334 |
#$kernel->delay_set('remote_timeout', 20); |
#$kernel->delay_set('remote_timeout', 20); |
| 335 |
|
|
| 388 |
#$kernel->run_one_timeslice(); |
#$kernel->run_one_timeslice(); |
| 389 |
#return; |
#return; |
| 390 |
|
|
| 391 |
$kernel->post( 'IKC' => 'shutdown' ); |
#$kernel->post( 'IKC' => 'shutdown' ); |
| 392 |
|
#$kernel->post( 'IKC' => 'blah' ); |
| 393 |
#$kernel->run_one_timeslice(); |
#$kernel->run_one_timeslice(); |
| 394 |
#$kernel->run_one_timeslice(); |
#$kernel->run_one_timeslice(); |
| 395 |
|
|
| 396 |
|
$kernel->post('DeviceClient', 'stop'); |
| 397 |
|
|
| 398 |
$kernel->alias_remove('DeviceClient'); |
$kernel->alias_remove('DeviceClient'); |
| 399 |
|
$kernel->alias_remove('IKC'); |
| 400 |
|
|
| 401 |
#$kernel->run_one_timeslice(); |
#$kernel->run_one_timeslice(); |
| 402 |
#$kernel->run_one_timeslice(); |
#$kernel->run_one_timeslice(); |
| 403 |
|
|
| 404 |
|
#$kernel->yield('_start'); |
| 405 |
|
|
| 406 |
} |
} |
| 407 |
|
|