Mais conteúdo relacionado Mais de Stefano Rodighiero (8) POE3. ?
POE - A Perl Object Environment 10. GUI
POE - A Perl Object Environment 11. POE - A Perl Object Environment 12. Component
Wheel
“Architettura”
Session
Kernel
POE - A Perl Object Environment 13. Component
Wheel
Dispatch di eventi
Session
Kernel
POE - A Perl Object Environment 14. Component
Wheel
Risponde agli eventi
Session
Kernel
POE - A Perl Object Environment 15. Component
“Plugin” per sessioni,
incapsula insiemi di
Wheel
gestori di eventi
Session POE::Wheel::FollowTail
POE::Wheel::Run
Kernel
POE - A Perl Object Environment 16. Component
Wheel POE::Component::IRC
POE::Component::Server::TCP
POE::Component::Server::SimpleHTTP
…CPAN…
Session
Kernel
POE - A Perl Object Environment 17. POE - A Perl Object Environment 18. Un programma tipico
• Istanzia una o più sessioni
• Esplicitamente, eventualmente usando
delle Wheel
• Implicitamente, con Componenti già
pronti
• POE::Kernel->run()
POE - A Perl Object Environment 20. use POE;
POE - A Perl Object Environment 21. for ( 1 .. 3 ) {
POE::Session -> create(
inline_states => {
_start => sub { print quot;Start!nquot; },
_stop => sub { print quot;Stop!nquot; }
} );
}
POE - A Perl Object Environment 24. _start
Session
_start =>
sub {
print quot;Start!nquot;
Kernel
}
POE - A Perl Object Environment 25. Passaggio di messaggi
Accoda un evento, da inoltrare
post() alla session specificata
Accoda un evento, da inoltrare
yield() alla session stessa
Invoca - in maniera
sincrona - un evento per una
call()
sessione specificata
POE - A Perl Object Environment 29. # Sessione Babbo Natale
POE::Session->create(
inline_states => {
_start => sub {
print quot;Oh oh oh!nquot;;
$poe_kernel->alias_set( quot;Santaquot; );
},
lettera => sub {
print quot;Lettera da quot;
. $poe_kernel->alias_list( $_[SENDER] );
}
}
);
POE - A Perl Object Environment 30. # Sessione Babbo Natale
POE::Session->create(
inline_states => {
_start => sub {
print quot;Oh oh oh!nquot;;
$poe_kernel->alias_set( quot;Santaquot; );
},
lettera => sub {
print quot;Lettera da quot;
. $poe_kernel->alias_list( $_[SENDER] );
}
}
);
POE - A Perl Object Environment 31. # Sessione Babbo Natale
POE::Session->create(
inline_states => {
_start => sub {
print quot;Oh oh oh!nquot;;
$poe_kernel->alias_set( quot;Santaquot; );
},
lettera => sub {
print quot;Lettera da quot;
. $poe_kernel->alias_list( $_[SENDER] );
}
}
);
POE - A Perl Object Environment 32. # Sessione Babbo Natale
POE::Session->create(
inline_states => {
_start => sub {
print quot;Oh oh oh!nquot;;
$poe_kernel->alias_set( quot;Santaquot; );
},
lettera => sub {
print quot;Lettera da quot;
. $poe_kernel->alias_list( $_[SENDER] );
}
}
);
POE - A Perl Object Environment 33. # Sessione bimbo
POE::Session->create(
inline_states => {
_start => sub {
$poe_kernel->alias_set( quot;Paolinoquot; );
$poe_kernel->post( quot;Santaquot; => 'lettera' );
},
}
);
POE - A Perl Object Environment 34. # Sessione bimbo
POE::Session->create(
inline_states => {
_start => sub {
$poe_kernel->alias_set( quot;Paolinoquot; );
$poe_kernel->post( quot;Santaquot; => 'lettera' );
},
}
);
POE - A Perl Object Environment 35. Babbo Natale _start
Kernel
Paolino
_start
POE - A Perl Object Environment 36. Babbo Natale
Kernel
Paolino
post( quot;Santaquot;, quot;letteraquot; )
POE - A Perl Object Environment 37. lettera
Babbo Natale
Kernel
Paolino
POE - A Perl Object Environment 38. lettera
Babbo Natale
lettera
Kernel
Paolino
post( quot;Santaquot;, quot;letteraquot; )
POE - A Perl Object Environment 39. POE - A Perl Object Environment 40. Wheel
POE - A Perl Object Environment 44. $|++
POE - A Perl Object Environment 46. _start = sub {
my $heap = $_[ HEAP ];
my $watcher = POE::Wheel::FollowTail-new(
Filename = 'logfile.log',
PollInterval = 1,
InputEvent = 'input_state'
);
$heap-{ watcher } = $watcher;
} , ...
POE - A Perl Object Environment 47. _start = sub {
my $heap = $_[ HEAP ];
my $watcher = POE::Wheel::FollowTail-new(
Filename = 'logfile.log',
PollInterval = 1,
InputEvent = 'input_state'
);
$heap-{ watcher } = $watcher;
} , ...
POE - A Perl Object Environment 48. _start = sub {
my $heap = $_[ HEAP ];
my $watcher = POE::Wheel::FollowTail-new(
Filename = 'logfile.log',
PollInterval = 1,
InputEvent = 'input_state'
);
$heap-{ watcher } = $watcher;
} , ...
POE - A Perl Object Environment 49. _start = sub {
my $heap = $_[ HEAP ];
my $watcher = POE::Wheel::FollowTail-new(
Filename = 'logfile.log',
PollInterval = 1,
InputEvent = 'input_state'
);
$heap-{ watcher } = $watcher;
} , ...
POE - A Perl Object Environment 50. _start = sub {
my $heap = $_[ HEAP ];
my $watcher = POE::Wheel::FollowTail-new(
Filename = 'logfile.log',
PollInterval = 1,
InputEvent = 'input_state'
);
$heap-{ watcher } = $watcher;
} , ...
POE - A Perl Object Environment 51. input_state = sub {
my $input = $_[ ARG0 ];
print $input;
}
POE - A Perl Object Environment 54. POE - A Perl Object Environment 56. Testing?
POE - A Perl Object Environment 57. Failed 3/10
tests
?
Test IRC
POE - A Perl Object Environment 58. 09:41 Quinn larsen: Avast!
Whoreson swab!
You failed 3/10 tests!
POE - A Perl Object Environment 59. ?
Test IRC
POE - A Perl Object Environment 60. Session
POE::
Wheel::
__________ FollowTail
__________
__________
__________
__________
__________
POE::
Component::
IRC
POE - A Perl Object Environment 62. use POE qw/ Wheel::FollowTail
Component::IRC
/;
POE - A Perl Object Environment 64. my $conf = {
nick = 'Quinn',
ircname = 'HAR!',
server = 'irc.freenode.net',
port = 6667
};
my $channel = '#scummbar';
POE - A Perl Object Environment 65. my $irc = POE::Component::IRC-spawn( %$conf )
or die quot;HAR!!! $!quot;;
POE - A Perl Object Environment 66. POE::Session-create(
package_states = [
'main' = [ qw(
_default
_start
irc_001
irc_public
tell_results
) ],
],
heap = { irc = $irc }
);
POE - A Perl Object Environment 67. POE::Session-create(
package_states = [
'main' = [ qw(
_default
_start
irc_001
irc_public
tell_results
) ],
],
heap = { irc = $irc }
);
POE - A Perl Object Environment 68. POE::Session-create(
package_states = [
'main' = [ qw(
_default
_start
irc_001
irc_public
tell_results
) ],
],
heap = { irc = $irc }
);
POE - A Perl Object Environment 69. 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;
}
POE - A Perl Object Environment 70. 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;
}
POE - A Perl Object Environment 71. 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;
}
POE - A Perl Object Environment 72. sub irc_001 {
my ( $kernel, $sender ) =
@_[ KERNEL, SENDER ];
$kernel-post(
$sender = join = $channel );
undef;
}
POE - A Perl Object Environment 73. 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 = quot;$insult! You failed $failed tests!quot; );
}
}
}
POE - A Perl Object Environment 74. 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 = quot;$insult! You failed $failed tests!quot; );
}
}
}
POE - A Perl Object Environment 75. 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 = quot;$insult! You failed $failed tests!quot; );
}
}
}
POE - A Perl Object Environment 76. POE - A Perl Object Environment