use POE qw/Component::Server::TCP Wheel::Run/; *POE::Kernel::USE_SIGCHLD = sub (){1}; $SIG{CHLD} = 'ignore'; my %program = ( time => '/bin/date', perlit => 'perl get_name.pl', ); POE::Component::Server::TCP->new( Alias => 'Job Server', Port => 32080, ClientConnected => sub { $_[KERNEL]->yield('usage'); }, ClientDisconnected => sub { delete $_[HEAP]->{job}; }, ClientInput => sub { my ($heap, $input) = @_[HEAP, ARG0]; if ($heap->{job}) { $heap->{job}->put($input); return; } my $program = $program{$input}; unless (defined $program) { $_[KERNEL]->yield('usage'); return; } $heap->{job} = POE::Wheel::Run->new( Program => $program, StdioFilter => POE::Filter::Line->new(), StderrFilter => POE::Filter::Line->new(), Conduit => 'pty', StdoutEvent => 'got_job_stdout', StderrEvent => 'got_job_stderr', CloseEvent => 'got_job_close', ); $heap->{client}->put('Job' . $heap->{job}->PID . 'Started'); }, InlineStates => { got_job_stdout => sub { my $heap = $_[HEAP]; $heap->{client}->put($_[ARG0]); }, got_job_stderr => sub { my $heap = $_[HEAP]; $heap->{client}->put('ERR' . $_[ARG0]); }, got_job_close => sub { my ($heap, $kernel) = @_[HEAP, KERNEL]; my $job = delete $heap->{job}; $heap->{client}->put('Job' . $job->PID . ' Stopped'); }, usage => sub { my @commands = sort keys %program; $_[HEAP]->{client}->put("Commands : @commands"); }, } ); $poe_kernel->run();
In reply to child reap in poe? by woosley
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |