#!/usr/bin/perl
# vim: ts=2 sw=2 noexpandtab
# Demonstrate Runner.pm used with other open3-like things.
use warnings;
use strict;
use lib qw(../lib);
use Runner;
my $cmd = q(
perl -MTime::HiRes=sleep -wle '
$| = 1;
for (1..3) { $_ = qq[pid($$) moo($_)]; print; warn "$_\n"; sleep rand; }
'
);
sub my_start {
my ($host, $cmd) = @_;
use Net::SSH qw(sshopen3);
use Symbol qw(gensym);
my ($fh_in, $fh_out, $fh_err) = (gensym(), gensym(), gensym());
my $pid = sshopen3($host, $fh_in, $fh_out, $fh_err, $cmd);
return($pid, $fh_in, $fh_out, $fh_err);
}
my $runner_1;
{
my ($pid, $fh_in, $fh_out, $fh_err) = my_start('remote.example.com', $cmd);
$runner_1 = Runner->new(
stdin => $fh_in,
stdout => $fh_out,
stderr => $fh_err,
pid => $pid,
on_stdout_closed => sub { print "runner_1 stdout closed\n" },
on_stderr_closed => sub { print "runner_1 stderr closed\n" },
on_stdout_data => sub { print "runner_1 stdout: ", $_[1]->octets() },
on_stderr_data => sub { print "runner_1 stderr: ", $_[1]->octets() },
on_exit => sub {
my ($self, $child) = @_;
warn "runner_1 child ", $child->pid(), " exited: ", $child->exit(), "\n";
$runner_1 = undef;
},
);
}
my $runner_2;
{
my ($pid, $fh_in, $fh_out, $fh_err) = my_start('remote.example.com', $cmd);
$runner_2 = Runner->new(
stdin => $fh_in,
stdout => $fh_out,
stderr => $fh_err,
pid => $pid,
on_stdout_closed => sub { print "runner_2 stdout closed\n" },
on_stderr_closed => sub { print "runner_2 stderr closed\n" },
on_stdout_data => sub { print "runner_2 stdout: ", $_[1]->octets() },
on_stderr_data => sub { print "runner_2 stderr: ", $_[1]->octets() },
on_exit => sub {
my ($self, $child) = @_;
warn "runner_2 child ", $child->pid(), " exited: ", $child->exit(), "\n";
$runner_2 = undef;
},
);
}
Reflex->run_all();
exit;