Share Pastebin
Guest
Public paste!

Esempio con POE /1

By: a guest | Mar 20th, 2010 | Syntax: Perl | Size: 1.37 KB | Hits: 122 | Expires: Never
Copy text to clipboard
  1. #!/usr/bin/perl
  2.  
  3. use strict;
  4. use warnings;
  5.  
  6. # Un esempio semplice
  7. # C'e` un agente che periodicamente controlla lo stato di una risorsa
  8. # (diciamo il numero contenuto in un file).
  9. # A parte, c'e` un altro agente che attende richieste dall'utente. Nel
  10. # caso, rispondera` con lo stato conservato dall'altro agente.
  11.  
  12. use POE qw/ Component::Server::TCP /;
  13.  
  14.  
  15. my $filename = 'numero.txt';
  16. my $periodo  = 2; # Ogni quanto controllo il contenuto del file?
  17.  
  18. my $numero;
  19.  
  20.  
  21. POE::Session->create(
  22.     inline_states => {
  23.         _start          => \&_init ,
  24.         leggi_il_numero => \&leggi_il_numero
  25.     }
  26. );
  27.  
  28. POE::Component::Server::TCP->new(
  29.     Port            => 4444 ,
  30.     ClientInput     => sub { } ,
  31.     ClientConnected => \&inspector
  32. );
  33.  
  34. $poe_kernel->run();
  35.  
  36.  
  37. sub _init {
  38.         my $kernel = $_[ KERNEL ];
  39.  
  40.         $kernel->delay( 'leggi_il_numero', $periodo );
  41. }
  42.  
  43. sub leggi_il_numero {
  44.         my $kernel = $_[ KERNEL ];
  45.        
  46.         open my $fh, "<", $filename or warn "$!";
  47.         $numero = <$fh>;
  48.         close $fh;
  49.  
  50.         # Ora diciamo al kernel di ri-mandarci il messaggio tra N
  51.         # secondi. E` l'equivalente di fare un loop
  52.         $kernel->delay( 'leggi_il_numero', $periodo );
  53. }
  54.  
  55.  
  56. sub inspector {
  57.         my $kernel = $_[ KERNEL ];
  58.         my $heap   = $_[ HEAP ];
  59.  
  60.         $heap->{ client }->put( "Inspector\n" );
  61.         $heap->{ client }->put( "Il numero e`: $numero\n" );
  62.  
  63.         $kernel->yield( "shutdown" );
  64. }