ensure, better scripting infrastructure
[scpubgit/Tak.git] / lib / Tak / STDIOSetup.pm
1 package Tak::STDIOSetup;
2
3 BEGIN { require MRO::Compat; }
4
5 use Tak::ConnectionService;
6 use Tak::Router;
7 use Tak;
8 use strictures 1;
9
10 sub run {
11   open my $stdin, '<&', \*STDIN;
12   open my $stdout, '>&', \*STDOUT;
13   # if we don't re-open them then 0 and 1 get re-used - which is not
14   # only potentially bloody confusing but results in warnings like:
15   # "Filehandle STDOUT reopened as STDIN only for input"
16   close STDIN; open STDIN, '<', '/dev/null';
17   close STDOUT; open STDOUT, '>', '/dev/null';
18   my $done;
19   my $connection = Tak::ConnectionService->new(
20     read_fh => $stdin, write_fh => $stdout,
21     listening_service => Tak::Router->new,
22     on_close => sub { $done = 1 }
23   );
24   $connection->receiver->service->register_weak(remote => $connection);
25   if ($0 eq '-') {
26     $0 = 'tak-stdio-node';
27   }
28   Tak->loop_until($done);
29 }
30
31 1;