POE
-
Upload
stefano-rodighiero -
Category
Technology
-
view
4.325 -
download
2
description
Transcript of POE
![Page 1: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/1.jpg)
POEStefano Rodighiero
OpenExp 2006
![Page 2: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/2.jpg)
POE - A Perl Object Environment
PerlObjectEnvironment
![Page 3: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/3.jpg)
POE - A Perl Object Environment
?
![Page 4: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/4.jpg)
POE - A Perl Object Environment
Framework
![Page 5: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/5.jpg)
POE - A Perl Object Environment
Eventdriven
![Page 6: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/6.jpg)
POE - A Perl Object Environment
MultitaskingCooperativo
![Page 7: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/7.jpg)
POE - A Perl Object Environment
Singlethread
![Page 8: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/8.jpg)
POE - A Perl Object Environment
Networking
![Page 9: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/9.jpg)
POE - A Perl Object Environment
Systemadministration
![Page 10: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/10.jpg)
POE - A Perl Object Environment
GUI
![Page 11: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/11.jpg)
POE - A Perl Object Environment
![Page 12: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/12.jpg)
POE - A Perl Object Environment
Component
Wheel
Session
Kernel
“Architettura”
![Page 13: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/13.jpg)
POE - A Perl Object Environment
Component
Wheel
Session
Kernel
Dispatch di eventi
![Page 14: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/14.jpg)
POE - A Perl Object Environment
Component
Wheel
Session
Kernel
Risponde agli eventi
![Page 15: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/15.jpg)
POE - A Perl Object Environment
Component
Wheel
Session
Kernel
“Plugin” per sessioni, incapsula insiemi di
gestori di eventi
POE::Wheel::FollowTailPOE::Wheel::Run
![Page 16: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/16.jpg)
POE - A Perl Object Environment
Component
Wheel
Session
Kernel
POE::Component::IRCPOE::Component::Server::TCP
POE::Component::Server::SimpleHTTP…CPAN…
![Page 17: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/17.jpg)
POE - A Perl Object Environment
![Page 18: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/18.jpg)
POE - A Perl Object Environment
Un programma tipico
• Istanzia una o più sessioni
• Esplicitamente, eventualmente usando delle Wheel
• Implicitamente, con Componenti già pronti
• POE::Kernel->run()
![Page 19: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/19.jpg)
POE - A Perl Object Environment
sub POE::Kernel::TRACE_EVENTS() { 1 }
![Page 20: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/20.jpg)
POE - A Perl Object Environment
use POE;
![Page 21: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/21.jpg)
POE - A Perl Object Environment
for ( 1 .. 3 ) { POE::Session -> create( inline_states => { _start => sub { print "Start!\n" }, _stop => sub { print "Stop!\n" } } );}
![Page 22: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/22.jpg)
POE - A Perl Object Environment
POE::Kernel->run();
![Page 23: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/23.jpg)
POE - A Perl Object Environment
Kernel
Session
_start
![Page 24: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/24.jpg)
POE - A Perl Object Environment
Kernel
_start
Session
_start => sub { print "Start!\n" }
![Page 25: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/25.jpg)
POE - A Perl Object Environment
Passaggio di messaggi
post() Accoda un evento, da inoltrare alla session specificata
yield() Accoda un evento, da inoltrare alla session stessa
call()Invoca - in maniera
sincrona - un evento per una sessione specificata
![Page 26: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/26.jpg)
POE - A Perl Object Environment
Passaggio di messaggi
post()/yield()
![Page 27: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/27.jpg)
POE - A Perl Object Environment
Passaggio di messaggi
call()
![Page 28: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/28.jpg)
POE - A Perl Object Environment
Comunicazione tra sessioni
![Page 29: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/29.jpg)
POE - A Perl Object Environment
# Sessione Babbo NatalePOE::Session->create( inline_states => { _start => sub { print "Oh oh oh!\n"; $poe_kernel->alias_set( "Santa" ); } , lettera => sub { print "Lettera da " . $poe_kernel->alias_list( $_[SENDER] ); } });
![Page 30: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/30.jpg)
POE - A Perl Object Environment
# Sessione Babbo NatalePOE::Session->create( inline_states => { _start => sub { print "Oh oh oh!\n"; $poe_kernel->alias_set( "Santa" ); } , lettera => sub { print "Lettera da " . $poe_kernel->alias_list( $_[SENDER] ); } });
![Page 31: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/31.jpg)
POE - A Perl Object Environment
# Sessione Babbo NatalePOE::Session->create( inline_states => { _start => sub { print "Oh oh oh!\n"; $poe_kernel->alias_set( "Santa" ); } , lettera => sub { print "Lettera da " . $poe_kernel->alias_list( $_[SENDER] ); } });
![Page 32: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/32.jpg)
POE - A Perl Object Environment
# Sessione Babbo NatalePOE::Session->create( inline_states => { _start => sub { print "Oh oh oh!\n"; $poe_kernel->alias_set( "Santa" ); } , lettera => sub { print "Lettera da " . $poe_kernel->alias_list( $_[SENDER] ); } });
![Page 33: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/33.jpg)
POE - A Perl Object Environment
# Sessione bimboPOE::Session->create( inline_states => { _start => sub { $poe_kernel->alias_set( "Paolino" ); $poe_kernel->post( "Santa" => 'lettera' ); } , });
![Page 34: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/34.jpg)
POE - A Perl Object Environment
# Sessione bimboPOE::Session->create( inline_states => { _start => sub { $poe_kernel->alias_set( "Paolino" ); $poe_kernel->post( "Santa" => 'lettera' ); } , });
![Page 35: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/35.jpg)
POE - A Perl Object Environment
Kernel
Babbo Natale _start
Paolino
_start
![Page 36: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/36.jpg)
POE - A Perl Object Environment
Kernel
Babbo Natale
Paolino
post( "Santa", "lettera" )
![Page 37: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/37.jpg)
POE - A Perl Object Environment
Kernel
Babbo Natale
Paolino
lettera
![Page 38: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/38.jpg)
POE - A Perl Object Environment
Kernel
Babbo Natale
Paolino
post( "Santa", "lettera" )
lettera
lettera
![Page 39: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/39.jpg)
POE - A Perl Object Environment
![Page 40: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/40.jpg)
POE - A Perl Object Environment
Wheel
![Page 41: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/41.jpg)
POE - A Perl Object Environment
Insiemi di gestori di
eventi
![Page 42: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/42.jpg)
POE - A Perl Object Environment
POE::Wheel::
FollowTail
![Page 43: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/43.jpg)
POE - A Perl Object Environment
use POE qw( Wheel::FollowTail );
![Page 44: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/44.jpg)
POE - A Perl Object Environment
$|++
![Page 45: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/45.jpg)
POE - A Perl Object Environment
POE::Session->create( inline_states => {...
![Page 46: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/46.jpg)
POE - A Perl Object Environment
_start => sub { my $heap = $_[ HEAP ]; my $watcher = POE::Wheel::FollowTail->new( Filename => 'logfile.log', PollInterval => 1, InputEvent => 'input_state' ); $heap->{ watcher } = $watcher;} , ...
![Page 47: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/47.jpg)
POE - A Perl Object Environment
_start => sub { my $heap = $_[ HEAP ]; my $watcher = POE::Wheel::FollowTail->new( Filename => 'logfile.log', PollInterval => 1, InputEvent => 'input_state' ); $heap->{ watcher } = $watcher;} , ...
![Page 48: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/48.jpg)
POE - A Perl Object Environment
_start => sub { my $heap = $_[ HEAP ]; my $watcher = POE::Wheel::FollowTail->new( Filename => 'logfile.log', PollInterval => 1, InputEvent => 'input_state' ); $heap->{ watcher } = $watcher;} , ...
![Page 49: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/49.jpg)
POE - A Perl Object Environment
_start => sub { my $heap = $_[ HEAP ]; my $watcher = POE::Wheel::FollowTail->new( Filename => 'logfile.log', PollInterval => 1, InputEvent => 'input_state' ); $heap->{ watcher } = $watcher;} , ...
![Page 50: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/50.jpg)
POE - A Perl Object Environment
_start => sub { my $heap = $_[ HEAP ]; my $watcher = POE::Wheel::FollowTail->new( Filename => 'logfile.log', PollInterval => 1, InputEvent => 'input_state' ); $heap->{ watcher } = $watcher;} , ...
![Page 51: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/51.jpg)
POE - A Perl Object Environment
input_state => sub { my $input = $_[ ARG0 ]; print $input;}
![Page 52: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/52.jpg)
POE - A Perl Object Environment
Session
Wheel
__________
__________
__________
__________
__________
__________
![Page 53: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/53.jpg)
POE - A Perl Object Environment
Session
Wheel
__________
__________
__________
__________
__________
__________
input_event
![Page 54: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/54.jpg)
POE - A Perl Object Environment
![Page 55: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/55.jpg)
POE - A Perl Object Environment
POE+ Test+ IRC
![Page 56: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/56.jpg)
POE - A Perl Object Environment
Testing?
![Page 57: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/57.jpg)
POE - A Perl Object Environment
Test ? IRC
Failed 3/10 tests
![Page 58: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/58.jpg)
POE - A Perl Object Environment
09:41 < Quinn> larsen: Avast! Whoreson swab! You failed 3/10 tests!
![Page 59: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/59.jpg)
POE - A Perl Object Environment
Test ? IRC
![Page 60: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/60.jpg)
POE - A Perl Object Environment
__________
__________
__________
__________
__________
__________
Session
POE::
Wheel::
FollowTail
POE::Component::
IRC
![Page 61: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/61.jpg)
POE - A Perl Object Environment
POE::Component::
IRC
![Page 62: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/62.jpg)
POE - A Perl Object Environment
use POE qw/ Wheel::FollowTail Component::IRC /;
![Page 63: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/63.jpg)
POE - A Perl Object Environment
use Acme::Scurvy::Whoreson::BilgeRat;
![Page 64: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/64.jpg)
POE - A Perl Object Environment
my $conf = { nick => 'Quinn', ircname => 'HAR!', server => 'irc.freenode.net', port => 6667};my $channel = '#scummbar';
![Page 65: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/65.jpg)
POE - A Perl Object Environment
my $irc = POE::Component::IRC->spawn( %$conf ) or die "HAR!!! $!";
![Page 66: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/66.jpg)
POE - A Perl Object Environment
POE::Session->create( package_states => [ 'main' => [ qw( _default _start irc_001 irc_public tell_results ) ], ], heap => { irc => $irc });
![Page 67: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/67.jpg)
POE - A Perl Object Environment
POE::Session->create( package_states => [ 'main' => [ qw( _default _start irc_001 irc_public tell_results ) ], ], heap => { irc => $irc });
![Page 68: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/68.jpg)
POE - A Perl Object Environment
POE::Session->create( package_states => [ 'main' => [ qw( _default _start irc_001 irc_public tell_results ) ], ], heap => { irc => $irc });
![Page 69: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/69.jpg)
POE - A Perl Object Environment
sub _start { my ( $kernel, $heap ) = @_[ KERNEL, HEAP ];
my $watcher = POE::Wheel::FollowTail->new( Filename => 'tests.log' , PollInterval => 1 , InputEvent => 'tell_results' );
$heap->{ watcher } = $watcher;
my $irc_sess = $heap->{irc}->session_id(); $kernel->post( $irc_sess => register => 'all' ); $kernel->post( $irc_sess => connect => {} ); undef;}
![Page 70: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/70.jpg)
POE - A Perl Object Environment
sub _start { my ( $kernel, $heap ) = @_[ KERNEL, HEAP ];
my $watcher = POE::Wheel::FollowTail->new( Filename => 'tests.log' , PollInterval => 1 , InputEvent => 'tell_results' );
$heap->{ watcher } = $watcher;
my $irc_sess = $heap->{irc}->session_id(); $kernel->post( $irc_sess => register => 'all' ); $kernel->post( $irc_sess => connect => {} ); undef;}
![Page 71: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/71.jpg)
POE - A Perl Object Environment
sub _start { my ( $kernel, $heap ) = @_[ KERNEL, HEAP ];
my $watcher = POE::Wheel::FollowTail->new( Filename => 'tests.log' , PollInterval => 1 , InputEvent => 'tell_results' );
$heap->{ watcher } = $watcher;
my $irc_sess = $heap->{irc}->session_id(); $kernel->post( $irc_sess => register => 'all' ); $kernel->post( $irc_sess => connect => {} ); undef;}
![Page 72: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/72.jpg)
POE - A Perl Object Environment
sub irc_001 { my ( $kernel, $sender ) = @_[ KERNEL, SENDER ];
$kernel->post( $sender => join => $channel ); undef;}
![Page 73: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/73.jpg)
POE - A Perl Object Environment
sub tell_results { my $kernel = $_[KERNEL]; my $heap = $_[HEAP]; my $line = $_[ARG0]; my $irc_session = $heap->{irc};
my ($failed, $total) = split qr|/|, $line;
if ($failed) { my $insult = Acme::Scurvy::Whoreson::BilgeRat->new( language => 'pirate' );
$kernel->post( $irc_session => privmsg => $channel => "$insult! You failed $failed tests!" ); } }}
![Page 74: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/74.jpg)
POE - A Perl Object Environment
sub tell_results { my $kernel = $_[KERNEL]; my $heap = $_[HEAP]; my $line = $_[ARG0]; my $irc_session = $heap->{irc};
my ($failed, $total) = split qr|/|, $line;
if ($failed) { my $insult = Acme::Scurvy::Whoreson::BilgeRat->new( language => 'pirate' );
$kernel->post( $irc_session => privmsg => $channel => "$insult! You failed $failed tests!" ); } }}
![Page 75: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/75.jpg)
POE - A Perl Object Environment
sub tell_results { my $kernel = $_[KERNEL]; my $heap = $_[HEAP]; my $line = $_[ARG0]; my $irc_session = $heap->{irc};
my ($failed, $total) = split qr|/|, $line;
if ($failed) { my $insult = Acme::Scurvy::Whoreson::BilgeRat->new( language => 'pirate' );
$kernel->post( $irc_session => privmsg => $channel => "$insult! You failed $failed tests!" ); } }}
![Page 76: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/76.jpg)
POE - A Perl Object Environment
![Page 77: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/77.jpg)
POE - A Perl Object Environment
• irc.freenode.net,#poe
• http://poe.perl.org
• “Advanced Perl Programming” (O’Reilly) - Cap.7
• http://del.icio.us/slr/poe ☺
![Page 78: POE](https://reader034.fdocuments.us/reader034/viewer/2022051513/547e1dccb4af9f67088b4754/html5/thumbnails/78.jpg)
POE - A Perl Object Environment
• http://www.perl.it
• irc.freenode.net,#perl.it