Esempio con POE /1
By: a guest | Mar 20th, 2010 | Syntax:
Perl | Size: 1.37 KB | Hits: 122 | Expires: Never
#!/usr/bin/perl
use strict;
use warnings;
# Un esempio semplice
# C'e` un agente che periodicamente controlla lo stato di una risorsa
# (diciamo il numero contenuto in un file).
# A parte, c'e` un altro agente che attende richieste dall'utente. Nel
# caso, rispondera` con lo stato conservato dall'altro agente.
use POE qw/ Component::Server::TCP /;
my $filename = 'numero.txt';
my $periodo = 2; # Ogni quanto controllo il contenuto del file?
my $numero;
POE::Session->create(
inline_states => {
_start => \&_init ,
leggi_il_numero => \&leggi_il_numero
}
);
POE::Component::Server::TCP->new(
Port => 4444 ,
ClientInput => sub { } ,
ClientConnected => \&inspector
);
$poe_kernel->run();
sub _init {
my $kernel = $_[ KERNEL ];
$kernel->delay( 'leggi_il_numero', $periodo );
}
sub leggi_il_numero {
my $kernel = $_[ KERNEL ];
open my $fh, "<", $filename or warn "$!";
$numero = <$fh>;
close $fh;
# Ora diciamo al kernel di ri-mandarci il messaggio tra N
# secondi. E` l'equivalente di fare un loop
$kernel->delay( 'leggi_il_numero', $periodo );
}
sub inspector {
my $kernel = $_[ KERNEL ];
my $heap = $_[ HEAP ];
$heap->{ client }->put( "Inspector\n" );
$heap->{ client }->put( "Il numero e`: $numero\n" );
$kernel->yield( "shutdown" );
}