#!/usr/bin/perl
use POE qw(Component::Client::Telnet);
my $self = POE::Component::Client::Telnet->new(
# debug => 1,
telnet_options => [
], # could put something here, or omit it
);
POE::Session->create(
inline_states => {
_start => \&_start,
callback => \&callback,
opened => \&opened,
cont => \&cont,
city_code => \&city_code,
enter_city => \&enter_city,
get_forecast => \&get_forecast,
forecast => \&forecast,
},
);
sub _start {
#$self->open({ event => 'opened' },"rainmaker.wunderground.com");
# alternative way
$self->yield(open => { event => 'opened' } => "rainmaker.wunderground.com");
$self->option_callback({ },"callback");
}
sub callback {
warn "option callback!\n";
}
sub opened {
# Wait for first prompt
# $self->waitfor({ event => 'cont' },'/continue:.*$/');
# alternative way
$_[KERNEL]->post($self->session_id() => waitfor => { event => 'cont' } => '/continue:.*$/');
}
sub cont {
# "hit return".
$self->print({ event => 'city_code' },"");
}
sub city_code {
# Wait for second prompt and respond with city code.
$self->waitfor({ event => 'enter_city' },'/city code.*$/');
}
sub enter_city {
$self->print({ event => 'get_forecast' },"BRD");
}
sub get_forecast {
# Read and print the first page of forecast.
$self->waitfor({ event => 'forecast' },'/[ \t]+press return to continue/i');
}
sub forecast {
print "weather for BRD: ".$_[ARG0]->{result}."\n";
#$_[KERNEL]->post($self->session_id => 'shutdown');
# alternative
$self->shutdown;
# $self->DESTROY;
}
$poe_kernel->run();
exit;